Java 类org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration 实例源码

项目:lombok-ianchiu    文件:EclipseHandlerUtil.java   
/**
 * Checks if there is a (non-default) constructor. In case of multiple constructors (overloading), only
 * the first constructor decides if EXISTS_BY_USER or EXISTS_BY_LOMBOK is returned.
 * 
 * @param node Any node that represents the Type (TypeDeclaration) to look in, or any child node thereof.
 */
public static MemberExistsResult constructorExists(EclipseNode node) {
    while (node != null && !(node.get() instanceof TypeDeclaration)) {
        node = node.up();
    }

    if (node != null && node.get() instanceof TypeDeclaration) {
        TypeDeclaration typeDecl = (TypeDeclaration)node.get();
        if (typeDecl.methods != null) top: for (AbstractMethodDeclaration def : typeDecl.methods) {
            if (def instanceof ConstructorDeclaration) {
                if ((def.bits & ASTNode.IsDefaultConstructor) != 0) continue;

                if (def.annotations != null) for (Annotation anno : def.annotations) {
                    if (typeMatches(Tolerate.class, node, anno.type)) continue top;
                }

                return getGeneratedBy(def) == null ? MemberExistsResult.EXISTS_BY_USER : MemberExistsResult.EXISTS_BY_LOMBOK;
            }
        }
    }

    return MemberExistsResult.NOT_EXISTS;
}
项目:EasyMPermission    文件:EclipseHandlerUtil.java   
/**
 * Checks if there is a (non-default) constructor. In case of multiple constructors (overloading), only
 * the first constructor decides if EXISTS_BY_USER or EXISTS_BY_LOMBOK is returned.
 * 
 * @param node Any node that represents the Type (TypeDeclaration) to look in, or any child node thereof.
 */
