Example usage for org.eclipse.jdt.internal.compiler.lookup ParameterizedMethodBinding isConstructor

List of usage examples for org.eclipse.jdt.internal.compiler.lookup ParameterizedMethodBinding isConstructor

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.compiler.lookup ParameterizedMethodBinding isConstructor.

Prototype

public final boolean isConstructor() 

Source Link

Usage

From source file:com.android.tools.lint.psi.EcjPsiManager.java

License:Apache License

@Nullable
public PsiElement findElement(@Nullable Binding binding) {
    if (binding == null) {
        return null;
    }//from   w ww.  j  a  v a2 s  .com

    PsiElement element = mElementMap.get(binding);
    if (element != null) {
        return element;
    }
    if (binding instanceof ProblemReferenceBinding) {
        binding = ((ProblemReferenceBinding) binding).closestReferenceMatch();
        if (binding != null) {
            return findElement(binding);
        } else {
            return null;
        }
    }

    if (binding instanceof WildcardBinding) {
        return findElement(((WildcardBinding) binding).actualType());
    }

    if (binding instanceof ParameterizedTypeBinding) {
        TypeBinding typeBinding = ((ParameterizedTypeBinding) binding).original();
        element = mElementMap.get(typeBinding);
        //noinspection PointlessBooleanExpression
        if (!RESOLVE_TO_BINARY && element == null && typeBinding != null
                && typeBinding.actualType() instanceof SourceTypeBinding) {
            return null;
        }
        return findElement(typeBinding);
    }

    if (binding instanceof ParameterizedMethodBinding) {
        ParameterizedMethodBinding methodBinding = (ParameterizedMethodBinding) binding;
        binding = methodBinding.original();
        element = mElementMap.get(binding);
        //noinspection PointlessBooleanExpression
        if (!RESOLVE_TO_BINARY && element == null && methodBinding.isConstructor()
                && methodBinding.declaringClass != null
                && methodBinding.declaringClass.actualType() instanceof SourceTypeBinding) {
            // It's a local binding but there's no actual constructor there
            // (it's the default constructor)
            return null;
        }
        return findElement(binding);
    }

    if (binding instanceof ParameterizedFieldBinding) {
        ParameterizedFieldBinding fieldBinding = (ParameterizedFieldBinding) binding;
        binding = fieldBinding.original();
        element = mElementMap.get(binding);
        //noinspection PointlessBooleanExpression
        if (!RESOLVE_TO_BINARY && element == null && fieldBinding.declaringClass != null
                && fieldBinding.declaringClass.actualType() instanceof SourceTypeBinding) {
            // It's a local binding but there's no actual constructor there
            // (it's the default constructor)
            return null;
        }
        return findElement(binding);
    }

    // No binding in map yet: the PSI file may not have been parsed yet. Attempt
    // to initialize these:
    if (binding instanceof FieldBinding) {
        ReferenceBinding declaringClass = ((FieldBinding) binding).declaringClass;
        if (declaringClass instanceof SourceTypeBinding) {
            PsiJavaFile file = mEcjResult.findFileContaining(declaringClass);
            //noinspection VariableNotUsedInsideIf
            if (file != null) {
                element = mElementMap.get(binding);
                if (element != null) {
                    return element;
                }
            }
        }
    } else if (binding instanceof MethodBinding) {
        ReferenceBinding declaringClass = ((MethodBinding) binding).declaringClass;
        if (declaringClass instanceof SourceTypeBinding) {
            PsiJavaFile file = mEcjResult.findFileContaining(declaringClass);
            //noinspection VariableNotUsedInsideIf
            if (file != null) {
                element = mElementMap.get(binding);
                if (element != null) {
                    return element;
                }
            }
        }
    }

    // Binary references. Computed on the fly for now since they are lightweight.
    if (binding instanceof MethodBinding) {
        MethodBinding methodBinding = (MethodBinding) binding;

        // Default constructor? Allow binding to binary!
        if (methodBinding.isConstructor()
                && (methodBinding.parameters == null || methodBinding.parameters.length == 0)) {
            return new EcjPsiBinaryMethod(this, methodBinding);
        }
        //noinspection PointlessBooleanExpression
        if (!RESOLVE_TO_BINARY && methodBinding.declaringClass instanceof SourceTypeBinding) {
            return null;
        }
        return new EcjPsiBinaryMethod(this, methodBinding);
    } else if (binding instanceof ReferenceBinding) {
        ReferenceBinding referenceBinding = (ReferenceBinding) binding;
        if (referenceBinding.compoundName == null) {
            // For example, TypeVariableBindings
            return null;
        }
        return new EcjPsiBinaryClass(this, referenceBinding);
    } else if (binding instanceof FieldBinding) {
        FieldBinding fieldBinding = (FieldBinding) binding;
        //noinspection PointlessBooleanExpression
        if (!RESOLVE_TO_BINARY && fieldBinding.declaringClass instanceof SourceTypeBinding) {
            return null;
        }
        return new EcjPsiBinaryField(this, fieldBinding);
    } else {
        // Search in AST, e.g. to resolve local variables etc
        if (binding instanceof LocalVariableBinding) {
            LocalVariableBinding lvb = (LocalVariableBinding) binding;
            Scope scope = lvb.declaringScope;
            while (scope != null) {
                if (scope instanceof MethodScope) {
                    MethodScope methodScope = (MethodScope) scope;
                    MethodBinding methodBinding = methodScope.referenceMethodBinding();
                    if (methodBinding != null) {
                        PsiElement method = mElementMap.get(methodBinding);
                        if (method != null) {
                            PsiElement declaration = findElementWithBinding(method, lvb);
                            if (declaration != null) {
                                return declaration;
                            }
                        }
                    }
                }
                scope = scope.parent;
            }
        }
    }

    return null;
}