Example usage for org.eclipse.jdt.core.dom FieldAccess resolveConstantExpressionValue

List of usage examples for org.eclipse.jdt.core.dom FieldAccess resolveConstantExpressionValue

Introduction

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

Prototype

public final Object resolveConstantExpressionValue() 

Source Link

Document

Resolves and returns the compile-time constant expression value as specified in JLS2 15.28, if this expression has one.

Usage

From source file:net.sf.j2s.core.astvisitors.DependencyASTVisitor.java

License:Open Source License

public boolean visit(FieldAccess node) {
    Object constValue = node.resolveConstantExpressionValue();
    IVariableBinding resolveFieldBinding = node.resolveFieldBinding();
    Expression exp = node.getExpression();
    if (resolveFieldBinding != null && constValue == null
            && Modifier.isStatic(resolveFieldBinding.getModifiers())) {
        Expression expression = exp;
        if (expression instanceof Name) {
            Name name = (Name) expression;
            ITypeBinding resolveTypeBinding = name.resolveTypeBinding();
            ITypeBinding declaringClass = resolveTypeBinding.getDeclaringClass();
            QNTypeBinding qn = new QNTypeBinding();
            String qualifiedName = null;
            if (declaringClass != null) {
                ITypeBinding dclClass = null;
                while ((dclClass = declaringClass.getDeclaringClass()) != null) {
                    declaringClass = dclClass;
                }/*from w  w w  . j  a v  a2s. c o m*/
                qualifiedName = declaringClass.getQualifiedName();
                qn.binding = declaringClass;
            } else {
                qualifiedName = resolveTypeBinding.getQualifiedName();
                qn.binding = resolveTypeBinding;
            }
            qualifiedName = discardGenericType(qualifiedName);
            qn.qualifiedName = qualifiedName;
            if (isQualifiedNameOK(qualifiedName, node) && !musts.contains(qn) && !requires.contains(qn)) {
                optionals.add(qn);
            }
        }
    } else if (constValue != null && (constValue instanceof Number || constValue instanceof Character
            || constValue instanceof Boolean)) {
        if ((exp instanceof QualifiedName)
                || (exp instanceof QualifiedName && isSimpleQualified((QualifiedName) exp))) {
            return false;
        }
    }

    return super.visit(node);
}