Search in sources :

Example 1 with AnnotationInvocation

use of org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation in project ceylon by eclipse.

the class AnnotationLoader method makeInterorAnnotationConstructorInvocation.

public void makeInterorAnnotationConstructorInvocation(AnnotationProxyMethod ctor, AnnotationProxyClass klass, java.util.List<Parameter> ctorParams) {
    AnnotationInvocation ai = new AnnotationInvocation();
    ai.setConstructorDeclaration(ctor);
    ai.setPrimary(klass);
    ai.setInterop(true);
    ctor.setAnnotationConstructor(ai);
    java.util.List<AnnotationArgument> annotationArgs = new ArrayList<AnnotationArgument>();
    for (Parameter ctorParam : ctorParams) {
        boolean isValue = ctorParam.getName().equals("value");
        ParameterAnnotationTerm term = new ParameterAnnotationTerm();
        AnnotationArgument argument = new AnnotationArgument();
        argument.setTerm(term);
        argument.setParameter(klass.getParameter(ctorParam.getName()));
        term.setSourceParameter(ctorParam);
        AnnotationConstructorParameter acp = new AnnotationConstructorParameter();
        acp.setParameter(ctorParam);
        if (isValue)
            ai.addConstructorParameter(0, acp);
        else
            ai.addConstructorParameter(acp);
        annotationArgs.add(argument);
    }
    ai.getAnnotationArguments().addAll(annotationArgs);
}
Also used : ParameterAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.ParameterAnnotationTerm) AnnotationInvocation(org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation) AnnotationConstructorParameter(org.eclipse.ceylon.compiler.java.codegen.AnnotationConstructorParameter) ArrayList(java.util.ArrayList) AnnotationConstructorParameter(org.eclipse.ceylon.compiler.java.codegen.AnnotationConstructorParameter) Parameter(org.eclipse.ceylon.model.typechecker.model.Parameter) AnnotationArgument(org.eclipse.ceylon.compiler.java.codegen.AnnotationArgument)

Example 2 with AnnotationInvocation

use of org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation in project ceylon by eclipse.

the class AnnotationLoader method loadAnnotationArgumentTerm.

private AnnotationTerm loadAnnotationArgumentTerm(List<AnnotationFieldName> path, LazyFunction method, AnnotationInvocation ai, Parameter parameter, List<AnnotationMirror> annotationTree, AnnotatedMirror dpm, short code) {
    if (code < 0 && code != Short.MIN_VALUE) {
        AnnotationMirror i = annotationTree.get(-code);
        AnnotationInvocation nested = new AnnotationInvocation();
        setPrimaryFromAnnotationInvocationAnnotation(i, nested);
        loadAnnotationInvocationArguments(path, method, nested, i, annotationTree, dpm);
        InvocationAnnotationTerm term = new InvocationAnnotationTerm();
        term.setInstantiation(nested);
        return term;
    } else {
        AnnotationTerm term = decode(ModelUtil.getModuleContainer(method), method.getFirstParameterList().getParameters(), ai, parameter, dpm, path, code);
        return term;
    }
}
Also used : AnnotationMirror(org.eclipse.ceylon.model.loader.mirror.AnnotationMirror) AnnotationInvocation(org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation) InvocationAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.InvocationAnnotationTerm) CollectionLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.CollectionLiteralAnnotationTerm) FloatLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.FloatLiteralAnnotationTerm) ObjectLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.ObjectLiteralAnnotationTerm) LiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.LiteralAnnotationTerm) DeclarationLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.DeclarationLiteralAnnotationTerm) BooleanLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.BooleanLiteralAnnotationTerm) InvocationAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.InvocationAnnotationTerm) AnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.AnnotationTerm) CharacterLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.CharacterLiteralAnnotationTerm) ParameterAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.ParameterAnnotationTerm) IntegerLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.IntegerLiteralAnnotationTerm) StringLiteralAnnotationTerm(org.eclipse.ceylon.compiler.java.codegen.StringLiteralAnnotationTerm)

