Example usage for org.eclipse.jdt.core IMemberValuePair K_UNKNOWN

List of usage examples for org.eclipse.jdt.core IMemberValuePair K_UNKNOWN

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IMemberValuePair K_UNKNOWN.

Prototype

int K_UNKNOWN

To view the source code for org.eclipse.jdt.core IMemberValuePair K_UNKNOWN.

Click Source Link

Document

Constant indicating that the value kind is unknown at this stage.

Usage

From source file:com.codenvy.ide.ext.java.server.internal.core.CompilationUnitStructureRequestor.java

License:Open Source License

protected Object getMemberValue(com.codenvy.ide.ext.java.server.internal.core.MemberValuePair memberValuePair,
        Expression expression) {/*  w w w. j a v  a2 s.  c o  m*/
    if (expression instanceof NullLiteral) {
        return null;
    } else if (expression instanceof Literal) {
        ((Literal) expression).computeConstant();
        return Util.getAnnotationMemberValue(memberValuePair, expression.constant);
    } else if (expression instanceof org.eclipse.jdt.internal.compiler.ast.Annotation) {
        org.eclipse.jdt.internal.compiler.ast.Annotation annotation = (org.eclipse.jdt.internal.compiler.ast.Annotation) expression;
        Object handle = acceptAnnotation(annotation, null, (JavaElement) this.handleStack.peek());
        memberValuePair.valueKind = IMemberValuePair.K_ANNOTATION;
        return handle;
    } else if (expression instanceof ClassLiteralAccess) {
        ClassLiteralAccess classLiteral = (ClassLiteralAccess) expression;
        char[] name = CharOperation.concatWith(classLiteral.type.getTypeName(), '.');
        memberValuePair.valueKind = IMemberValuePair.K_CLASS;
        return new String(name);
    } else if (expression instanceof QualifiedNameReference) {
        char[] qualifiedName = CharOperation.concatWith(((QualifiedNameReference) expression).tokens, '.');
        memberValuePair.valueKind = IMemberValuePair.K_QUALIFIED_NAME;
        return new String(qualifiedName);
    } else if (expression instanceof SingleNameReference) {
        char[] simpleName = ((SingleNameReference) expression).token;
        if (simpleName == RecoveryScanner.FAKE_IDENTIFIER) {
            memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
            return null;
        }
        memberValuePair.valueKind = IMemberValuePair.K_SIMPLE_NAME;
        return new String(simpleName);
    } else if (expression instanceof ArrayInitializer) {
        memberValuePair.valueKind = -1; // modified below by the first call to getMemberValue(...)
        Expression[] expressions = ((ArrayInitializer) expression).expressions;
        int length = expressions == null ? 0 : expressions.length;
        Object[] values = new Object[length];
        for (int i = 0; i < length; i++) {
            int previousValueKind = memberValuePair.valueKind;
            Object value = getMemberValue(memberValuePair, expressions[i]);
            if (previousValueKind != -1 && memberValuePair.valueKind != previousValueKind) {
                // values are heterogeneous, value kind is thus unknown
                memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
            }
            values[i] = value;
        }
        if (memberValuePair.valueKind == -1)
            memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return values;
    } else if (expression instanceof UnaryExpression) { // to deal with negative numerals (see bug - 248312)
        UnaryExpression unaryExpression = (UnaryExpression) expression;
        if ((unaryExpression.bits & ASTNode.OperatorMASK) >> ASTNode.OperatorSHIFT == OperatorIds.MINUS) {
            if (unaryExpression.expression instanceof Literal) {
                Literal subExpression = (Literal) unaryExpression.expression;
                subExpression.computeConstant();
                return Util.getNegativeAnnotationMemberValue(memberValuePair, subExpression.constant);
            }
        }
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    } else {
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.LocalVariable.java

License:Open Source License

private Object getAnnotationMemberValue(MemberValuePair memberValuePair, Expression expression,
        JavaElement parentElement) {//w  w  w .  j av a2  s. c  om
    if (expression instanceof NullLiteral) {
        return null;
    } else if (expression instanceof Literal) {
        ((Literal) expression).computeConstant();
        return Util.getAnnotationMemberValue(memberValuePair, expression.constant);
    } else if (expression instanceof org.eclipse.jdt.internal.compiler.ast.Annotation) {
        memberValuePair.valueKind = IMemberValuePair.K_ANNOTATION;
        return getAnnotation((org.eclipse.jdt.internal.compiler.ast.Annotation) expression, parentElement);
    } else if (expression instanceof ClassLiteralAccess) {
        ClassLiteralAccess classLiteral = (ClassLiteralAccess) expression;
        char[] typeName = CharOperation.concatWith(classLiteral.type.getTypeName(), '.');
        memberValuePair.valueKind = IMemberValuePair.K_CLASS;
        return new String(typeName);
    } else if (expression instanceof QualifiedNameReference) {
        char[] qualifiedName = CharOperation.concatWith(((QualifiedNameReference) expression).tokens, '.');
        memberValuePair.valueKind = IMemberValuePair.K_QUALIFIED_NAME;
        return new String(qualifiedName);
    } else if (expression instanceof SingleNameReference) {
        char[] simpleName = ((SingleNameReference) expression).token;
        if (simpleName == RecoveryScanner.FAKE_IDENTIFIER) {
            memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
            return null;
        }
        memberValuePair.valueKind = IMemberValuePair.K_SIMPLE_NAME;
        return new String(simpleName);
    } else if (expression instanceof ArrayInitializer) {
        memberValuePair.valueKind = -1; // modified below by the first call to getMemberValue(...)
        Expression[] expressions = ((ArrayInitializer) expression).expressions;
        int length = expressions == null ? 0 : expressions.length;
        Object[] values = new Object[length];
        for (int i = 0; i < length; i++) {
            int previousValueKind = memberValuePair.valueKind;
            Object value = getAnnotationMemberValue(memberValuePair, expressions[i], parentElement);
            if (previousValueKind != -1 && memberValuePair.valueKind != previousValueKind) {
                // values are heterogeneous, value kind is thus unknown
                memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
            }
            values[i] = value;
        }
        if (memberValuePair.valueKind == -1)
            memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return values;
    } else if (expression instanceof UnaryExpression) { //to deal with negative numerals (see bug - 248312)
        UnaryExpression unaryExpression = (UnaryExpression) expression;
        if ((unaryExpression.bits & ASTNode.OperatorMASK) >> ASTNode.OperatorSHIFT == OperatorIds.MINUS) {
            if (unaryExpression.expression instanceof Literal) {
                Literal subExpression = (Literal) unaryExpression.expression;
                subExpression.computeConstant();
                return Util.getNegativeAnnotationMemberValue(memberValuePair, subExpression.constant);
            }
        }
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    } else {
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.util.Util.java

License:Open Source License

public static Object getAnnotationMemberValue(JavaElement parent, JavaModelManager manager,
        MemberValuePair memberValuePair, Object binaryValue) {
    if (binaryValue instanceof Constant) {
        return getAnnotationMemberValue(memberValuePair, (Constant) binaryValue);
    } else if (binaryValue instanceof IBinaryAnnotation) {
        memberValuePair.valueKind = IMemberValuePair.K_ANNOTATION;
        return getAnnotation(parent, manager, (IBinaryAnnotation) binaryValue, memberValuePair.getMemberName());
    } else if (binaryValue instanceof ClassSignature) {
        memberValuePair.valueKind = IMemberValuePair.K_CLASS;
        char[] className = Signature.toCharArray(
                CharOperation.replaceOnCopy(((ClassSignature) binaryValue).getTypeName(), '/', '.'));
        return new String(className);
    } else if (binaryValue instanceof EnumConstantSignature) {
        memberValuePair.valueKind = IMemberValuePair.K_QUALIFIED_NAME;
        EnumConstantSignature enumConstant = (EnumConstantSignature) binaryValue;
        char[] enumName = Signature
                .toCharArray(CharOperation.replaceOnCopy(enumConstant.getTypeName(), '/', '.'));
        char[] qualifiedName = CharOperation.concat(enumName, enumConstant.getEnumConstantName(), '.');
        return new String(qualifiedName);
    } else if (binaryValue instanceof Object[]) {
        memberValuePair.valueKind = -1; // modified below by the first call to getMemberValue(...)
        Object[] binaryValues = (Object[]) binaryValue;
        int length = binaryValues.length;
        Object[] values = new Object[length];
        for (int i = 0; i < length; i++) {
            int previousValueKind = memberValuePair.valueKind;
            Object value = getAnnotationMemberValue(parent, manager, memberValuePair, binaryValues[i]);
            if (previousValueKind != -1 && memberValuePair.valueKind != previousValueKind) {
                // values are heterogeneous, value kind is thus unknown
                memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
            }//from   ww w.ja  v a 2s .co m
            if (value instanceof Annotation) {
                Annotation annotation = (Annotation) value;
                for (int j = 0; j < i; j++) {
                    if (annotation.equals(values[j])) {
                        annotation.occurrenceCount++;
                    }
                }
            }
            values[i] = value;
        }
        if (memberValuePair.valueKind == -1)
            memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return values;
    } else {
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.util.Util.java

License:Open Source License

public static Object getAnnotationMemberValue(MemberValuePair memberValuePair, Constant constant) {
    if (constant == null) {
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }/*from  w  w w .j  a  va  2 s. c o m*/
    switch (constant.typeID()) {
    case TypeIds.T_int:
        memberValuePair.valueKind = IMemberValuePair.K_INT;
        return new Integer(constant.intValue());
    case TypeIds.T_byte:
        memberValuePair.valueKind = IMemberValuePair.K_BYTE;
        return new Byte(constant.byteValue());
    case TypeIds.T_short:
        memberValuePair.valueKind = IMemberValuePair.K_SHORT;
        return new Short(constant.shortValue());
    case TypeIds.T_char:
        memberValuePair.valueKind = IMemberValuePair.K_CHAR;
        return new Character(constant.charValue());
    case TypeIds.T_float:
        memberValuePair.valueKind = IMemberValuePair.K_FLOAT;
        return new Float(constant.floatValue());
    case TypeIds.T_double:
        memberValuePair.valueKind = IMemberValuePair.K_DOUBLE;
        return new Double(constant.doubleValue());
    case TypeIds.T_boolean:
        memberValuePair.valueKind = IMemberValuePair.K_BOOLEAN;
        return Boolean.valueOf(constant.booleanValue());
    case TypeIds.T_long:
        memberValuePair.valueKind = IMemberValuePair.K_LONG;
        return new Long(constant.longValue());
    case TypeIds.T_JavaLangString:
        memberValuePair.valueKind = IMemberValuePair.K_STRING;
        return constant.stringValue();
    default:
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }
}

From source file:com.codenvy.ide.ext.java.server.internal.core.util.Util.java

License:Open Source License

public static Object getNegativeAnnotationMemberValue(MemberValuePair memberValuePair, Constant constant) {
    if (constant == null) {
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }/*  w w w  .j  a  v  a2  s . c  om*/
    switch (constant.typeID()) {
    case TypeIds.T_int:
        memberValuePair.valueKind = IMemberValuePair.K_INT;
        return new Integer(constant.intValue() * -1);
    case TypeIds.T_float:
        memberValuePair.valueKind = IMemberValuePair.K_FLOAT;
        return new Float(constant.floatValue() * -1.0f);
    case TypeIds.T_double:
        memberValuePair.valueKind = IMemberValuePair.K_DOUBLE;
        return new Double(constant.doubleValue() * -1.0);
    case TypeIds.T_long:
        memberValuePair.valueKind = IMemberValuePair.K_LONG;
        return new Long(constant.longValue() * -1L);
    default:
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }
}

From source file:org.eclipse.che.jdt.internal.core.CompilationUnitStructureRequestor.java

License:Open Source License

protected Object getMemberValue(org.eclipse.che.jdt.internal.core.MemberValuePair memberValuePair,
        Expression expression) {/*from   w ww  .java2  s  .  com*/
    if (expression instanceof NullLiteral) {
        return null;
    } else if (expression instanceof Literal) {
        ((Literal) expression).computeConstant();
        return Util.getAnnotationMemberValue(memberValuePair, expression.constant);
    } else if (expression instanceof org.eclipse.jdt.internal.compiler.ast.Annotation) {
        org.eclipse.jdt.internal.compiler.ast.Annotation annotation = (org.eclipse.jdt.internal.compiler.ast.Annotation) expression;
        Object handle = acceptAnnotation(annotation, null, (JavaElement) this.handleStack.peek());
        memberValuePair.valueKind = IMemberValuePair.K_ANNOTATION;
        return handle;
    } else if (expression instanceof ClassLiteralAccess) {
        ClassLiteralAccess classLiteral = (ClassLiteralAccess) expression;
        char[] name = CharOperation.concatWith(classLiteral.type.getTypeName(), '.');
        memberValuePair.valueKind = IMemberValuePair.K_CLASS;
        return new String(name);
    } else if (expression instanceof QualifiedNameReference) {
        char[] qualifiedName = CharOperation.concatWith(((QualifiedNameReference) expression).tokens, '.');
        memberValuePair.valueKind = IMemberValuePair.K_QUALIFIED_NAME;
        return new String(qualifiedName);
    } else if (expression instanceof SingleNameReference) {
        char[] simpleName = ((SingleNameReference) expression).token;
        if (simpleName == RecoveryScanner.FAKE_IDENTIFIER) {
            memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
            return null;
        }
        memberValuePair.valueKind = IMemberValuePair.K_SIMPLE_NAME;
        return new String(simpleName);
    } else if (expression instanceof ArrayInitializer) {
        memberValuePair.valueKind = -1; // modified below by the first call to getMemberValue(...)
        Expression[] expressions = ((ArrayInitializer) expression).expressions;
        int length = expressions == null ? 0 : expressions.length;
        Object[] values = new Object[length];
        for (int i = 0; i < length; i++) {
            int previousValueKind = memberValuePair.valueKind;
            Object value = getMemberValue(memberValuePair, expressions[i]);
            if (previousValueKind != -1 && memberValuePair.valueKind != previousValueKind) {
                // values are heterogeneous, value kind is thus unknown
                memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
            }
            values[i] = value;
        }
        if (memberValuePair.valueKind == -1)
            memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return values;
    } else if (expression instanceof UnaryExpression) { // to deal with negative numerals (see bug - 248312)
        UnaryExpression unaryExpression = (UnaryExpression) expression;
        if ((unaryExpression.bits & ASTNode.OperatorMASK) >> ASTNode.OperatorSHIFT == OperatorIds.MINUS) {
            if (unaryExpression.expression instanceof Literal) {
                Literal subExpression = (Literal) unaryExpression.expression;
                subExpression.computeConstant();
                return Util.getNegativeAnnotationMemberValue(memberValuePair, subExpression.constant);
            }
        }
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    } else {
        memberValuePair.valueKind = IMemberValuePair.K_UNKNOWN;
        return null;
    }
}

From source file:org.eclipse.modisco.java.discoverer.internal.io.library.ClassFileParser.java

License:Open Source License

private Expression manageMemberValuePair(final IMemberValuePair defaultValue) {

    Expression result = null;//from   ww  w  . j av  a 2 s.c  o  m

    switch (defaultValue.getValueKind()) {
    case IMemberValuePair.K_CLASS:
        result = manageValuePairClassKind(defaultValue);
        break;

    case IMemberValuePair.K_ANNOTATION:
        result = manageValuePairAnnotationKind(defaultValue);
        break;

    case IMemberValuePair.K_QUALIFIED_NAME:
        result = manageValuePairQualifiedNameKind(defaultValue);
        break;

    case IMemberValuePair.K_BOOLEAN:
        if (defaultValue.getValue().getClass().isArray()) {
            Object[] tab = (Object[]) defaultValue.getValue();
            ArrayInitializer array = getFactory().createArrayInitializer();
            initializeNode(array);
            for (Object element : tab) {
                BooleanLiteral bool = getFactory().createBooleanLiteral();
                bool.setValue(((Boolean) element).booleanValue());
                array.getExpressions().add(bool);
            }
            result = array;
        } else {
            BooleanLiteral bool = getFactory().createBooleanLiteral();
            bool.setValue(((Boolean) defaultValue.getValue()).booleanValue());
            result = bool;
        }
        break;

    case IMemberValuePair.K_CHAR:
        if (defaultValue.getValue().getClass().isArray()) {
            Object[] tab = (Object[]) defaultValue.getValue();
            ArrayInitializer array = getFactory().createArrayInitializer();
            initializeNode(array);
            for (Object element : tab) {
                CharacterLiteral ch = getFactory().createCharacterLiteral();
                char value = ((Character) element).charValue();
                ch.setEscapedValue(ClassFileParserUtils.escapeCharacter(value));
                array.getExpressions().add(ch);
            }
            result = array;
        } else {
            CharacterLiteral ch = getFactory().createCharacterLiteral();
            char value = ((Character) defaultValue.getValue()).charValue();
            ch.setEscapedValue(ClassFileParserUtils.escapeCharacter(value));
            result = ch;
        }
        break;

    case IMemberValuePair.K_DOUBLE:
    case IMemberValuePair.K_BYTE:
    case IMemberValuePair.K_FLOAT:
    case IMemberValuePair.K_INT:
    case IMemberValuePair.K_LONG:
        if (defaultValue.getValue().getClass().isArray()) {
            Object[] tab = (Object[]) defaultValue.getValue();
            ArrayInitializer array = getFactory().createArrayInitializer();
            initializeNode(array);
            for (Object element : tab) {
                NumberLiteral number = getFactory().createNumberLiteral();
                number.setTokenValue(element.toString());
                array.getExpressions().add(number);
            }
            result = array;
        } else {
            NumberLiteral number = getFactory().createNumberLiteral();
            number.setTokenValue(defaultValue.getValue().toString());
            result = number;
        }
        break;

    case IMemberValuePair.K_STRING:
        if (defaultValue.getValue().getClass().isArray()) {
            Object[] tab = (Object[]) defaultValue.getValue();
            ArrayInitializer array = getFactory().createArrayInitializer();
            initializeNode(array);
            for (Object element : tab) {
                StringLiteral string = getFactory().createStringLiteral();
                String value = String.valueOf(element);
                string.setEscapedValue(ClassFileParserUtils.escapeString(value));
                array.getExpressions().add(string);
            }
            result = array;
        } else {
            StringLiteral string = getFactory().createStringLiteral();
            String value = String.valueOf(defaultValue.getValue());
            string.setEscapedValue(ClassFileParserUtils.escapeString(value));
            result = string;
        }
        break;

    case IMemberValuePair.K_SIMPLE_NAME: // there should be no K_SIMPLE_NAME
        // in .class files
    case IMemberValuePair.K_UNKNOWN:
    default:
        if (defaultValue.getValue().getClass().isArray()) {
            Object[] tab = (Object[]) defaultValue.getValue();
            ArrayInitializer array = getFactory().createArrayInitializer();
            initializeNode(array);
            for (Object element : tab) {
                UnresolvedItemAccess unrAcc = getFactory().createUnresolvedItemAccess();
                UnresolvedItem item = getFactory().createUnresolvedItem();
                unrAcc.setElement(item);
                item.setName(String.valueOf(element));
                array.getExpressions().add(unrAcc);
            }
            result = array;
        } else {
            UnresolvedItemAccess unrAcc = getFactory().createUnresolvedItemAccess();
            UnresolvedItem item = getFactory().createUnresolvedItem();
            unrAcc.setElement(item);
            item.setName(String.valueOf(defaultValue.getValue()));
            result = unrAcc;
        }
        break;
    }
    return result;
}

From source file:org.eclipse.objectteams.otdt.tests.AbstractJavaModelTests.java

License:Open Source License

private void appendAnnotationMember(StringBuffer buffer, IMemberValuePair member) throws JavaModelException {
    if (member == null) {
        buffer.append("<null>");
        return;/*from  w w  w .j  av  a  2 s. c  om*/
    }
    String name = member.getMemberName();
    if (!"value".equals(name)) {
        buffer.append(name);
        buffer.append('=');
    }
    int kind = member.getValueKind();
    Object value = member.getValue();
    if (value instanceof Object[]) {
        if (kind == IMemberValuePair.K_UNKNOWN)
            buffer.append("[unknown]");
        buffer.append('{');
        Object[] array = (Object[]) value;
        for (int i = 0, length = array.length; i < length; i++) {
            appendAnnotationMemberValue(buffer, array[i], kind);
            if (i < length - 1)
                buffer.append(", ");
        }
        buffer.append('}');
    } else {
        appendAnnotationMemberValue(buffer, value, kind);
    }
}

From source file:org.eclipse.objectteams.otdt.tests.AbstractJavaModelTests.java

License:Open Source License

private void appendAnnotationMemberValue(StringBuffer buffer, Object value, int kind)
        throws JavaModelException {
    if (value == null) {
        buffer.append("<null>");
        return;/*  www  . ja  va2s  .  c o m*/
    }
    switch (kind) {
    case IMemberValuePair.K_INT:
        buffer.append("(int)");
        buffer.append(value);
        break;
    case IMemberValuePair.K_BYTE:
        buffer.append("(byte)");
        buffer.append(value);
        break;
    case IMemberValuePair.K_SHORT:
        buffer.append("(short)");
        buffer.append(value);
        break;
    case IMemberValuePair.K_CHAR:
        buffer.append('\'');
        buffer.append(value);
        buffer.append('\'');
        break;
    case IMemberValuePair.K_FLOAT:
        buffer.append(value);
        buffer.append('f');
        break;
    case IMemberValuePair.K_DOUBLE:
        buffer.append("(double)");
        buffer.append(value);
        break;
    case IMemberValuePair.K_BOOLEAN:
        buffer.append(value);
        break;
    case IMemberValuePair.K_LONG:
        buffer.append(value);
        buffer.append('L');
        break;
    case IMemberValuePair.K_STRING:
        buffer.append('\"');
        buffer.append(value);
        buffer.append('\"');
        break;
    case IMemberValuePair.K_ANNOTATION:
        appendAnnotation(buffer, (IAnnotation) value);
        break;
    case IMemberValuePair.K_CLASS:
        buffer.append(value);
        buffer.append(".class");
        break;
    case IMemberValuePair.K_QUALIFIED_NAME:
        buffer.append(value);
        break;
    case IMemberValuePair.K_SIMPLE_NAME:
        buffer.append(value);
        break;
    case IMemberValuePair.K_UNKNOWN:
        appendAnnotationMemberValue(buffer, value, getValueKind(value));
        break;
    default:
        buffer.append(
                "<Unknown value: (" + (value == null ? "" : value.getClass().getName()) + ") " + value + ">");
        break;
    }
}

From source file:org.jboss.tools.cdi.deltaspike.core.DeltaspikeExceptionExtension.java

License:Open Source License

/**
 * Returns new annotation object with Produces type if definition is annotated with Unwraps
 * and Produces type is available in class path. Returns null otherwise.
 * //w ww .ja  v  a 2 s  .c  o m
 * @param def
 * @param context
 * @return new annotation object with Produces type or null
 */
IJavaAnnotation createFakeObservesAnnotation(AbstractMemberDefinition def, IRootDefinitionContext context) {
    IJavaAnnotation result = null;
    IAnnotationDeclaration a = def.getAnnotation(HANDLES_ANNOTATION_TYPE_NAME);
    if (a == null)
        a = def.getAnnotation(BEFORE_HANDLES_ANNOTATION_TYPE_NAME);
    if (a != null) {
        IType producesAnnotation = context.getProject().getType(CDIConstants.OBSERVERS_ANNOTATION_TYPE_NAME);
        if (producesAnnotation != null) {
            AnnotationLiteral literal = new AnnotationLiteral(def.getResource(), a.getStartPosition(),
                    a.getLength(), null, IMemberValuePair.K_UNKNOWN, producesAnnotation);
            literal.setParentElement((IJavaElement) def.getMember());
            result = literal;
        }
    }
    return result;
}