Example usage for org.eclipse.jdt.internal.compiler.lookup CompilationUnitScope verifyMethods

List of usage examples for org.eclipse.jdt.internal.compiler.lookup CompilationUnitScope verifyMethods

Introduction

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

Prototype

public void verifyMethods(MethodVerifier verifier) 

Source Link

Usage

From source file:org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.java

License:Open Source License

private void initializeMembers() {
    if (jdtBinding instanceof SourceTypeBinding) {
        SourceTypeBinding sourceType = (SourceTypeBinding) jdtBinding;
        if (sourceType.scope != null) {
            TypeDeclaration typeDecl = sourceType.scope.referenceContext;
            if (typeDecl instanceof GroovyTypeDeclaration) {
                groovyDecl = typeDecl;//  w  ww.  j av  a  2 s . c  o  m
            }
        }
    }
    MethodBinding[] bindings = null;
    if (jdtBinding instanceof ParameterizedTypeBinding) {
        ReferenceBinding genericType = ((ParameterizedTypeBinding) jdtBinding).genericType();
        bindings = genericType.methods();
    } else {
        bindings = jdtBinding.methods();
    }
    if (bindings != null) {
        for (int i = 0; i < bindings.length; i++) {
            if (bindings[i].isConstructor()) {
                ConstructorNode cNode = constructorBindingToConstructorNode(bindings[i]);
                addConstructor(cNode);
            } else {
                MethodNode mNode = methodBindingToMethodNode(bindings[i]);
                addMethod(mNode);
            }
        }
    }
    if (jdtBinding instanceof BinaryTypeBinding) {
        MethodBinding[] infraBindings = ((BinaryTypeBinding) jdtBinding).infraMethods();
        for (int i = 0; i < infraBindings.length; i++) {
            if (infraBindings[i].isConstructor()) {
                ConstructorNode cNode = constructorBindingToConstructorNode(infraBindings[i]);
                addConstructor(cNode);
            } else {
                MethodNode mNode = methodBindingToMethodNode(infraBindings[i]);
                addMethod(mNode);
            }
        }
    }
    // Synthetic bindings are created for features like covariance, where the method implementing an interface method uses a
    // different return type (interface I { A foo(); } class C implements I { AA foo(); } - this needs a method 'A foo()' in C.
    if (jdtBinding instanceof SourceTypeBinding) {
        SourceTypeBinding jdtSourceTypeBinding = (SourceTypeBinding) jdtBinding;
        ClassScope classScope = jdtSourceTypeBinding.scope;
        // a null scope indicates it has already been 'cleaned up' so nothing to do (CUDeclaration.cleanUp())
        if (classScope != null) {
            CompilationUnitScope cuScope = classScope.compilationUnitScope();
            LookupEnvironment environment = classScope.environment();
            MethodVerifier verifier = environment.methodVerifier();
            cuScope.verifyMethods(verifier);
        }
        SyntheticMethodBinding[] syntheticMethodBindings = ((SourceTypeBinding) jdtBinding).syntheticMethods();
        if (syntheticMethodBindings != null) {
            for (int i = 0; i < syntheticMethodBindings.length; i++) {
                if (syntheticMethodBindings[i].isConstructor()) {
                    ConstructorNode cNode = constructorBindingToConstructorNode(bindings[i]);
                    addConstructor(cNode);
                } else {
                    MethodNode mNode = methodBindingToMethodNode(syntheticMethodBindings[i]);
                    addMethod(mNode);
                }
            }
        }
    }

    FieldBinding[] fieldBindings = null;
    if (jdtBinding instanceof ParameterizedTypeBinding) {
        fieldBindings = ((ParameterizedTypeBinding) jdtBinding).genericType().fields();
    } else {
        fieldBindings = jdtBinding.fields();
    }
    if (fieldBindings != null) {
        for (int i = 0; i < fieldBindings.length; i++) {
            FieldNode fNode = fieldBindingToFieldNode(fieldBindings[i], groovyDecl);
            addField(fNode);
        }
    }
}