Example 3 with AnnotationInvocation

use of org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation in project ceylon by eclipse.

the class AnnotationLoader method setAnnotationConstructor.

public void setAnnotationConstructor(LazyFunction method, MethodMirror meth) {
    AnnotationInvocation ai = loadAnnotationInvocation(method, method.classMirror, meth);
    if (ai != null) {
        loadAnnotationConstructorDefaultedParameters(method, meth, ai);
        ai.setConstructorDeclaration(method);
        method.setAnnotationConstructor(ai);
    }
}
Also used : AnnotationInvocation(org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation)

Example 4 with AnnotationInvocation

use of org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation in project ceylon by eclipse.

the class AnnotationLoader method loadAnnotationInvocation.

private AnnotationInvocation loadAnnotationInvocation(LazyFunction method, AnnotatedMirror annoInstMirror, MethodMirror meth) {
    AnnotationInvocation ai = null;
    AnnotationMirror annotationInvocationAnnotation = null;
    List<AnnotationMirror> annotationTree = getAnnotationArrayValue(annoInstMirror, AbstractModelLoader.CEYLON_ANNOTATION_INSTANTIATION_TREE_ANNOTATION, "value");
    if (annotationTree != null && !annotationTree.isEmpty()) {
        annotationInvocationAnnotation = annotationTree.get(0);
    } else {
        annotationInvocationAnnotation = annoInstMirror.getAnnotation(AbstractModelLoader.CEYLON_ANNOTATION_INSTANTIATION_ANNOTATION);
    }
    // stringValueAnnotation = annoInstMirror.getAnnotation(CEYLON_STRING_VALUE_ANNOTATION);
    if (annotationInvocationAnnotation != null) {
        ai = new AnnotationInvocation();
        setPrimaryFromAnnotationInvocationAnnotation(annotationInvocationAnnotation, ai);
        loadAnnotationInvocationArguments(new ArrayList<AnnotationFieldName>(2), method, ai, annotationInvocationAnnotation, annotationTree, annoInstMirror);
    }
    return ai;
}
Also used : AnnotationMirror(org.eclipse.ceylon.model.loader.mirror.AnnotationMirror) AnnotationInvocation(org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation) AnnotationFieldName(org.eclipse.ceylon.compiler.java.codegen.AnnotationFieldName)

Aggregations

AnnotationInvocation (org.eclipse.ceylon.compiler.java.codegen.AnnotationInvocation)4 ParameterAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.ParameterAnnotationTerm)2 AnnotationMirror (org.eclipse.ceylon.model.loader.mirror.AnnotationMirror)2 ArrayList (java.util.ArrayList)1 AnnotationArgument (org.eclipse.ceylon.compiler.java.codegen.AnnotationArgument)1 AnnotationConstructorParameter (org.eclipse.ceylon.compiler.java.codegen.AnnotationConstructorParameter)1 AnnotationFieldName (org.eclipse.ceylon.compiler.java.codegen.AnnotationFieldName)1 AnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.AnnotationTerm)1 BooleanLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.BooleanLiteralAnnotationTerm)1 CharacterLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.CharacterLiteralAnnotationTerm)1 CollectionLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.CollectionLiteralAnnotationTerm)1 DeclarationLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.DeclarationLiteralAnnotationTerm)1 FloatLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.FloatLiteralAnnotationTerm)1 IntegerLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.IntegerLiteralAnnotationTerm)1 InvocationAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.InvocationAnnotationTerm)1 LiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.LiteralAnnotationTerm)1 ObjectLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.ObjectLiteralAnnotationTerm)1 StringLiteralAnnotationTerm (org.eclipse.ceylon.compiler.java.codegen.StringLiteralAnnotationTerm)1 Parameter (org.eclipse.ceylon.model.typechecker.model.Parameter)1