Example usage for org.eclipse.jdt.core.dom IVariableBinding getDeclaringClass

List of usage examples for org.eclipse.jdt.core.dom IVariableBinding getDeclaringClass

Introduction

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

Prototype

public ITypeBinding getDeclaringClass();

Source Link

Document

Returns the type binding representing the class or interface that declares this field.

Usage

From source file:astview.Binding.java

License:Open Source License

@Override
public Object[] getChildren() {
    try {/*from w w  w .  ja va  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

@Override
public String getLabel() {
    StringBuffer buf = new StringBuffer(fLabel);
    buf.append(": "); //$NON-NLS-1$
    if (fBinding != null) {
        switch (fBinding.getKind()) {
        case IBinding.VARIABLE:
            IVariableBinding variableBinding = (IVariableBinding) fBinding;
            if (!variableBinding.isField()) {
                buf.append(variableBinding.getName());
            } else {
                if (variableBinding.getDeclaringClass() == null) {
                    buf.append("<some array type>"); //$NON-NLS-1$
                } else {
                    buf.append(variableBinding.getDeclaringClass().getName());
                }//from  ww w . jav a2s  . c o  m
                buf.append('.');
                buf.append(variableBinding.getName());
            }
            break;
        case IBinding.PACKAGE:
            IPackageBinding packageBinding = (IPackageBinding) fBinding;
            buf.append(packageBinding.getName());
            break;
        case IBinding.TYPE:
            ITypeBinding typeBinding = (ITypeBinding) fBinding;
            appendAnnotatedQualifiedName(buf, typeBinding);
            break;
        case IBinding.METHOD:
            IMethodBinding methodBinding = (IMethodBinding) fBinding;
            buf.append(methodBinding.getDeclaringClass().getName());
            buf.append('.');
            buf.append(methodBinding.getName());
            buf.append('(');
            ITypeBinding[] parameters = methodBinding.getParameterTypes();
            for (int i = 0; i < parameters.length; i++) {
                if (i > 0) {
                    buf.append(", "); //$NON-NLS-1$
                }
                ITypeBinding parameter = parameters[i];
                buf.append(parameter.getName());
            }
            buf.append(')');
            break;
        case IBinding.ANNOTATION:
        case IBinding.MEMBER_VALUE_PAIR:
            buf.append(fBinding.toString());
            break;
        }

    } else {
        buf.append("null"); //$NON-NLS-1$
    }
    return buf.toString();

}

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

License:Open Source License

/**
 * Converts a variable binding to a field element.
 * /*from  www  .ja  v  a  2s. c  o m*/
 * @param pBinding
 *            The binding to convert. Cannot be null.
 * @return A field element representing this binding. Cannot be null.
 */
private static IElement convertBinding(final IVariableBinding pBinding) {
    ASTCrawler.checkForNull(pBinding);
    ITypeBinding declaringClass = pBinding.getDeclaringClass();

    if (declaringClass != null) { // it's a field.
        final String lFieldID = ASTCrawler.convertBinding(declaringClass).getId() + "." + pBinding.getName();
        return FlyweightElementFactory.getElement(Category.FIELD, lFieldID);
    } else // not a field.
        throw new IllegalArgumentException(pBinding.getName() + " is not a field.");
}

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

License:Open Source License

/**
 * Add an ACCESS relation and its transpose between aCurrentMethod and the
 * field described by pBinding. If any problem is detected the relation is
 * not added and the error is logged.//from   w ww  .  j a va2  s  . co  m
 * 
 * @param pBinding
 *            The field to add a relation to.
 * @pre aCurrMethod is not null
 * @pre aCurrMethod is in the database
 * @pre pBinding is not null
 */
private void addAccessRelation(final IVariableBinding pBinding) {
    // assert (pBinding != null);
    // assert (aDB.contains(aCurrMethod));
    // assert (aCurrMethod != null);

    if (pBinding.getDeclaringClass() == null)
        // This is most likely an access to the length
        // field of an array.
        return;
    final IElement lField = ASTCrawler.convertBinding(pBinding);
    this.aDB.addElement(lField, pBinding.getModifiers());
    this.aDB.addRelationAndTranspose(this.aCurrMethod, Relation.ACCESSES, lField);
}

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

License:Open Source License

private void addGetsRelation(final IVariableBinding pBinding) {
    // assert (pBinding != null);
    // assert (aDB.contains(aCurrMethod));
    // assert (aCurrMethod != null);

    if (pBinding.getDeclaringClass() == null)
        // This is most likely an access to the length
        // field of an array.
        return;//ww w.java 2 s . c  om
    final IElement lField = ASTCrawler.convertBinding(pBinding);
    this.aDB.addElement(lField, pBinding.getModifiers());
    this.aDB.addRelationAndTranspose(this.aCurrMethod, Relation.GETS, lField);
}

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

License:Open Source License

private void addSetsRelation(final IVariableBinding pBinding) {
    // assert (pBinding != null);
    // assert (aDB.contains(aCurrMethod));
    // assert (aCurrMethod != null);

    if (pBinding.getDeclaringClass() == null)
        // This is most likely an access to the length
        // field of an array.
        return;/* w ww. j av a  2 s . c om*/
    final IElement lField = ASTCrawler.convertBinding(pBinding);
    this.aDB.addElement(lField, pBinding.getModifiers());
    this.aDB.addRelationAndTranspose(this.aCurrMethod, Relation.SETS, lField);
}

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

License:Open Source License

public boolean isSafe(ASTNode node) {
    boolean isSafe = hasDeclaration(node);

    if (!isSafe) {
        SimpleName sName = (SimpleName) node;
        IVariableBinding varBinding = (IVariableBinding) sName.resolveBinding();
        ITypeBinding container = varBinding.getDeclaringClass();
        isSafe = container == null/* w w w  . j  a  va  2 s. c o  m*/
                || (!PPABindingsUtil.isMissingType(container) && !PPABindingsUtil.isUnknownType(container));
    }

    return isSafe;
}

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

License:Open Source License

public void makeSafe(ASTNode node, TypeFact typeFact) {
    SimpleName sName = (SimpleName) node;
    PPATypeRegistry typeRegistry = ppaEngine.getRegistry();
    PPADefaultBindingResolver resolver = getResolver(sName);

    // The field's type changed.
    if (typeFact.getIndex().equals(getMainIndex(node))) {
        IVariableBinding varBinding = (IVariableBinding) sName.resolveBinding();
        ITypeBinding newType = typeFact.getNewType();
        IVariableBinding newBinding = typeRegistry.getFieldBindingWithType(varBinding.getName(),
                varBinding.getDeclaringClass(), newType, resolver);

        resolver.fixFieldBinding(sName, newBinding);
    }//from www  .  j  a  va 2s  .  co  m
    // The field's container changed.
    //      else {
    //         
    //         //
    //
    //      }
}

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

License:Open Source License

public void makeSafeSecondary(ASTNode node, TypeFact typeFact) {
    SimpleName sName = (SimpleName) node;
    PPATypeRegistry typeRegistry = ppaEngine.getRegistry();
    PPADefaultBindingResolver resolver = getResolver(sName);
    ASTNode newContainerNode = PPAASTUtil.getFieldContainer(node, true, false);
    ITypeBinding newContainer = PPABindingsUtil.getTypeBinding(newContainerNode);

    if (newContainer == null) {
        return;//from  w  w  w.  ja v  a  2 s. com
    }

    IVariableBinding varBinding = (IVariableBinding) sName.resolveBinding();
    IVariableBinding newFieldBinding = null;

    if (PPABindingsUtil.isMissingType(newContainer)) {
        newFieldBinding = typeRegistry.getFieldBinding(varBinding.getName(), newContainer, varBinding.getType(),
                resolver);
    } else {
        // Maybe we can find the field declaration
        newFieldBinding = PPABindingsUtil.findFieldHierarchy(newContainer, sName.getFullyQualifiedName());
        if (newFieldBinding == null) {
            // We did not find the field in the container, try to find a suitable container (missing type)
            ITypeBinding tempContainer = PPABindingsUtil.getFirstMissingSuperType(newContainer);
            if (tempContainer != null) {
                newContainer = tempContainer;
                newFieldBinding = typeRegistry.getFieldBinding(varBinding.getName(), newContainer,
                        varBinding.getType(), resolver);
            } else {
                newFieldBinding = typeRegistry.getFieldBinding(varBinding.getName(), newContainer,
                        varBinding.getType(), resolver);
            }
        } else {
            // In case we found the field in a super type of the container.
            newContainer = newFieldBinding.getDeclaringClass();
        }
    }

    // Check field type
    ITypeBinding newFieldType = newFieldBinding.getType();
    ITypeBinding oldFieldType = varBinding.getType();
    if (!newFieldType.isEqualTo(oldFieldType)) {
        if (PPABindingsUtil.isSafer(newFieldType, oldFieldType)) {
            resolver.fixFieldBinding(sName, newFieldBinding);
            TypeFact tFact = new TypeFact(indexer.getMainIndex(sName), oldFieldType, TypeFact.UNKNOWN,
                    newFieldType, TypeFact.EQUALS, TypeFact.FIELD_STRATEGY);
            ppaEngine.reportTypeFact(tFact);

        } else if (!PPABindingsUtil.isMissingType(newContainer)) {
            resolver.fixFieldBinding(sName, newFieldBinding);
            // This is the case where we found the field declaration and the field is "less" safe than the previous type.
            // XXX The oldType = Unknown is to ensure that the new type will be pushed.
            TypeFact tFact = new TypeFact(indexer.getMainIndex(sName), typeRegistry.getUnknownBinding(resolver),
                    TypeFact.UNKNOWN, newFieldType, TypeFact.EQUALS, TypeFact.FIELD_STRATEGY);
            ppaEngine.reportTypeFact(tFact);
        } else {
            // This is an odd case: we found a ppa generated field, but the type we got before was safer.
            newFieldBinding = typeRegistry.getFieldBindingWithType(varBinding.getName(), newContainer,
                    varBinding.getType(), resolver);
            resolver.fixFieldBinding(sName, newFieldBinding);
        }
    } else {
        resolver.fixFieldBinding(sName, newFieldBinding);
    }

}

From source file:ca.mcgill.cs.swevo.ppa.ui.ASTUtil.java

License:Open Source License

private static void getFieldBindingHandle(IBinding binding, boolean augmented, StringBuffer handle) {
    IVariableBinding vBinding = (IVariableBinding) binding;
    handle.append(FIELD_KIND);/*  w  w w .  j a  v  a2 s . co m*/
    if (augmented) {
        handle.append(AUGMENTED_HANDLE_SEPARATOR);
        if (vBinding.isEnumConstant()) {
            handle.append(ENUM_VALUE_KIND);
        } else {
            handle.append(FIELD_KIND);
        }
    }
    handle.append(HANDLE_SEPARATOR);
    handle.append(getNonEmptyTypeString(getTypeString(vBinding.getDeclaringClass())));
    handle.append(HANDLE_SEPARATOR);
    handle.append(getNonEmptyTypeString(getTypeString(vBinding.getType())));
    handle.append(HANDLE_SEPARATOR);
    handle.append(getNonEmptyName(vBinding.getName()));
}