Example usage for org.eclipse.jdt.core.dom ITypeBinding isPrimitive

List of usage examples for org.eclipse.jdt.core.dom ITypeBinding isPrimitive

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.dom ITypeBinding isPrimitive.

Prototype

public boolean isPrimitive();

Source Link

Document

Returns whether this type binding represents a primitive type.

Usage

From source file:astview.Binding.java

License:Open Source License

@Override
public Object[] getChildren() {
    try {//w ww .ja  v a 2  s.com
        if (fBinding != null) {
            fBinding.getKey();
        }
    } catch (RuntimeException e) {
        return new Object[] { new Error(this, "BrokenBinding: " + fBinding, null) };
    }
    if (fBinding != null) {
        ArrayList<ASTAttribute> res = new ArrayList<>();
        res.add(new BindingProperty(this, "NAME", fBinding.getName(), true)); //$NON-NLS-1$
        res.add(new BindingProperty(this, "KEY", fBinding.getKey(), true)); //$NON-NLS-1$
        res.add(new BindingProperty(this, "IS RECOVERED", fBinding.isRecovered(), true)); //$NON-NLS-1$
        switch (fBinding.getKind()) {
        case IBinding.VARIABLE:
            IVariableBinding variableBinding = (IVariableBinding) fBinding;
            res.add(new BindingProperty(this, "IS FIELD", variableBinding.isField(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS ENUM CONSTANT", variableBinding.isEnumConstant(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS PARAMETER", variableBinding.isParameter(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "VARIABLE ID", variableBinding.getVariableId(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "MODIFIERS", getModifiersString(fBinding.getModifiers(), false), //$NON-NLS-1$
                    true));
            res.add(new Binding(this, "TYPE", variableBinding.getType(), true)); //$NON-NLS-1$
            res.add(new Binding(this, "DECLARING CLASS", variableBinding.getDeclaringClass(), true)); //$NON-NLS-1$
            res.add(new Binding(this, "DECLARING METHOD", variableBinding.getDeclaringMethod(), true)); //$NON-NLS-1$
            res.add(new Binding(this, "VARIABLE DECLARATION", variableBinding.getVariableDeclaration(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "CONSTANT VALUE", variableBinding.getConstantValue(), true)); //$NON-NLS-1$ //$NON-NLS-2$
            res.add(new BindingProperty(this, "IS EFFECTIVELY FINAL", variableBinding.isEffectivelyFinal(), //$NON-NLS-1$
                    true));
            break;

        case IBinding.PACKAGE:
            IPackageBinding packageBinding = (IPackageBinding) fBinding;
            res.add(new BindingProperty(this, "IS UNNAMED", packageBinding.isUnnamed(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$
            break;

        case IBinding.TYPE:
            ITypeBinding typeBinding = (ITypeBinding) fBinding;
            res.add(new BindingProperty(this, "QUALIFIED NAME", typeBinding.getQualifiedName(), true)); //$NON-NLS-1$

            int typeKind = getTypeKind(typeBinding);
            boolean isRefType = isType(typeKind, REF_TYPE);
            final boolean isNonPrimitive = !isType(typeKind, PRIMITIVE_TYPE);

            StringBuffer kinds = new StringBuffer("KIND:"); //$NON-NLS-1$
            if (typeBinding.isArray())
                kinds.append(" isArray"); //$NON-NLS-1$
            if (typeBinding.isCapture())
                kinds.append(" isCapture"); //$NON-NLS-1$
            if (typeBinding.isNullType())
                kinds.append(" isNullType"); //$NON-NLS-1$
            if (typeBinding.isPrimitive())
                kinds.append(" isPrimitive"); //$NON-NLS-1$
            if (typeBinding.isTypeVariable())
                kinds.append(" isTypeVariable"); //$NON-NLS-1$
            if (typeBinding.isWildcardType())
                kinds.append(" isWildcardType"); //$NON-NLS-1$
            // ref types
            if (typeBinding.isAnnotation())
                kinds.append(" isAnnotation"); //$NON-NLS-1$
            if (typeBinding.isClass())
                kinds.append(" isClass"); //$NON-NLS-1$
            if (typeBinding.isInterface())
                kinds.append(" isInterface"); //$NON-NLS-1$
            if (typeBinding.isEnum())
                kinds.append(" isEnum"); //$NON-NLS-1$
            res.add(new BindingProperty(this, kinds, true)); //$NON-NLS-1$

            StringBuffer generics = new StringBuffer("GENERICS:"); //$NON-NLS-1$
            if (typeBinding.isRawType())
                generics.append(" isRawType"); //$NON-NLS-1$
            if (typeBinding.isGenericType())
                generics.append(" isGenericType"); //$NON-NLS-1$
            if (typeBinding.isParameterizedType())
                generics.append(" isParameterizedType"); //$NON-NLS-1$
            if (!isType(typeKind, GENERIC | PARAMETRIZED)) {
                generics.append(" (non-generic, non-parameterized)");
            }
            res.add(new BindingProperty(this, generics, isRefType)); //$NON-NLS-1$

            res.add(new Binding(this, "ELEMENT TYPE", typeBinding.getElementType(), //$NON-NLS-1$
                    isType(typeKind, ARRAY_TYPE)));
            res.add(new Binding(this, "COMPONENT TYPE", typeBinding.getComponentType(), //$NON-NLS-1$
                    isType(typeKind, ARRAY_TYPE)));
            res.add(new BindingProperty(this, "DIMENSIONS", typeBinding.getDimensions(), //$NON-NLS-1$
                    isType(typeKind, ARRAY_TYPE)));
            final String createArrayTypeLabel = "CREATE ARRAY TYPE (+1)";
            try {
                ITypeBinding arrayType = typeBinding.createArrayType(1);
                res.add(new Binding(this, createArrayTypeLabel, arrayType, true));
            } catch (RuntimeException e) {
                String msg = e.getClass().getName() + ": " + e.getLocalizedMessage();
                boolean isRelevant = !typeBinding.getName().equals(PrimitiveType.VOID.toString())
                        && !typeBinding.isRecovered();
                if (isRelevant) {
                    res.add(new Error(this, createArrayTypeLabel + ": " + msg, e));
                } else {
                    res.add(new BindingProperty(this, createArrayTypeLabel, msg, false));
                }
            }

            StringBuffer origin = new StringBuffer("ORIGIN:"); //$NON-NLS-1$
            if (typeBinding.isTopLevel())
                origin.append(" isTopLevel"); //$NON-NLS-1$
            if (typeBinding.isNested())
                origin.append(" isNested"); //$NON-NLS-1$
            if (typeBinding.isLocal())
                origin.append(" isLocal"); //$NON-NLS-1$
            if (typeBinding.isMember())
                origin.append(" isMember"); //$NON-NLS-1$
            if (typeBinding.isAnonymous())
                origin.append(" isAnonymous"); //$NON-NLS-1$
            res.add(new BindingProperty(this, origin, isRefType));

            res.add(new BindingProperty(this, "IS FROM SOURCE", typeBinding.isFromSource(), //$NON-NLS-1$
                    isType(typeKind, REF_TYPE | VARIABLE_TYPE | CAPTURE_TYPE)));

            res.add(new Binding(this, "PACKAGE", typeBinding.getPackage(), isRefType)); //$NON-NLS-1$
            res.add(new Binding(this, "DECLARING CLASS", typeBinding.getDeclaringClass(), //$NON-NLS-1$
                    isType(typeKind, REF_TYPE | VARIABLE_TYPE | CAPTURE_TYPE)));
            res.add(new Binding(this, "DECLARING METHOD", typeBinding.getDeclaringMethod(), //$NON-NLS-1$
                    isType(typeKind, REF_TYPE | VARIABLE_TYPE | CAPTURE_TYPE)));
            //               res.add(new Binding(this, "DECLARING MEMBER", typeBinding.getDeclaringMember(), typeBinding.isLocal())); //$NON-NLS-1$
            res.add(new BindingProperty(this, "MODIFIERS", getModifiersString(fBinding.getModifiers(), false), //$NON-NLS-1$
                    isRefType));
            res.add(new BindingProperty(this, "BINARY NAME", typeBinding.getBinaryName(), true)); //$NON-NLS-1$

            String isTypeDeclaration = typeBinding == typeBinding.getTypeDeclaration() ? " ( == this)"
                    : " ( != this)";
            res.add(new Binding(this, "TYPE DECLARATION" + isTypeDeclaration, typeBinding.getTypeDeclaration(), //$NON-NLS-1$
                    true));
            String isErasure = typeBinding == typeBinding.getErasure() ? " ( == this)" : " ( != this)";
            res.add(new Binding(this, "ERASURE" + isErasure, typeBinding.getErasure(), isNonPrimitive)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "TYPE PARAMETERS", typeBinding.getTypeParameters(), //$NON-NLS-1$
                    isType(typeKind, GENERIC)));
            res.add(new BindingProperty(this, "TYPE ARGUMENTS", typeBinding.getTypeArguments(), //$NON-NLS-1$
                    isType(typeKind, PARAMETRIZED)));
            res.add(new BindingProperty(this, "TYPE BOUNDS", typeBinding.getTypeBounds(), //$NON-NLS-1$
                    isType(typeKind, VARIABLE_TYPE | WILDCARD_TYPE | CAPTURE_TYPE)));
            res.add(new Binding(this, "BOUND", typeBinding.getBound(), isType(typeKind, WILDCARD_TYPE))); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS UPPERBOUND", typeBinding.isUpperbound(), //$NON-NLS-1$
                    isType(typeKind, WILDCARD_TYPE)));
            res.add(new Binding(this, "GENERIC TYPE OF WILDCARD TYPE", //$NON-NLS-1$
                    typeBinding.getGenericTypeOfWildcardType(), isType(typeKind, WILDCARD_TYPE)));
            res.add(new BindingProperty(this, "RANK", typeBinding.getRank(), isType(typeKind, WILDCARD_TYPE))); //$NON-NLS-1$
            res.add(new Binding(this, "WILDCARD", typeBinding.getWildcard(), isType(typeKind, CAPTURE_TYPE))); //$NON-NLS-1$

            res.add(new Binding(this, "SUPERCLASS", typeBinding.getSuperclass(), isRefType)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "INTERFACES", typeBinding.getInterfaces(), isRefType)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "DECLARED TYPES", typeBinding.getDeclaredTypes(), isRefType)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "DECLARED FIELDS", typeBinding.getDeclaredFields(), isRefType)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "DECLARED METHODS", typeBinding.getDeclaredMethods(), isRefType)); //$NON-NLS-1$
            res.add(new Binding(this, "FUNCTIONAL INTERFACE METHOD", typeBinding.getFunctionalInterfaceMethod(), //$NON-NLS-1$
                    typeBinding.isInterface()));
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), isNonPrimitive)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), isRefType)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "TYPE ANNOTATIONS", typeBinding.getTypeAnnotations(), true)); //$NON-NLS-1$
            break;

        case IBinding.METHOD:
            IMethodBinding methodBinding = (IMethodBinding) fBinding;
            res.add(new BindingProperty(this, "IS CONSTRUCTOR", methodBinding.isConstructor(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEFAULT CONSTRUCTOR", methodBinding.isDefaultConstructor(), //$NON-NLS-1$
                    true));
            res.add(new Binding(this, "DECLARING CLASS", methodBinding.getDeclaringClass(), true)); //$NON-NLS-1$
            //               res.add(new Binding(this, "DECLARING MEMBER", methodBinding.getDeclaringMember(), methodBinding.getDeclaringMember() != null)); //$NON-NLS-1$
            res.add(new Binding(this, "RETURN TYPE", methodBinding.getReturnType(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "MODIFIERS", getModifiersString(fBinding.getModifiers(), true), //$NON-NLS-1$
                    true));
            res.add(new BindingProperty(this, "PARAMETER TYPES", methodBinding.getParameterTypes(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS VARARGS", methodBinding.isVarargs(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "EXCEPTION TYPES", methodBinding.getExceptionTypes(), true)); //$NON-NLS-1$

            StringBuffer genericsM = new StringBuffer("GENERICS:"); //$NON-NLS-1$
            if (methodBinding.isRawMethod())
                genericsM.append(" isRawMethod"); //$NON-NLS-1$
            if (methodBinding.isGenericMethod())
                genericsM.append(" isGenericMethod"); //$NON-NLS-1$
            if (methodBinding.isParameterizedMethod())
                genericsM.append(" isParameterizedMethod"); //$NON-NLS-1$
            res.add(new BindingProperty(this, genericsM, true));

            String isMethodDeclaration = methodBinding == methodBinding.getMethodDeclaration() ? " ( == this)"
                    : " ( != this)";
            res.add(new Binding(this, "METHOD DECLARATION" + isMethodDeclaration, //$NON-NLS-1$
                    methodBinding.getMethodDeclaration(), true));
            res.add(new BindingProperty(this, "TYPE PARAMETERS", methodBinding.getTypeParameters(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "TYPE ARGUMENTS", methodBinding.getTypeArguments(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$

            res.add(new BindingProperty(this, "IS ANNOTATION MEMBER", methodBinding.isAnnotationMember(), //$NON-NLS-1$
                    true));
            res.add(Binding.createValueAttribute(this, "DEFAULT VALUE", methodBinding.getDefaultValue()));

            int parameterCount = methodBinding.getParameterTypes().length;
            BindingProperty[] parametersAnnotations = new BindingProperty[parameterCount];
            for (int i = 0; i < parameterCount; i++) {
                parametersAnnotations[i] = new BindingProperty(this, "Parameter " + String.valueOf(i),
                        methodBinding.getParameterAnnotations(i), true);
            }
            res.add(new BindingProperty(this, "PARAMETER ANNOTATIONS", parametersAnnotations, true));
            break;

        case IBinding.ANNOTATION:
            IAnnotationBinding annotationBinding = (IAnnotationBinding) fBinding;
            res.add(new Binding(this, "ANNOTATION TYPE", annotationBinding.getAnnotationType(), true));
            res.add(new BindingProperty(this, "DECLARED MEMBER VALUE PAIRS",
                    annotationBinding.getDeclaredMemberValuePairs(), true));
            res.add(new BindingProperty(this, "ALL MEMBER VALUE PAIRS",
                    annotationBinding.getAllMemberValuePairs(), true));
            break;

        case IBinding.MEMBER_VALUE_PAIR:
            IMemberValuePairBinding memberValuePairBinding = (IMemberValuePairBinding) fBinding;
            res.add(new Binding(this, "METHOD BINDING", memberValuePairBinding.getMethodBinding(), true));
            res.add(new BindingProperty(this, "IS DEFAULT", memberValuePairBinding.isDefault(), true));
            res.add(Binding.createValueAttribute(this, "VALUE", memberValuePairBinding.getValue()));
            break;
        }
        try {
            IAnnotationBinding[] annotations = fBinding.getAnnotations();
            res.add(new BindingProperty(this, "ANNOTATIONS", annotations, true)); //$NON-NLS-1$
        } catch (RuntimeException e) {
            String label = "Error in IBinding#getAnnotations() for \"" + fBinding.getKey() + "\"";
            res.add(new Error(this, label, e));
        }

        try {
            IJavaElement javaElement = fBinding.getJavaElement();
        } catch (RuntimeException e) {
            String label = ">java element: " + e.getClass().getName() + " for \"" + fBinding.getKey() + "\""; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
            res.add(new Error(this, label, e));
        }

        return res.toArray();
    }
    return EMPTY;
}

From source file:astview.Binding.java

License:Open Source License

private int getTypeKind(ITypeBinding typeBinding) {
    if (typeBinding.isArray())
        return ARRAY_TYPE;
    if (typeBinding.isCapture())
        return CAPTURE_TYPE;
    if (typeBinding.isNullType())
        return NULL_TYPE;
    if (typeBinding.isPrimitive())
        return PRIMITIVE_TYPE;
    if (typeBinding.isTypeVariable())
        return VARIABLE_TYPE;
    if (typeBinding.isWildcardType())
        return WILDCARD_TYPE;

    if (typeBinding.isGenericType())
        return REF_TYPE | GENERIC;
    if (typeBinding.isParameterizedType() || typeBinding.isRawType())
        return REF_TYPE | PARAMETRIZED;

    return REF_TYPE;
}

From source file:br.com.objectos.way.core.code.jdt.ITypeBindingWrapper.java

License:Apache License

public static ITypeBindingWrapper wrapperOf(ITypeBinding binding) {
    if (binding.isPrimitive()) {
        return new ITypeBindingWrapperPrimitive(binding);
    }/*from ww w.j  av  a  2s .co  m*/

    return new ITypeBindingWrapperSimple(binding);
}

From source file:ca.mcgill.cs.swevo.jayfx.ASTCrawler.java

License:Open Source License

/**
 * Converts a type binding into a parameter-style binding Please see JVM
 * Specification 4.3.2//  ww w  .j  a v  a2 s  .  co  m
 * {@link http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#84645}
 * .
 * 
 * @param pBinding
 *            The binding to convert. Cannot be null.
 * @return A class element representing this binding. Cannot be null.
 */
private static IElement convertParameterTypeBinding(final ITypeBinding pBinding) {
    ASTCrawler.checkForNull(pBinding);
    if (pBinding.getDimensions() == 0 && !pBinding.isPrimitive())
        return FlyweightElementFactory.getElement(Category.CLASS,
                Signature.C_RESOLVED + pBinding.getBinaryName() + Signature.C_SEMICOLON);
    else
        return FlyweightElementFactory.getElement(Category.CLASS, pBinding.getBinaryName());
}

From source file:ca.mcgill.cs.swevo.jayfx.ASTCrawler.java

License:Open Source License

@SuppressWarnings("unused")
private boolean isNonPrimitive(final ITypeBinding pBinding) {
    // As long as it's not of primitive type or primitive type array
    if (pBinding.isPrimitive())
        return false;
    else if (pBinding.isArray()) {
        final ITypeBinding lBinding = pBinding.getElementType();
        return !lBinding.isPrimitive();
    }/* ww  w  . j ava  2s  .c o m*/

    return true;
}

From source file:ca.mcgill.cs.swevo.ppa.inference.BinaryInferenceStrategy.java

License:Open Source License

private void processOperators(ASTNode node, TypeFact newFact) {
    InfixExpression infix = (InfixExpression) node;
    InfixExpression.Operator operator = infix.getOperator();

    //      if (node.toString().equals("falseTb == ShortBinding")) {
    //         System.out.println();
    //      }// w  w w .ja  va 2  s .  co m

    Expression left = infix.getLeftOperand();
    Expression right = infix.getRightOperand();
    boolean isSecondaryIndex = newFact != null && isSecondary(node, newFact);
    boolean isPrimaryIndex = newFact != null && !isSecondaryIndex;

    boolean leftSafe = !PPABindingsUtil.isUnknownType(left.resolveTypeBinding())
            && (indexer.isSafe(left) || (isSecondaryIndex && isLeftIndex(node, newFact)));
    boolean rightSafe = !PPABindingsUtil.isUnknownType(right.resolveTypeBinding())
            && (indexer.isSafe(right) || (isSecondaryIndex && !isLeftIndex(node, newFact)));
    boolean leftBoolean = isBoolean(left, leftSafe);
    boolean rightBoolean = isBoolean(right, rightSafe);
    ITypeBinding newType = null;
    ITypeBinding factType = newFact != null ? newFact.getNewType() : null;

    boolean isNewType = true;

    // && and ||
    if (operator == InfixExpression.Operator.CONDITIONAL_AND
            || operator == InfixExpression.Operator.CONDITIONAL_OR) {
        if (!leftSafe) {
            ITypeBinding newBinding = ppaEngine.getRegistry().getPrimitiveBinding("boolean", left);
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
        }

        if (!rightSafe) {
            ITypeBinding newBinding = ppaEngine.getRegistry().getPrimitiveBinding("boolean", right);
            ITypeBinding oldBinding = right.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
        }
    }

    // & and |
    else if (operator == InfixExpression.Operator.AND || operator == InfixExpression.Operator.CONDITIONAL_OR
            || operator == InfixExpression.Operator.XOR) {
        if (leftBoolean && !rightSafe) {
            ITypeBinding newBinding = ppaEngine.getRegistry().getPrimitiveBinding("boolean", right);
            ITypeBinding oldBinding = right.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        } else if (rightBoolean && !leftSafe) {
            ITypeBinding newBinding = ppaEngine.getRegistry().getPrimitiveBinding("boolean", left);
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        } else if (leftSafe && !rightSafe) {
            ITypeBinding newBinding = left.resolveTypeBinding();
            ITypeBinding oldBinding = right.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        } else if (rightSafe && !leftSafe) {
            ITypeBinding newBinding = right.resolveTypeBinding();
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        } else if (!rightSafe && !leftSafe && isPrimaryIndex) {
            ITypeBinding newBinding = factType;
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newBinding = factType;
            oldBinding = right.resolveTypeBinding();
            typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN, newBinding,
                    TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        }
    }
    // << >> >>>
    else if (operator == InfixExpression.Operator.LEFT_SHIFT
            || operator == InfixExpression.Operator.RIGHT_SHIFT_SIGNED
            || operator == InfixExpression.Operator.RIGHT_SHIFT_UNSIGNED) {
        if (!leftSafe) {
            ITypeBinding newBinding = ppaEngine.getRegistry().getPrimitiveBinding("int", left);
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
        }

        if (!rightSafe) {
            ITypeBinding newBinding = ppaEngine.getRegistry().getPrimitiveBinding("int", right);
            ITypeBinding oldBinding = right.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        }
    }
    // - / * % < <= > >=
    else if (operator == InfixExpression.Operator.MINUS || operator == InfixExpression.Operator.DIVIDE
            || operator == InfixExpression.Operator.REMAINDER || operator == InfixExpression.Operator.TIMES
            || operator == InfixExpression.Operator.LESS || operator == InfixExpression.Operator.LESS_EQUALS
            || operator == InfixExpression.Operator.GREATER
            || operator == InfixExpression.Operator.GREATER_EQUALS) {
        if (leftSafe && !rightSafe) {
            ITypeBinding newBinding = left.resolveTypeBinding();
            ITypeBinding oldBinding = right.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        } else if (rightSafe && !leftSafe) {
            ITypeBinding newBinding = right.resolveTypeBinding();
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        } else if (!rightSafe && !leftSafe && !isPrimaryIndex) {
            ITypeBinding newBinding = ppaEngine.getRegistry().getPrimitiveBinding("int", left);
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);

            newBinding = ppaEngine.getRegistry().getPrimitiveBinding("int", right);
            oldBinding = right.resolveTypeBinding();
            typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN, newBinding,
                    TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        } else if (!rightSafe && !leftSafe && isPrimaryIndex) {
            ITypeBinding newBinding = factType;
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);

            newBinding = factType;
            oldBinding = right.resolveTypeBinding();
            typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN, newBinding,
                    TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            newType = newBinding;
        }
    }
    // == !=
    else if (operator == InfixExpression.Operator.EQUALS || operator == InfixExpression.Operator.NOT_EQUALS) {
        if (leftSafe && !rightSafe) {
            ITypeBinding newBinding = left.resolveTypeBinding();
            ITypeBinding oldBinding = right.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
        } else if (rightSafe && !leftSafe) {
            ITypeBinding newBinding = right.resolveTypeBinding();
            ITypeBinding oldBinding = left.resolveTypeBinding();
            TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                    newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
            isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
        }
    }
    // +
    else if (operator == InfixExpression.Operator.PLUS) {
        if (isPrimaryIndex && !factType.isPrimitive()) {
            ITypeBinding newBinding = factType;
            if (!leftSafe) {

                ITypeBinding oldBinding = left.resolveTypeBinding();
                TypeFact typeFact = new TypeFact(indexer.getMainIndex(left), oldBinding, TypeFact.UNKNOWN,
                        newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
                isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            }
            if (!rightSafe) {
                newBinding = factType;
                ITypeBinding oldBinding = right.resolveTypeBinding();
                TypeFact typeFact = new TypeFact(indexer.getMainIndex(right), oldBinding, TypeFact.UNKNOWN,
                        newBinding, TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
                isNewType = isNewType && ppaEngine.reportTypeFact(typeFact);
            }
            newType = newBinding;
        }
    }

    if (newType != null && !isPrimaryIndex && isNewType) {
        ITypeBinding oldBinding = infix.resolveTypeBinding();
        TypeFact typeFact = new TypeFact(indexer.getMainIndex(node), oldBinding, TypeFact.UNKNOWN, newType,
                TypeFact.SUBTYPE, TypeFact.BINARY_STRATEGY);
        ppaEngine.reportTypeFact(typeFact);
        // report new type for this expression.
        // fix this expression.
    } else if (isPrimaryIndex) {
        if (newType != null && isNewType) {
            ppaEngine.getRegistry().fixBinary(node, newType);
        } else if (factType != null) {
            ppaEngine.getRegistry().fixBinary(node, factType);
        }
    }
}

From source file:ch.uzh.ifi.seal.permo.common.core.model.types.TypeFactory.java

License:Apache License

/**
 * Creates a new {@link Type} of the given {@link ITypeBinding}. Determines which concrete {@link Type} is required.
 * /*www. jav a  2  s . c o  m*/
 * @param typeBinding
 *          the {@link ITypeBinding} that serves as input {@link Type} to be created
 * @return the created {@link Type}
 */
public Type create(final ITypeBinding typeBinding) {
    if (typeBinding.isArray()) {
        return typeSerializer.deserialize(typeBinding.getQualifiedName());
    } else if (typeBinding.isTypeVariable()) {
        return GenericType.of(typeBinding.getName());
    } else if (typeBinding.isPrimitive()) {
        return PrimitiveType.of(typeBinding.getName());
    }
    return createReferenceType(typeBinding).get();
}

From source file:ch.uzh.ifi.seal.permo.common.core.model.types.TypeFactory.java

License:Apache License

/**
 * Creates a new {@link ReferenceType} of the given {@link ITypeBinding}.
 * /*from  www.j  a v a  2  s  .c  o m*/
 * @param typeBinding
 *          the {@link ITypeBinding} that serves as input {@link ReferenceType} to be created
 * @return
 */
public Optional<ReferenceType> createReferenceType(final ITypeBinding typeBinding) {
    return !typeBinding.isPrimitive()
            ? Optional.of(ReferenceType.of(typeBinding.getPackage().getName(), typeBinding.getName()))
            : Optional.empty();
}

From source file:changetypes.ASTVisitorAtomicChange.java

License:Open Source License

private static String getQualifiedName(ITypeBinding itb) {
    if (itb.isPrimitive()) {
        return itb.getName();
    }/* w ww  . j a va  2  s . co  m*/
    if (itb.isArray()) {
        try {
            StringBuilder suffix = new StringBuilder();
            for (int i = 0; i < itb.getDimensions(); i++) {
                suffix.append("[]");
            }
            return getQualifiedName(itb.getElementType()) + suffix.toString();
        } catch (NullPointerException localNullPointerException1) {
            return null;
        }
    }
    if (itb.isNullType()) {
        return "null";
    }
    if ((itb.isClass()) || (itb.isInterface())) {
        if (itb.isNested()) {
            String name = itb.getName();
            if (itb.isAnonymous()) {
                String binname = itb.getBinaryName();
                int index = binname.indexOf('$');
                name = binname.substring(index + 1, binname.length());
            }
            return getQualifiedName(itb.getDeclaringClass()) + "#" + name;
        }
        try {
            String pkg = itb.getPackage().getName();
            String name = itb.getName();

            name = removeParameters(itb.getName());
            return pkg + "%." + name;
        } catch (NullPointerException localNullPointerException2) {
            return null;
        }
    }
    return "java.lang%.Object";
}

From source file:cideplus.ui.astview.Binding.java

License:Open Source License

public Object[] getChildren() {
    if (fBinding != null) {
        ArrayList res = new ArrayList();
        res.add(new BindingProperty(this, "NAME", fBinding.getName(), true)); //$NON-NLS-1$
        res.add(new BindingProperty(this, "KEY", fBinding.getKey(), true)); //$NON-NLS-1$
        res.add(new BindingProperty(this, "IS RECOVERED", fBinding.isRecovered(), true)); //$NON-NLS-1$
        switch (fBinding.getKind()) {
        case IBinding.VARIABLE:
            IVariableBinding variableBinding = (IVariableBinding) fBinding;
            res.add(new BindingProperty(this, "IS FIELD", variableBinding.isField(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS ENUM CONSTANT", variableBinding.isEnumConstant(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS PARAMETER", variableBinding.isParameter(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "VARIABLE ID", variableBinding.getVariableId(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "MODIFIERS", Flags.toString(fBinding.getModifiers()), true)); //$NON-NLS-1$
            res.add(new Binding(this, "TYPE", variableBinding.getType(), true)); //$NON-NLS-1$
            res.add(new Binding(this, "DECLARING CLASS", variableBinding.getDeclaringClass(), true)); //$NON-NLS-1$
            res.add(new Binding(this, "DECLARING METHOD", variableBinding.getDeclaringMethod(), true)); //$NON-NLS-1$
            res.add(new Binding(this, "VARIABLE DECLARATION", variableBinding.getVariableDeclaration(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "CONSTANT VALUE", variableBinding.getConstantValue(), true)); //$NON-NLS-1$ //$NON-NLS-2$
            break;

        case IBinding.PACKAGE:
            IPackageBinding packageBinding = (IPackageBinding) fBinding;
            res.add(new BindingProperty(this, "IS UNNAMED", packageBinding.isUnnamed(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$
            break;

        case IBinding.TYPE:
            if (1 == 1) {
                break;//no iremos mostrar todas essas informaes da classe
            }// w  w  w . ja v  a 2  s  . co m
            ITypeBinding typeBinding = (ITypeBinding) fBinding;
            res.add(new BindingProperty(this, "QUALIFIED NAME", typeBinding.getQualifiedName(), true)); //$NON-NLS-1$

            int typeKind = getTypeKind(typeBinding);
            boolean isRefType = isType(typeKind, REF_TYPE);
            final boolean isNonPrimitive = !isType(typeKind, PRIMITIVE_TYPE);

            StringBuffer kinds = new StringBuffer("KIND:"); //$NON-NLS-1$
            if (typeBinding.isArray())
                kinds.append(" isArray"); //$NON-NLS-1$
            if (typeBinding.isCapture())
                kinds.append(" isCapture"); //$NON-NLS-1$
            if (typeBinding.isNullType())
                kinds.append(" isNullType"); //$NON-NLS-1$
            if (typeBinding.isPrimitive())
                kinds.append(" isPrimitive"); //$NON-NLS-1$
            if (typeBinding.isTypeVariable())
                kinds.append(" isTypeVariable"); //$NON-NLS-1$
            if (typeBinding.isWildcardType())
                kinds.append(" isWildcardType"); //$NON-NLS-1$
            // ref types
            if (typeBinding.isAnnotation())
                kinds.append(" isAnnotation"); //$NON-NLS-1$
            if (typeBinding.isClass())
                kinds.append(" isClass"); //$NON-NLS-1$
            if (typeBinding.isInterface())
                kinds.append(" isInterface"); //$NON-NLS-1$
            if (typeBinding.isEnum())
                kinds.append(" isEnum"); //$NON-NLS-1$
            res.add(new BindingProperty(this, kinds, true)); //$NON-NLS-1$

            StringBuffer generics = new StringBuffer("GENERICS:"); //$NON-NLS-1$
            if (typeBinding.isRawType())
                generics.append(" isRawType"); //$NON-NLS-1$
            if (typeBinding.isGenericType())
                generics.append(" isGenericType"); //$NON-NLS-1$
            if (typeBinding.isParameterizedType())
                generics.append(" isParameterizedType"); //$NON-NLS-1$
            if (!isType(typeKind, GENERIC | PARAMETRIZED)) {
                generics.append(" (non-generic, non-parameterized)");
            }
            res.add(new BindingProperty(this, generics, isRefType)); //$NON-NLS-1$

            res.add(new Binding(this, "ELEMENT TYPE", typeBinding.getElementType(), //$NON-NLS-1$
                    isType(typeKind, ARRAY_TYPE)));
            res.add(new Binding(this, "COMPONENT TYPE", typeBinding.getComponentType(), //$NON-NLS-1$
                    isType(typeKind, ARRAY_TYPE)));
            res.add(new BindingProperty(this, "DIMENSIONS", typeBinding.getDimensions(), //$NON-NLS-1$
                    isType(typeKind, ARRAY_TYPE)));
            final String createArrayTypeLabel = "CREATE ARRAY TYPE (+1)";
            try {
                ITypeBinding arrayType = typeBinding.createArrayType(1);
                res.add(new Binding(this, createArrayTypeLabel, arrayType, true));
            } catch (RuntimeException e) {
                String msg = e.getClass().getName() + ": " + e.getLocalizedMessage();
                boolean isRelevant = !typeBinding.getName().equals(PrimitiveType.VOID.toString())
                        && !typeBinding.isRecovered();
                if (isRelevant) {
                    res.add(new Error(this, createArrayTypeLabel + ": " + msg, e));
                } else {
                    res.add(new BindingProperty(this, createArrayTypeLabel, msg, false));
                }
            }

            res.add(new BindingProperty(this, "TYPE BOUNDS", typeBinding.getTypeBounds(), //$NON-NLS-1$
                    isType(typeKind, VARIABLE_TYPE | CAPTURE_TYPE)));

            StringBuffer origin = new StringBuffer("ORIGIN:"); //$NON-NLS-1$
            if (typeBinding.isTopLevel())
                origin.append(" isTopLevel"); //$NON-NLS-1$
            if (typeBinding.isNested())
                origin.append(" isNested"); //$NON-NLS-1$
            if (typeBinding.isLocal())
                origin.append(" isLocal"); //$NON-NLS-1$
            if (typeBinding.isMember())
                origin.append(" isMember"); //$NON-NLS-1$
            if (typeBinding.isAnonymous())
                origin.append(" isAnonymous"); //$NON-NLS-1$
            res.add(new BindingProperty(this, origin, isRefType));

            res.add(new BindingProperty(this, "IS FROM SOURCE", typeBinding.isFromSource(), //$NON-NLS-1$
                    isType(typeKind, REF_TYPE | VARIABLE_TYPE | CAPTURE_TYPE)));

            res.add(new Binding(this, "PACKAGE", typeBinding.getPackage(), isRefType)); //$NON-NLS-1$
            res.add(new Binding(this, "DECLARING CLASS", typeBinding.getDeclaringClass(), //$NON-NLS-1$
                    isType(typeKind, REF_TYPE | VARIABLE_TYPE | CAPTURE_TYPE)));
            res.add(new Binding(this, "DECLARING METHOD", typeBinding.getDeclaringMethod(), //$NON-NLS-1$
                    isType(typeKind, REF_TYPE | VARIABLE_TYPE | CAPTURE_TYPE)));
            res.add(new BindingProperty(this, "MODIFIERS", Flags.toString(fBinding.getModifiers()), isRefType)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "BINARY NAME", typeBinding.getBinaryName(), true)); //$NON-NLS-1$

            res.add(new Binding(this, "TYPE DECLARATION", typeBinding.getTypeDeclaration(), isNonPrimitive)); //$NON-NLS-1$
            res.add(new Binding(this, "ERASURE", typeBinding.getErasure(), isNonPrimitive)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "TYPE PARAMETERS", typeBinding.getTypeParameters(), //$NON-NLS-1$
                    isType(typeKind, GENERIC)));
            res.add(new BindingProperty(this, "TYPE ARGUMENTS", typeBinding.getTypeArguments(), //$NON-NLS-1$
                    isType(typeKind, PARAMETRIZED)));
            res.add(new Binding(this, "BOUND", typeBinding.getBound(), isType(typeKind, WILDCARD_TYPE))); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS UPPERBOUND", typeBinding.isUpperbound(), //$NON-NLS-1$
                    isType(typeKind, WILDCARD_TYPE)));
            res.add(new Binding(this, "GENERIC TYPE OF WILDCARD TYPE", //$NON-NLS-1$
                    typeBinding.getGenericTypeOfWildcardType(), isType(typeKind, WILDCARD_TYPE)));
            res.add(new BindingProperty(this, "RANK", typeBinding.getRank(), isType(typeKind, WILDCARD_TYPE))); //$NON-NLS-1$
            res.add(new Binding(this, "WILDCARD", typeBinding.getWildcard(), isType(typeKind, CAPTURE_TYPE))); //$NON-NLS-1$

            res.add(new Binding(this, "SUPERCLASS", typeBinding.getSuperclass(), isRefType)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "INTERFACES", typeBinding.getInterfaces(), isRefType)); //$NON-NLS-1$         
            res.add(new BindingProperty(this, "DECLARED TYPES", typeBinding.getDeclaredTypes(), isRefType)); //$NON-NLS-1$         
            res.add(new BindingProperty(this, "DECLARED FIELDS", typeBinding.getDeclaredFields(), isRefType)); //$NON-NLS-1$         
            res.add(new BindingProperty(this, "DECLARED METHODS", typeBinding.getDeclaredMethods(), isRefType)); //$NON-NLS-1$         
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), isNonPrimitive)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), isRefType)); //$NON-NLS-1$
            break;

        case IBinding.METHOD:
            IMethodBinding methodBinding = (IMethodBinding) fBinding;
            res.add(new BindingProperty(this, "IS CONSTRUCTOR", methodBinding.isConstructor(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEFAULT CONSTRUCTOR", methodBinding.isDefaultConstructor(), //$NON-NLS-1$
                    true));
            res.add(new Binding(this, "DECLARING CLASS", methodBinding.getDeclaringClass(), true)); //$NON-NLS-1$
            res.add(new Binding(this, "RETURN TYPE", methodBinding.getReturnType(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "MODIFIERS", Flags.toString(fBinding.getModifiers()), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "PARAMETER TYPES", methodBinding.getParameterTypes(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS VARARGS", methodBinding.isVarargs(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "EXCEPTION TYPES", methodBinding.getExceptionTypes(), true)); //$NON-NLS-1$

            StringBuffer genericsM = new StringBuffer("GENERICS:"); //$NON-NLS-1$
            if (methodBinding.isRawMethod())
                genericsM.append(" isRawMethod"); //$NON-NLS-1$
            if (methodBinding.isGenericMethod())
                genericsM.append(" isGenericMethod"); //$NON-NLS-1$
            if (methodBinding.isParameterizedMethod())
                genericsM.append(" isParameterizedMethod"); //$NON-NLS-1$
            res.add(new BindingProperty(this, genericsM, true));

            res.add(new Binding(this, "METHOD DECLARATION", methodBinding.getMethodDeclaration(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "TYPE PARAMETERS", methodBinding.getTypeParameters(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "TYPE ARGUMENTS", methodBinding.getTypeArguments(), true)); //$NON-NLS-1$         
            res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
            res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$

            res.add(new BindingProperty(this, "IS ANNOTATION MEMBER", methodBinding.isAnnotationMember(), //$NON-NLS-1$
                    true));
            res.add(Binding.createValueAttribute(this, "DEFAULT VALUE", methodBinding.getDefaultValue()));

            int parameterCount = methodBinding.getParameterTypes().length;
            GeneralAttribute[] parametersAnnotations = new GeneralAttribute[parameterCount];
            for (int i = 0; i < parameterCount; i++) {
                parametersAnnotations[i] = new GeneralAttribute(this, "Parameter " + String.valueOf(i),
                        methodBinding.getParameterAnnotations(i));
            }
            res.add(new GeneralAttribute(this, "PARAMETER ANNOTATIONS", parametersAnnotations));
            break;

        case IBinding.ANNOTATION:
            IAnnotationBinding annotationBinding = (IAnnotationBinding) fBinding;
            res.add(new Binding(this, "ANNOTATION TYPE", annotationBinding.getAnnotationType(), true));
            res.add(new BindingProperty(this, "DECLARED MEMBER VALUE PAIRS",
                    annotationBinding.getDeclaredMemberValuePairs(), true));
            res.add(new BindingProperty(this, "ALL MEMBER VALUE PAIRS",
                    annotationBinding.getAllMemberValuePairs(), true));
            break;

        case IBinding.MEMBER_VALUE_PAIR:
            IMemberValuePairBinding memberValuePairBinding = (IMemberValuePairBinding) fBinding;
            res.add(new Binding(this, "METHOD BINDING", memberValuePairBinding.getMethodBinding(), true));
            res.add(new BindingProperty(this, "IS DEFAULT", memberValuePairBinding.isDefault(), true));
            res.add(Binding.createValueAttribute(this, "VALUE", memberValuePairBinding.getValue()));
            break;
        }
        try {
            IAnnotationBinding[] annotations = fBinding.getAnnotations();
            res.add(new BindingProperty(this, "ANNOTATIONS", annotations, true)); //$NON-NLS-1$
        } catch (RuntimeException e) {
            String label = "Error in IBinding#getAnnotations() for \"" + fBinding.getKey() + "\"";
            res.add(new Error(this, label, e));
            ASTViewPlugin.log("Exception thrown in IBinding#getAnnotations() for \"" + fBinding.getKey() + "\"",
                    e);
        }
        try {
            IJavaElement javaElement = fBinding.getJavaElement();
            res.add(new JavaElement(this, javaElement));
        } catch (RuntimeException e) {
            String label = ">java element: " + e.getClass().getName() + " for \"" + fBinding.getKey() + "\""; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
            res.add(new Error(this, label, e));
            ASTViewPlugin.log("Exception thrown in IBinding#getJavaElement() for \"" + fBinding.getKey() + "\"",
                    e);
        }
        return res.toArray();
    }
    return EMPTY;
}