public static MemberExistsResult constructorExists(EclipseNode node) {
    while (node != null && !(node.get() instanceof TypeDeclaration)) {
        node = node.up();
    }

    if (node != null && node.get() instanceof TypeDeclaration) {
        TypeDeclaration typeDecl = (TypeDeclaration)node.get();
        if (typeDecl.methods != null) top: for (AbstractMethodDeclaration def : typeDecl.methods) {
            if (def instanceof ConstructorDeclaration) {
                if ((def.bits & ASTNode.IsDefaultConstructor) != 0) continue;

                if (def.annotations != null) for (Annotation anno : def.annotations) {
                    if (typeMatches(Tolerate.class, node, anno.type)) continue top;
                }

                return getGeneratedBy(def) == null ? MemberExistsResult.EXISTS_BY_USER : MemberExistsResult.EXISTS_BY_LOMBOK;
            }
        }
    }

    return MemberExistsResult.NOT_EXISTS;
}
项目:android-retrolambda-lombok    文件:EcjTreeBuilder.java   
static VariableKind kind(lombok.ast.VariableDefinition node) {
    //TODO rewrite this whole thing.
    lombok.ast.Node parent = node.getParent();
    if (parent instanceof lombok.ast.VariableDeclaration) {
        if (parent.getParent() instanceof lombok.ast.TypeBody ||
            parent.getParent() instanceof lombok.ast.EnumTypeBody) {
            return FIELD;
        } else {
            return LOCAL;
        }
    }
    if (parent instanceof lombok.ast.For || 
        parent instanceof lombok.ast.ForEach){
        return LOCAL;
    }
    if (parent instanceof lombok.ast.Catch ||
        parent instanceof lombok.ast.MethodDeclaration ||
        parent instanceof lombok.ast.ConstructorDeclaration){
        return ARGUMENT;
    }
    return UNSUPPORTED;
}
项目:Eclipse-Postfix-Code-Completion    文件:SourceElementNotifier.java   
private void visitIfNeeded(AbstractMethodDeclaration method) {
    if (this.localDeclarationVisitor != null
        && (method.bits & ASTNode.HasLocalType) != 0) {
            if (method instanceof ConstructorDeclaration) {
                ConstructorDeclaration constructorDeclaration = (ConstructorDeclaration) method;
                if (constructorDeclaration.constructorCall != null) {
                    constructorDeclaration.constructorCall.traverse(this.localDeclarationVisitor, method.scope);
                }
            }
            if (method.statements != null) {
                int statementsLength = method.statements.length;
                for (int i = 0; i < statementsLength; i++)
                    method.statements[i].traverse(this.localDeclarationVisitor, method.scope);
            }
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:RecoveredMethod.java   
void attach(TypeParameter[] parameters, int startPos) {
    if(this.methodDeclaration.modifiers != ClassFileConstants.AccDefault) return;

    int lastParameterEnd = parameters[parameters.length - 1].sourceEnd;

    Parser parser = parser();
    Scanner scanner = parser.scanner;
    if(Util.getLineNumber(this.methodDeclaration.declarationSourceStart, scanner.lineEnds, 0, scanner.linePtr)
            != Util.getLineNumber(lastParameterEnd, scanner.lineEnds, 0, scanner.linePtr)) return;

    if(parser.modifiersSourceStart > lastParameterEnd
            && parser.modifiersSourceStart < this.methodDeclaration.declarationSourceStart) return;

    if (this.methodDeclaration instanceof MethodDeclaration) {
        ((MethodDeclaration)this.methodDeclaration).typeParameters = parameters;
        this.methodDeclaration.declarationSourceStart = startPos;
    } else if (this.methodDeclaration instanceof ConstructorDeclaration){
        ((ConstructorDeclaration)this.methodDeclaration).typeParameters = parameters;
        this.methodDeclaration.declarationSourceStart = startPos;
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:Parser.java   
public MethodDeclaration convertToMethodDeclaration(ConstructorDeclaration c, CompilationResult compilationResult) {
    MethodDeclaration m = new MethodDeclaration(compilationResult);
    m.typeParameters = c.typeParameters;
    m.sourceStart = c.sourceStart;
    m.sourceEnd = c.sourceEnd;
    m.bodyStart = c.bodyStart;
    m.bodyEnd = c.bodyEnd;
    m.declarationSourceEnd = c.declarationSourceEnd;
    m.declarationSourceStart = c.declarationSourceStart;
    m.selector = c.selector;
    m.statements = c.statements;
    m.modifiers = c.modifiers;
    m.annotations = c.annotations;
    m.arguments = c.arguments;
    m.thrownExceptions = c.thrownExceptions;
    m.explicitDeclarations = c.explicitDeclarations;
    m.returnType = null;
    m.javadoc = c.javadoc;
    m.bits = c.bits;
    return m;
}
项目:Eclipse-Postfix-Code-Completion    文件:ProblemReporter.java   
public void parseErrorUnexpectedEnd(
    int start,
    int end){

    String[] arguments;
    if(this.referenceContext instanceof ConstructorDeclaration) {
        arguments = new String[] {Messages.parser_endOfConstructor};
    } else if(this.referenceContext instanceof MethodDeclaration) {
        arguments = new String[] {Messages.parser_endOfMethod};
    } else if(this.referenceContext instanceof TypeDeclaration) {
        arguments = new String[] {Messages.parser_endOfInitializer};
    } else {
        arguments = new String[] {Messages.parser_endOfFile};
    }
    this.handle(
        IProblem.ParsingErrorUnexpectedEOF,
        arguments,
        arguments,
        start,
        end);
}
项目:Eclipse-Postfix-Code-Completion    文件:ProblemReporter.java   
public void unhandledException(TypeBinding exceptionType, ASTNode location) {

    boolean insideDefaultConstructor =
        (this.referenceContext instanceof ConstructorDeclaration)
            && ((ConstructorDeclaration)this.referenceContext).isDefaultConstructor();
    boolean insideImplicitConstructorCall =
        (location instanceof ExplicitConstructorCall)
            && (((ExplicitConstructorCall) location).accessMode == ExplicitConstructorCall.ImplicitSuper);

    int sourceEnd = location.sourceEnd;
    if (location instanceof LocalDeclaration) {
        sourceEnd = ((LocalDeclaration) location).declarationEnd;
    }
    this.handle(
        insideDefaultConstructor
            ? IProblem.UnhandledExceptionInDefaultConstructor
            : (insideImplicitConstructorCall
                    ? IProblem.UndefinedConstructorInImplicitConstructorCall
                    : IProblem.UnhandledException),
        new String[] {new String(exceptionType.readableName())},
        new String[] {new String(exceptionType.shortReadableName())},
        location.sourceStart,
        sourceEnd);
}
项目:Eclipse-Postfix-Code-Completion    文件:ProblemReporter.java   
public void unusedPrivateConstructor(ConstructorDeclaration constructorDecl) {

    int severity = computeSeverity(IProblem.UnusedPrivateConstructor);
    if (severity == ProblemSeverities.Ignore) return;

    if (excludeDueToAnnotation(constructorDecl.annotations, IProblem.UnusedPrivateConstructor)) return;

    MethodBinding constructor = constructorDecl.binding;
    this.handle(
            IProblem.UnusedPrivateConstructor,
        new String[] {
            new String(constructor.declaringClass.readableName()),
            typesAsString(constructor, false)
         },
        new String[] {
            new String(constructor.declaringClass.shortReadableName()),
            typesAsString(constructor, true)
         },
        severity,
        constructorDecl.sourceStart,
        constructorDecl.sourceEnd);
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:AnnotationDiscoveryVisitor.java   
@Override
public boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope scope) {
    Annotation[] annotations = constructorDeclaration.annotations;
    if (annotations != null) {
        MethodBinding constructorBinding = constructorDeclaration.binding;
        if (constructorBinding == null) {
            return false;
        }
        ((SourceTypeBinding) constructorBinding.declaringClass).resolveTypesFor(constructorBinding);
        this.resolveAnnotations(
                constructorDeclaration.scope,
                annotations,
                constructorBinding);
    }
    Argument[] arguments = constructorDeclaration.arguments;
    if (arguments != null) {
        int argumentLength = arguments.length;
        for (int i = 0; i < argumentLength; i++) {
            arguments[i].traverse(this, constructorDeclaration.scope);
        }
    }
    return false;
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:SourceElementNotifier.java   
private void visitIfNeeded(AbstractMethodDeclaration method) {
    if (this.localDeclarationVisitor != null
        && (method.bits & ASTNode.HasLocalType) != 0) {
            if (method instanceof ConstructorDeclaration) {
                ConstructorDeclaration constructorDeclaration = (ConstructorDeclaration) method;
                if (constructorDeclaration.constructorCall != null) {
                    constructorDeclaration.constructorCall.traverse(this.localDeclarationVisitor, method.scope);
                }
            }
            if (method.statements != null) {
                int statementsLength = method.statements.length;
                for (int i = 0; i < statementsLength; i++)
                    method.statements[i].traverse(this.localDeclarationVisitor, method.scope);
            }
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:RecoveredMethod.java   
void attach(TypeParameter[] parameters, int startPos) {
    if(this.methodDeclaration.modifiers != ClassFileConstants.AccDefault) return;

    int lastParameterEnd = parameters[parameters.length - 1].sourceEnd;

    Parser parser = parser();
    Scanner scanner = parser.scanner;
    if(Util.getLineNumber(this.methodDeclaration.declarationSourceStart, scanner.lineEnds, 0, scanner.linePtr)
            != Util.getLineNumber(lastParameterEnd, scanner.lineEnds, 0, scanner.linePtr)) return;

    if(parser.modifiersSourceStart > lastParameterEnd
            && parser.modifiersSourceStart < this.methodDeclaration.declarationSourceStart) return;

    if (this.methodDeclaration instanceof MethodDeclaration) {
        ((MethodDeclaration)this.methodDeclaration).typeParameters = parameters;
        this.methodDeclaration.declarationSourceStart = startPos;
    } else if (this.methodDeclaration instanceof ConstructorDeclaration){
        ((ConstructorDeclaration)this.methodDeclaration).typeParameters = parameters;
        this.methodDeclaration.declarationSourceStart = startPos;
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:ProblemReporter.java   
public void parseErrorUnexpectedEnd(
    int start,
    int end){

    String[] arguments;
    if(this.referenceContext instanceof ConstructorDeclaration) {
        arguments = new String[] {Messages.parser_endOfConstructor};
    } else if(this.referenceContext instanceof MethodDeclaration) {
        arguments = new String[] {Messages.parser_endOfMethod};
    } else if(this.referenceContext instanceof TypeDeclaration) {
        arguments = new String[] {Messages.parser_endOfInitializer};
    } else {
        arguments = new String[] {Messages.parser_endOfFile};
    }
    this.handle(
        IProblem.ParsingErrorUnexpectedEOF,
        arguments,
        arguments,
        start,
        end);
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:ProblemReporter.java   
public void unhandledException(TypeBinding exceptionType, ASTNode location) {

    boolean insideDefaultConstructor =
        (this.referenceContext instanceof ConstructorDeclaration)
            && ((ConstructorDeclaration)this.referenceContext).isDefaultConstructor();
    boolean insideImplicitConstructorCall =
        (location instanceof ExplicitConstructorCall)
            && (((ExplicitConstructorCall) location).accessMode == ExplicitConstructorCall.ImplicitSuper);

    int sourceEnd = location.sourceEnd;
    if (location instanceof LocalDeclaration) {
        sourceEnd = ((LocalDeclaration) location).declarationEnd;
    }
    this.handle(
        insideDefaultConstructor
            ? IProblem.UnhandledExceptionInDefaultConstructor
            : (insideImplicitConstructorCall
                    ? IProblem.UndefinedConstructorInImplicitConstructorCall
                    : IProblem.UnhandledException),
        new String[] {new String(exceptionType.readableName())},
        new String[] {new String(exceptionType.shortReadableName())},
        location.sourceStart,
        sourceEnd);
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:ProblemReporter.java   
public void unusedPrivateConstructor(ConstructorDeclaration constructorDecl) {

    int severity = computeSeverity(IProblem.UnusedPrivateConstructor);
    if (severity == ProblemSeverities.Ignore) return;

    if (excludeDueToAnnotation(constructorDecl.annotations)) return;

    MethodBinding constructor = constructorDecl.binding;
    this.handle(
            IProblem.UnusedPrivateConstructor,
        new String[] {
            new String(constructor.declaringClass.readableName()),
            typesAsString(constructor, false)
         },
        new String[] {
            new String(constructor.declaringClass.shortReadableName()),
            typesAsString(constructor, true)
         },
        severity,
        constructorDecl.sourceStart,
        constructorDecl.sourceEnd);
}
项目:lombok    文件:EclipseHandlerUtil.java   
/**
 * Checks if there is a (non-default) constructor. In case of multiple constructors (overloading), only
 * the first constructor decides if EXISTS_BY_USER or EXISTS_BY_LOMBOK is returned.
 * 
 * @param node Any node that represents the Type (TypeDeclaration) to look in, or any child node thereof.
 */
public static MemberExistsResult constructorExists(EclipseNode node) {
    while (node != null && !(node.get() instanceof TypeDeclaration)) {
        node = node.up();
    }

    if (node != null && node.get() instanceof TypeDeclaration) {
        TypeDeclaration typeDecl = (TypeDeclaration)node.get();
        if (typeDecl.methods != null) for (AbstractMethodDeclaration def : typeDecl.methods) {
            if (def instanceof ConstructorDeclaration) {
                if ((def.bits & ASTNode.IsDefaultConstructor) != 0) continue;
                return getGeneratedBy(def) == null ? MemberExistsResult.EXISTS_BY_USER : MemberExistsResult.EXISTS_BY_LOMBOK;
            }
        }
    }

    return MemberExistsResult.NOT_EXISTS;
}
项目:lombok-ianchiu    文件:EclipseASTVisitor.java   
public void visitMethod(EclipseNode node, AbstractMethodDeclaration method) {
    String type = method instanceof ConstructorDeclaration ? "CONSTRUCTOR" : "METHOD";
    print("<%s %s: %s%s%s>", type, str(method.selector), method.statements != null ? "filled" : "blank",
            isGenerated(method) ? " (GENERATED)" : "", position(node));
    indent++;
    if (printContent) {
        if (method.statements != null) print("%s", method);
        disablePrinting++;
    }
}
项目:lombok-ianchiu    文件:EclipseAST.java   
private EclipseNode buildMethod(AbstractMethodDeclaration method) {
    if (setAndGetAsHandled(method)) return null;
    List<EclipseNode> childNodes = new ArrayList<EclipseNode>();
    childNodes.addAll(buildArguments(method.arguments));
    if (method instanceof ConstructorDeclaration) {
        ConstructorDeclaration constructor = (ConstructorDeclaration) method;
        addIfNotNull(childNodes, buildStatement(constructor.constructorCall));
    }
    childNodes.addAll(buildStatements(method.statements));
    childNodes.addAll(buildAnnotations(method.annotations, false));
    return putInMap(new EclipseNode(this, method, childNodes, Kind.METHOD));
}
项目:lombok-ianchiu    文件:HandleUtilityClass.java   
private void createPrivateDefaultConstructor(EclipseNode typeNode, EclipseNode sourceNode) {
    ASTNode source = sourceNode.get();

    TypeDeclaration typeDeclaration = ((TypeDeclaration) typeNode.get());
    long p = (long) source.sourceStart << 32 | source.sourceEnd;

    ConstructorDeclaration constructor = new ConstructorDeclaration(((CompilationUnitDeclaration) typeNode.top().get()).compilationResult);

    constructor.modifiers = ClassFileConstants.AccPrivate;
    constructor.selector = typeDeclaration.name;
    constructor.constructorCall = new ExplicitConstructorCall(ExplicitConstructorCall.ImplicitSuper);
    constructor.constructorCall.sourceStart = source.sourceStart;
    constructor.constructorCall.sourceEnd = source.sourceEnd;
    constructor.thrownExceptions = null;
    constructor.typeParameters = null;
    constructor.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
    constructor.bodyStart = constructor.declarationSourceStart = constructor.sourceStart = source.sourceStart;
    constructor.bodyEnd = constructor.declarationSourceEnd = constructor.sourceEnd = source.sourceEnd;
    constructor.arguments = null;

    AllocationExpression exception = new AllocationExpression();
    setGeneratedBy(exception, source);
    long[] ps = new long[JAVA_LANG_UNSUPPORTED_OPERATION_EXCEPTION.length];
    Arrays.fill(ps, p);
    exception.type = new QualifiedTypeReference(JAVA_LANG_UNSUPPORTED_OPERATION_EXCEPTION, ps);
    setGeneratedBy(exception.type, source);
    exception.arguments = new Expression[] {
            new StringLiteral(UNSUPPORTED_MESSAGE, source.sourceStart, source.sourceEnd, 0)
    };
    setGeneratedBy(exception.arguments[0], source);
    ThrowStatement throwStatement = new ThrowStatement(exception, source.sourceStart, source.sourceEnd);
    setGeneratedBy(throwStatement, source);

    constructor.statements = new Statement[] {throwStatement};

    injectMethod(typeNode, constructor);
}
项目:lombok-ianchiu    文件:HandleSneakyThrows.java   
public void handleMethod(EclipseNode annotation, AbstractMethodDeclaration method, List<DeclaredException> exceptions) {
    if (method.isAbstract()) {
        annotation.addError("@SneakyThrows can only be used on concrete methods.");
        return;
    }

    if (method.statements == null || method.statements.length == 0) {
        boolean hasConstructorCall = false;
        if (method instanceof ConstructorDeclaration) {
            ExplicitConstructorCall constructorCall = ((ConstructorDeclaration) method).constructorCall;
            hasConstructorCall = constructorCall != null && !constructorCall.isImplicitSuper() && !constructorCall.isImplicitThis();
        }

        if (hasConstructorCall) {
            annotation.addWarning("Calls to sibling / super constructors are always excluded from @SneakyThrows; @SneakyThrows has been ignored because there is no other code in this constructor.");
        } else {
            annotation.addWarning("This method or constructor is empty; @SneakyThrows has been ignored.");
        }

        return;
    }

    Statement[] contents = method.statements;

    for (DeclaredException exception : exceptions) {
        contents = new Statement[] { buildTryCatchBlock(contents, exception, exception.node, method) };
    }

    method.statements = contents;
    annotation.up().rebuild();
}
项目:lombok-ianchiu    文件:EclipseHandlerUtil.java   
/**
 * Inserts a method into an existing type. The type must represent a {@code TypeDeclaration}.
 */
public static EclipseNode injectMethod(EclipseNode type, AbstractMethodDeclaration method) {
    method.annotations = addSuppressWarningsAll(type, method, method.annotations);
    method.annotations = addGenerated(type, method, method.annotations);
    TypeDeclaration parent = (TypeDeclaration) type.get();

    if (parent.methods == null) {
        parent.methods = new AbstractMethodDeclaration[1];
        parent.methods[0] = method;
    } else {
        if (method instanceof ConstructorDeclaration) {
            for (int i = 0 ; i < parent.methods.length ; i++) {
                if (parent.methods[i] instanceof ConstructorDeclaration &&
                        (parent.methods[i].bits & ASTNode.IsDefaultConstructor) != 0) {
                    EclipseNode tossMe = type.getNodeFor(parent.methods[i]);

                    AbstractMethodDeclaration[] withoutGeneratedConstructor = new AbstractMethodDeclaration[parent.methods.length - 1];

                    System.arraycopy(parent.methods, 0, withoutGeneratedConstructor, 0, i);
                    System.arraycopy(parent.methods, i + 1, withoutGeneratedConstructor, i, parent.methods.length - i - 1);

                    parent.methods = withoutGeneratedConstructor;
                    if (tossMe != null) tossMe.up().removeChild(tossMe);
                    break;
                }
            }
        }
        //We insert the method in the last position of the methods registered to the type
        //When changing this behavior, this may trigger issue #155 and #377
        AbstractMethodDeclaration[] newArray = new AbstractMethodDeclaration[parent.methods.length + 1];
        System.arraycopy(parent.methods, 0, newArray, 0, parent.methods.length);
        newArray[parent.methods.length] = method;
        parent.methods = newArray;
    }

    return type.add(method, Kind.METHOD);
}
项目:EasyMPermission    文件:EclipseASTVisitor.java   
public void visitMethod(EclipseNode node, AbstractMethodDeclaration method) {
    String type = method instanceof ConstructorDeclaration ? "CONSTRUCTOR" : "METHOD";
    print("<%s %s: %s%s%s>", type, str(method.selector), method.statements != null ? "filled" : "blank",
            isGenerated(method) ? " (GENERATED)" : "", position(node));
    indent++;
    if (printContent) {
        if (method.statements != null) print("%s", method);
        disablePrinting++;
    }
}
项目:EasyMPermission    文件:EclipseAST.java   
private EclipseNode buildMethod(AbstractMethodDeclaration method) {
    if (setAndGetAsHandled(method)) return null;
    List<EclipseNode> childNodes = new ArrayList<EclipseNode>();
    childNodes.addAll(buildArguments(method.arguments));
    if (method instanceof ConstructorDeclaration) {
        ConstructorDeclaration constructor = (ConstructorDeclaration) method;
        addIfNotNull(childNodes, buildStatement(constructor.constructorCall));
    }
    childNodes.addAll(buildStatements(method.statements));
    childNodes.addAll(buildAnnotations(method.annotations, false));
    return putInMap(new EclipseNode(this, method, childNodes, Kind.METHOD));
}
项目:EasyMPermission    文件:HandleUtilityClass.java   
private void createPrivateDefaultConstructor(EclipseNode typeNode, EclipseNode sourceNode) {
    ASTNode source = sourceNode.get();

    TypeDeclaration typeDeclaration = ((TypeDeclaration) typeNode.get());
    long p = (long) source.sourceStart << 32 | source.sourceEnd;

    ConstructorDeclaration constructor = new ConstructorDeclaration(((CompilationUnitDeclaration) typeNode.top().get()).compilationResult);

    constructor.modifiers = ClassFileConstants.AccPrivate;
    constructor.selector = typeDeclaration.name;
    constructor.constructorCall = new ExplicitConstructorCall(ExplicitConstructorCall.ImplicitSuper);
    constructor.constructorCall.sourceStart = source.sourceStart;
    constructor.constructorCall.sourceEnd = source.sourceEnd;
    constructor.thrownExceptions = null;
    constructor.typeParameters = null;
    constructor.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
    constructor.bodyStart = constructor.declarationSourceStart = constructor.sourceStart = source.sourceStart;
    constructor.bodyEnd = constructor.declarationSourceEnd = constructor.sourceEnd = source.sourceEnd;
    constructor.arguments = null;

    AllocationExpression exception = new AllocationExpression();
    setGeneratedBy(exception, source);
    long[] ps = new long[JAVA_LANG_UNSUPPORTED_OPERATION_EXCEPTION.length];
    Arrays.fill(ps, p);
    exception.type = new QualifiedTypeReference(JAVA_LANG_UNSUPPORTED_OPERATION_EXCEPTION, ps);
    setGeneratedBy(exception.type, source);
    exception.arguments = new Expression[] {
            new StringLiteral(UNSUPPORTED_MESSAGE, source.sourceStart, source.sourceEnd, 0)
    };
    setGeneratedBy(exception.arguments[0], source);
    ThrowStatement throwStatement = new ThrowStatement(exception, source.sourceStart, source.sourceEnd);
    setGeneratedBy(throwStatement, source);

    constructor.statements = new Statement[] {throwStatement};

    injectMethod(typeNode, constructor);
}
项目:EasyMPermission    文件:HandleSneakyThrows.java   
public void handleMethod(EclipseNode annotation, AbstractMethodDeclaration method, List<DeclaredException> exceptions) {
    if (method.isAbstract()) {
        annotation.addError("@SneakyThrows can only be used on concrete methods.");
        return;
    }

    if (method.statements == null || method.statements.length == 0) {
        boolean hasConstructorCall = false;
        if (method instanceof ConstructorDeclaration) {
            ExplicitConstructorCall constructorCall = ((ConstructorDeclaration) method).constructorCall;
            hasConstructorCall = constructorCall != null && !constructorCall.isImplicitSuper() && !constructorCall.isImplicitThis();
        }

        if (hasConstructorCall) {
            annotation.addWarning("Calls to sibling / super constructors are always excluded from @SneakyThrows; @SneakyThrows has been ignored because there is no other code in this constructor.");
        } else {
            annotation.addWarning("This method or constructor is empty; @SneakyThrows has been ignored.");
        }

        return;
    }

    Statement[] contents = method.statements;

    for (DeclaredException exception : exceptions) {
        contents = new Statement[] { buildTryCatchBlock(contents, exception, exception.node, method) };
    }

    method.statements = contents;
    annotation.up().rebuild();
}
项目:EasyMPermission    文件:EclipseHandlerUtil.java   
/**
 * Inserts a method into an existing type. The type must represent a {@code TypeDeclaration}.
 */
public static EclipseNode injectMethod(EclipseNode type, AbstractMethodDeclaration method) {
    method.annotations = addSuppressWarningsAll(type, method, method.annotations);
    method.annotations = addGenerated(type, method, method.annotations);
    TypeDeclaration parent = (TypeDeclaration) type.get();

    if (parent.methods == null) {
        parent.methods = new AbstractMethodDeclaration[1];
        parent.methods[0] = method;
    } else {
        if (method instanceof ConstructorDeclaration) {
            for (int i = 0 ; i < parent.methods.length ; i++) {
                if (parent.methods[i] instanceof ConstructorDeclaration &&
                        (parent.methods[i].bits & ASTNode.IsDefaultConstructor) != 0) {
                    EclipseNode tossMe = type.getNodeFor(parent.methods[i]);

                    AbstractMethodDeclaration[] withoutGeneratedConstructor = new AbstractMethodDeclaration[parent.methods.length - 1];

                    System.arraycopy(parent.methods, 0, withoutGeneratedConstructor, 0, i);
                    System.arraycopy(parent.methods, i + 1, withoutGeneratedConstructor, i, parent.methods.length - i - 1);

                    parent.methods = withoutGeneratedConstructor;
                    if (tossMe != null) tossMe.up().removeChild(tossMe);
                    break;
                }
            }
        }
        //We insert the method in the last position of the methods registered to the type
        //When changing this behavior, this may trigger issue #155 and #377
        AbstractMethodDeclaration[] newArray = new AbstractMethodDeclaration[parent.methods.length + 1];
        System.arraycopy(parent.methods, 0, newArray, 0, parent.methods.length);
        newArray[parent.methods.length] = method;
        parent.methods = newArray;
    }

    return type.add(method, Kind.METHOD);
}
项目:Eclipse-Postfix-Code-Completion    文件:AnnotationDiscoveryVisitor.java   
@Override
public boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope scope) {
    Annotation[] annotations = constructorDeclaration.annotations;
    if (annotations != null) {
        MethodBinding constructorBinding = constructorDeclaration.binding;
        if (constructorBinding == null) {
            return false;
        }
        ((SourceTypeBinding) constructorBinding.declaringClass).resolveTypesFor(constructorBinding);
        this.resolveAnnotations(
                constructorDeclaration.scope,
                annotations,
                constructorBinding);
    }

    TypeParameter[] typeParameters = constructorDeclaration.typeParameters;
    if (typeParameters != null) {
        int typeParametersLength = typeParameters.length;
        for (int i = 0; i < typeParametersLength; i++) {
            typeParameters[i].traverse(this, constructorDeclaration.scope);
        }
    }

    Argument[] arguments = constructorDeclaration.arguments;
    if (arguments != null) {
        int argumentLength = arguments.length;
        for (int i = 0; i < argumentLength; i++) {
            arguments[i].traverse(this, constructorDeclaration.scope);
        }
    }
    return false;
}
项目:Eclipse-Postfix-Code-Completion    文件:UnresolvedReferenceNameFinder.java   
public boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope classScope) {
    if (((constructorDeclaration.bits & ASTNode.IsDefaultConstructor) == 0) && !constructorDeclaration.isClinit()) {
        removeLocals(
                constructorDeclaration.arguments,
                constructorDeclaration.declarationSourceStart,
                constructorDeclaration.declarationSourceEnd);
        removeLocals(
                constructorDeclaration.statements,
                constructorDeclaration.declarationSourceStart,
                constructorDeclaration.declarationSourceEnd);
    }
    pushParent(constructorDeclaration);
    return true;
}
项目:Eclipse-Postfix-Code-Completion    文件:AssistParser.java   
/**
 * Parse the block statements inside the given method declaration and try to complete at the
 * cursor location.
 */
public void parseBlockStatements(AbstractMethodDeclaration md, CompilationUnitDeclaration unit) {
    if (md instanceof MethodDeclaration) {
        parseBlockStatements((MethodDeclaration) md, unit);
    } else if (md instanceof ConstructorDeclaration) {
        parseBlockStatements((ConstructorDeclaration) md, unit);
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:DefaultCodeFormatter.java   
private TextEdit formatStatements(String source, int indentationLevel, String lineSeparator, IRegion[] regions, boolean includeComments) {
    ConstructorDeclaration constructorDeclaration = this.codeSnippetParsingUtil.parseStatements(source.toCharArray(), getDefaultCompilerOptions(), true, false);

    if (constructorDeclaration.statements == null) {
        // a problem occured while parsing the source
        return null;
    }
    return internalFormatStatements(source, indentationLevel, lineSeparator, constructorDeclaration, regions, includeComments);
}
项目:Eclipse-Postfix-Code-Completion    文件:DefaultCodeFormatter.java   
private TextEdit internalFormatStatements(String source, int indentationLevel, String lineSeparator, ConstructorDeclaration constructorDeclaration, IRegion[] regions, boolean includeComments) {
    if (lineSeparator != null) {
        this.preferences.line_separator = lineSeparator;
    } else {
        this.preferences.line_separator = Util.LINE_SEPARATOR;
    }
    this.preferences.initial_indentation_level = indentationLevel;

    this.newCodeFormatter = new CodeFormatterVisitor(this.preferences, this.options, regions, this.codeSnippetParsingUtil, includeComments);

    return this.newCodeFormatter.format(source, constructorDeclaration);
}
项目:Eclipse-Postfix-Code-Completion    文件:OrLocator.java   
public int match(ConstructorDeclaration node, MatchingNodeSet nodeSet) {
    int level = IMPOSSIBLE_MATCH;
    for (int i = 0, length = this.patternLocators.length; i < length; i++) {
        int newLevel = this.patternLocators[i].match(node, nodeSet);
        if (newLevel > level) {
            if (newLevel == ACCURATE_MATCH) return ACCURATE_MATCH;
            level = newLevel;
        }
    }
    return level;
}
项目:Eclipse-Postfix-Code-Completion    文件:AndLocator.java   
public int match(ConstructorDeclaration node, MatchingNodeSet nodeSet) {
    int level = IMPOSSIBLE_MATCH;
    for (int i = 0, length = this.patternLocators.length; i < length; i++) {
        int newLevel = this.patternLocators[i].match(node, nodeSet);
        if (newLevel > level) {
            if (newLevel == ACCURATE_MATCH) return ACCURATE_MATCH;
            level = newLevel;
        }
    }
    return level;
}
项目:Eclipse-Postfix-Code-Completion    文件:NodeSearcher.java   
public boolean visit(
    ConstructorDeclaration constructorDeclaration,
    ClassScope scope) {

    if (constructorDeclaration.declarationSourceStart <= this.position
        && this.position <= constructorDeclaration.declarationSourceEnd) {
            this.found = constructorDeclaration;
            return false;
    }
    return true;
}
项目:Eclipse-Postfix-Code-Completion    文件:Parser.java   
protected void consumeInvalidConstructorDeclaration() {
    // ConstructorDeclaration ::= ConstructorHeader ';'
    // now we know that the top of stack is a constructorDeclaration
    ConstructorDeclaration cd = (ConstructorDeclaration) this.astStack[this.astPtr];

    cd.bodyEnd = this.endPosition; // position just before the trailing semi-colon
    cd.declarationSourceEnd = flushCommentsDefinedPriorTo(this.endStatementPosition);
    // report the problem and continue the parsing - narrowing the problem onto the method

    cd.modifiers |= ExtraCompilerModifiers.AccSemicolonBody; // remember semi-colon body
}
项目:Eclipse-Postfix-Code-Completion    文件:Parser.java   
protected void consumeInvalidConstructorDeclaration(boolean hasBody) {
    // InvalidConstructorDeclaration ::= ConstructorHeader ConstructorBody ==> true
    // InvalidConstructorDeclaration ::= ConstructorHeader ';' ==> false

    /*
    this.astStack : modifiers arguments throws statements
    this.identifierStack : name
     ==>
    this.astStack : MethodDeclaration
    this.identifierStack :
    */
    if (hasBody) {
        // pop the position of the {  (body of the method) pushed in block decl
        this.intPtr--;
    }

    //statements
    if (hasBody) {
        this.realBlockPtr--;
    }

    int length;
    if (hasBody && ((length = this.astLengthStack[this.astLengthPtr--]) != 0)) {
        this.astPtr -= length;
    }
    ConstructorDeclaration constructorDeclaration = (ConstructorDeclaration) this.astStack[this.astPtr];
    constructorDeclaration.bodyEnd = this.endStatementPosition;
    constructorDeclaration.declarationSourceEnd = flushCommentsDefinedPriorTo(this.endStatementPosition);
    if (!hasBody) {
        constructorDeclaration.modifiers |= ExtraCompilerModifiers.AccSemicolonBody;
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:ProblemReporter.java   
public void annotationTypeDeclarationCannotHaveConstructor(ConstructorDeclaration constructorDeclaration) {
    this.handle(
        IProblem.AnnotationTypeDeclarationCannotHaveConstructor,
        NoArgument,
        NoArgument,
        constructorDeclaration.sourceStart,
        constructorDeclaration.sourceEnd);
}
项目:Eclipse-Postfix-Code-Completion    文件:ProblemReporter.java   
public void interfaceCannotHaveConstructors(ConstructorDeclaration constructor) {
    this.handle(
        IProblem.InterfaceCannotHaveConstructors,
        NoArgument,
        NoArgument,
        constructor.sourceStart,
        constructor.sourceEnd,
        constructor,
        constructor.compilationResult());
}
项目:ChangeScribe    文件:ModificationDescriptor.java   
public static void describeDeprecatedMethod(StringBuilder desc, SourceCodeChange insert) {
    if(insert.getChangedEntity() != null && insert.getChangedEntity().getAstNode() != null) {
        Annotation[] annotations = ((ConstructorDeclaration)insert.getChangedEntity().getAstNode()).annotations;
        if(annotations != null && annotations.length > 0) {
            for (Annotation annotation : annotations) {
                if(annotation.type.toString().equals("Deprecated")) {
                    desc.append("deprecated ");
                    break;
                }
            }
        }

    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:UnresolvedReferenceNameFinder.java   
public boolean visit(ConstructorDeclaration constructorDeclaration, ClassScope classScope) {
    if (((constructorDeclaration.bits & ASTNode.IsDefaultConstructor) == 0) && !constructorDeclaration.isClinit()) {
        removeLocals(
                constructorDeclaration.arguments,
                constructorDeclaration.declarationSourceStart,
                constructorDeclaration.declarationSourceEnd);
        removeLocals(
                constructorDeclaration.statements,
                constructorDeclaration.declarationSourceStart,
                constructorDeclaration.declarationSourceEnd);
    }
    pushParent(constructorDeclaration);
    return true;
}