Example usage for org.eclipse.jdt.internal.compiler.lookup MethodScope isInsideInitializer

List of usage examples for org.eclipse.jdt.internal.compiler.lookup MethodScope isInsideInitializer

Introduction

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

Prototype

public boolean isInsideInitializer() 

Source Link

Usage

From source file:com.codenvy.ide.ext.java.server.internal.core.util.HandleFactory.java

License:Open Source License

/**
 * Create handle by adding child to parent obtained by recursing into parent scopes.
 *//*from  ww  w  .  ja  v a  2s .c om*/
private IJavaElement createElement(Scope scope, int elementPosition, ICompilationUnit unit,
        HashSet existingElements, HashMap knownScopes) {
    IJavaElement newElement = (IJavaElement) knownScopes.get(scope);
    if (newElement != null)
        return newElement;

    switch (scope.kind) {
    case Scope.COMPILATION_UNIT_SCOPE:
        newElement = unit;
        break;
    case Scope.CLASS_SCOPE:
        IJavaElement parentElement = createElement(scope.parent, elementPosition, unit, existingElements,
                knownScopes);
        switch (parentElement.getElementType()) {
        case IJavaElement.COMPILATION_UNIT:
            newElement = ((ICompilationUnit) parentElement)
                    .getType(new String(scope.enclosingSourceType().sourceName));
            break;
        case IJavaElement.TYPE:
            newElement = ((IType) parentElement).getType(new String(scope.enclosingSourceType().sourceName));
            break;
        case IJavaElement.FIELD:
        case IJavaElement.INITIALIZER:
        case IJavaElement.METHOD:
            IMember member = (IMember) parentElement;
            if (member.isBinary()) {
                return null;
            } else {
                newElement = member.getType(new String(scope.enclosingSourceType().sourceName), 1);
                // increment occurrence count if collision is detected
                if (newElement != null) {
                    while (!existingElements.add(newElement))
                        ((SourceRefElement) newElement).occurrenceCount++;
                }
            }
            break;
        }
        if (newElement != null) {
            knownScopes.put(scope, newElement);
        }
        break;
    case Scope.METHOD_SCOPE:
        IType parentType = (IType) createElement(scope.parent, elementPosition, unit, existingElements,
                knownScopes);
        MethodScope methodScope = (MethodScope) scope;
        if (methodScope.isInsideInitializer()) {
            // inside field or initializer, must find proper one
            TypeDeclaration type = methodScope.referenceType();
            int occurenceCount = 1;
            int length = type.fields == null ? 0 : type.fields.length;
            for (int i = 0; i < length; i++) {
                FieldDeclaration field = type.fields[i];
                if (field.declarationSourceStart <= elementPosition
                        && elementPosition <= field.declarationSourceEnd) {
                    switch (field.getKind()) {
                    case AbstractVariableDeclaration.FIELD:
                    case AbstractVariableDeclaration.ENUM_CONSTANT:
                        newElement = parentType.getField(new String(field.name));
                        break;
                    case AbstractVariableDeclaration.INITIALIZER:
                        newElement = parentType.getInitializer(occurenceCount);
                        break;
                    }
                    break;
                } else if (field.getKind() == AbstractVariableDeclaration.INITIALIZER) {
                    occurenceCount++;
                }
            }
        } else {
            // method element
            AbstractMethodDeclaration method = methodScope.referenceMethod();
            newElement = parentType.getMethod(new String(method.selector),
                    Util.typeParameterSignatures(method));
            if (newElement != null) {
                knownScopes.put(scope, newElement);
            }
        }
        break;
    case Scope.BLOCK_SCOPE:
        // standard block, no element per se
        newElement = createElement(scope.parent, elementPosition, unit, existingElements, knownScopes);
        break;
    }
    return newElement;
}

From source file:org.eclipse.che.jdt.internal.core.util.HandleFactory.java

License:Open Source License

/**
 * Create handle by adding child to parent obtained by recursing into parent scopes.
 *//* w ww.ja v a2  s .c o m*/
public IJavaElement createElement(Scope scope, int elementPosition, ICompilationUnit unit,
        HashSet existingElements, HashMap knownScopes) {
    IJavaElement newElement = (IJavaElement) knownScopes.get(scope);
    if (newElement != null)
        return newElement;

    switch (scope.kind) {
    case Scope.COMPILATION_UNIT_SCOPE:
        newElement = unit;
        break;
    case Scope.CLASS_SCOPE:
        IJavaElement parentElement = createElement(scope.parent, elementPosition, unit, existingElements,
                knownScopes);
        switch (parentElement.getElementType()) {
        case IJavaElement.COMPILATION_UNIT:
            newElement = ((ICompilationUnit) parentElement)
                    .getType(new String(scope.enclosingSourceType().sourceName));
            break;
        case IJavaElement.TYPE:
            newElement = ((IType) parentElement).getType(new String(scope.enclosingSourceType().sourceName));
            break;
        case IJavaElement.FIELD:
        case IJavaElement.INITIALIZER:
        case IJavaElement.METHOD:
            IMember member = (IMember) parentElement;
            if (member.isBinary()) {
                return null;
            } else {
                newElement = member.getType(new String(scope.enclosingSourceType().sourceName), 1);
                // increment occurrence count if collision is detected
                if (newElement != null) {
                    while (!existingElements.add(newElement))
                        ((SourceRefElement) newElement).occurrenceCount++;
                }
            }
            break;
        }
        if (newElement != null) {
            knownScopes.put(scope, newElement);
        }
        break;
    case Scope.METHOD_SCOPE:
        if (scope.isLambdaScope()) {
            parentElement = createElement(scope.parent, elementPosition, unit, existingElements, knownScopes);
            LambdaExpression expression = (LambdaExpression) scope.originalReferenceContext();
            if (expression.resolvedType != null && expression.resolvedType.isValidBinding()
                    && !(expression.descriptor instanceof ProblemMethodBinding)) { // chain in lambda element only if resolved properly.
                //newElement = new org.eclipse.jdt.internal.core.SourceLambdaExpression((JavaElement) parentElement, expression)
                // .getMethod();

                newElement = LambdaFactory.createLambdaExpression((JavaElement) parentElement, expression)
                        .getMethod();
                knownScopes.put(scope, newElement);
                return newElement;
            }
            return parentElement;
        }
        IType parentType = (IType) createElement(scope.parent, elementPosition, unit, existingElements,
                knownScopes);
        MethodScope methodScope = (MethodScope) scope;
        if (methodScope.isInsideInitializer()) {
            // inside field or initializer, must find proper one
            TypeDeclaration type = methodScope.referenceType();
            int occurenceCount = 1;
            int length = type.fields == null ? 0 : type.fields.length;
            for (int i = 0; i < length; i++) {
                FieldDeclaration field = type.fields[i];
                if (field.declarationSourceStart <= elementPosition
                        && elementPosition <= field.declarationSourceEnd) {
                    switch (field.getKind()) {
                    case AbstractVariableDeclaration.FIELD:
                    case AbstractVariableDeclaration.ENUM_CONSTANT:
                        newElement = parentType.getField(new String(field.name));
                        break;
                    case AbstractVariableDeclaration.INITIALIZER:
                        newElement = parentType.getInitializer(occurenceCount);
                        break;
                    }
                    break;
                } else if (field.getKind() == AbstractVariableDeclaration.INITIALIZER) {
                    occurenceCount++;
                }
            }
        } else {
            // method element
            AbstractMethodDeclaration method = methodScope.referenceMethod();
            newElement = parentType.getMethod(new String(method.selector),
                    Util.typeParameterSignatures(method));
            if (newElement != null) {
                knownScopes.put(scope, newElement);
            }
        }
        break;
    case Scope.BLOCK_SCOPE:
        // standard block, no element per se
        newElement = createElement(scope.parent, elementPosition, unit, existingElements, knownScopes);
        break;
    }
    return newElement;
}

From source file:org.eclipse.jdt.internal.compiler.lookup.Scope.java

License:Open Source License

/**
 * Returns the modifiers of the innermost enclosing declaration.
 * @return modifiers//from www  .  j  a v a 2  s  .co m
 */
public int getDeclarationModifiers() {
    switch (this.kind) {
    case Scope.BLOCK_SCOPE:
    case Scope.METHOD_SCOPE:
        MethodScope methodScope = methodScope();
        if (!methodScope.isInsideInitializer()) {
            // check method modifiers to see if deprecated
            MethodBinding context = ((AbstractMethodDeclaration) methodScope.referenceContext).binding;
            if (context != null)
                return context.modifiers;
        } else {
            SourceTypeBinding type = ((BlockScope) this).referenceType().binding;

            // inside field declaration ? check field modifier to see if deprecated
            if (methodScope.initializedField != null)
                return methodScope.initializedField.modifiers;
            if (type != null)
                return type.modifiers;
        }
        break;
    case Scope.CLASS_SCOPE:
        ReferenceBinding context = ((ClassScope) this).referenceType().binding;
        if (context != null)
            return context.modifiers;
        break;
    }
    return -1;
}

From source file:org.eclipse.jdt.internal.compiler.lookup.Scope.java

License:Open Source License

public boolean isInsideDeprecatedCode() {
    switch (this.kind) {
    case Scope.BLOCK_SCOPE:
    case Scope.METHOD_SCOPE:
        MethodScope methodScope = methodScope();
        if (!methodScope.isInsideInitializer()) {
            // check method modifiers to see if deprecated
            MethodBinding context = ((AbstractMethodDeclaration) methodScope.referenceContext).binding;
            if (context != null && context.isViewedAsDeprecated())
                return true;
        } else if (methodScope.initializedField != null
                && methodScope.initializedField.isViewedAsDeprecated()) {
            // inside field declaration ? check field modifier to see if deprecated
            return true;
        }//from  ww  w  .  jav  a  2 s  .  c  o  m
        SourceTypeBinding declaringType = ((BlockScope) this).referenceType().binding;
        if (declaringType != null) {
            declaringType.initializeDeprecatedAnnotationTagBits(); // may not have been resolved until then
            if (declaringType.isViewedAsDeprecated())
                return true;
        }
        break;
    case Scope.CLASS_SCOPE:
        ReferenceBinding context = ((ClassScope) this).referenceType().binding;
        if (context != null) {
            context.initializeDeprecatedAnnotationTagBits(); // may not have been resolved until then
            if (context.isViewedAsDeprecated())
                return true;
        }
        break;
    case Scope.COMPILATION_UNIT_SCOPE:
        // consider import as being deprecated if first type is itself deprecated (123522)
        CompilationUnitDeclaration unit = referenceCompilationUnit();
        if (unit.types != null && unit.types.length > 0) {
            SourceTypeBinding type = unit.types[0].binding;
            if (type != null) {
                type.initializeDeprecatedAnnotationTagBits(); // may not have been resolved until then
                if (type.isViewedAsDeprecated())
                    return true;
            }
        }
    }
    return false;
}