Java 类org.eclipse.jdt.core.dom.ChildListPropertyDescriptor 实例源码

项目:eclipse.jdt.ls    文件:NecessaryParenthesesChecker.java   
private static boolean locationNeedsParentheses(StructuralPropertyDescriptor locationInParent) {
    if (locationInParent instanceof ChildListPropertyDescriptor && locationInParent != InfixExpression.EXTENDED_OPERANDS_PROPERTY) {
        // e.g. argument lists of MethodInvocation, ClassInstanceCreation, dimensions of ArrayCreation ...
        return false;
    }
    if (locationInParent == VariableDeclarationFragment.INITIALIZER_PROPERTY
            || locationInParent == SingleVariableDeclaration.INITIALIZER_PROPERTY
            || locationInParent == ReturnStatement.EXPRESSION_PROPERTY
            || locationInParent == EnhancedForStatement.EXPRESSION_PROPERTY
            || locationInParent == ForStatement.EXPRESSION_PROPERTY
            || locationInParent == WhileStatement.EXPRESSION_PROPERTY
            || locationInParent == DoStatement.EXPRESSION_PROPERTY
            || locationInParent == AssertStatement.EXPRESSION_PROPERTY
            || locationInParent == AssertStatement.MESSAGE_PROPERTY
            || locationInParent == IfStatement.EXPRESSION_PROPERTY
            || locationInParent == SwitchStatement.EXPRESSION_PROPERTY
            || locationInParent == SwitchCase.EXPRESSION_PROPERTY
            || locationInParent == ArrayAccess.INDEX_PROPERTY
            || locationInParent == ThrowStatement.EXPRESSION_PROPERTY
            || locationInParent == SynchronizedStatement.EXPRESSION_PROPERTY
            || locationInParent == ParenthesizedExpression.EXPRESSION_PROPERTY) {
        return false;
    }
    return true;
}
项目:che    文件:Invocations.java   
public static ChildListPropertyDescriptor getArgumentsProperty(ASTNode invocation) {
  switch (invocation.getNodeType()) {
    case ASTNode.METHOD_INVOCATION:
      return MethodInvocation.ARGUMENTS_PROPERTY;
    case ASTNode.SUPER_METHOD_INVOCATION:
      return SuperMethodInvocation.ARGUMENTS_PROPERTY;

    case ASTNode.CONSTRUCTOR_INVOCATION:
      return ConstructorInvocation.ARGUMENTS_PROPERTY;
    case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
      return SuperConstructorInvocation.ARGUMENTS_PROPERTY;

    case ASTNode.CLASS_INSTANCE_CREATION:
      return ClassInstanceCreation.ARGUMENTS_PROPERTY;
    case ASTNode.ENUM_CONSTANT_DECLARATION:
      return EnumConstantDeclaration.ARGUMENTS_PROPERTY;

    default:
      throw new IllegalArgumentException(invocation.toString());
  }
}
项目:eclipse.jdt.ls    文件:ReplaceRewrite.java   
protected void handleManyMany(ASTNode[] replacements, TextEditGroup description) {
    ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
    if (fToReplace.length == replacements.length) {
        for (int i= 0; i < fToReplace.length; i++) {
            container.replace(fToReplace[i], replacements[i], description);
        }
    } else if (fToReplace.length < replacements.length) {
        for (int i= 0; i < fToReplace.length; i++) {
            container.replace(fToReplace[i], replacements[i], description);
        }
        for (int i= fToReplace.length; i < replacements.length; i++) {
            container.insertAfter(replacements[i], replacements[i - 1], description);
        }
    } else if (fToReplace.length > replacements.length) {
        int delta= fToReplace.length - replacements.length;
        for(int i= 0; i < delta; i++) {
            container.remove(fToReplace[i], description);
        }
        for (int i= delta, r= 0; i < fToReplace.length; i++, r++) {
            container.replace(fToReplace[i], replacements[r], description);
        }
    }
}
项目:eclipse.jdt.ls    文件:StatementRewrite.java   
@Override
protected void handleOneMany(ASTNode[] replacements, TextEditGroup description) {
    AST ast= fToReplace[0].getAST();
    // to replace == 1, but more than one replacement. Have to check if we
    // need to insert a block to not change structure
    if (ASTNodes.isControlStatementBody(fDescriptor)) {
        Block block= ast.newBlock();
        ListRewrite statements= fRewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
        for (int i= 0; i < replacements.length; i++) {
            statements.insertLast(replacements[i], description);
        }
        fRewrite.replace(fToReplace[0], block, description);
    } else {
        ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
        container.replace(fToReplace[0], replacements[0], description);
        for (int i= 1; i < replacements.length; i++) {
            container.insertAfter(replacements[i], replacements[i - 1], description);
        }
    }
}
项目:eclipse.jdt.ls    文件:TypeAnnotationRewrite.java   
/**
 * Removes all {@link Annotation} whose only {@link Target} is {@link ElementType#TYPE_USE} from
 * <code>node</code>'s <code>childListProperty</code>.
 * <p>
 * In a combination of {@link ElementType#TYPE_USE} and {@link ElementType#TYPE_PARAMETER}
 * the latter is ignored, because this is implied by the former and creates no ambiguity.</p>
 *
 * @param node ASTNode
 * @param childListProperty child list property
 * @param rewrite rewrite that removes the nodes
 * @param editGroup the edit group in which to collect the corresponding text edits, or null if
 *            ungrouped
 */
public static void removePureTypeAnnotations(ASTNode node, ChildListPropertyDescriptor childListProperty, ASTRewrite rewrite, TextEditGroup editGroup) {
    CompilationUnit root= (CompilationUnit) node.getRoot();
    if (!JavaModelUtil.is18OrHigher(root.getJavaElement().getJavaProject())) {
        return;
    }
    ListRewrite listRewrite= rewrite.getListRewrite(node, childListProperty);
    @SuppressWarnings("unchecked")
    List<? extends ASTNode> children= (List<? extends ASTNode>) node.getStructuralProperty(childListProperty);
    for (ASTNode child : children) {
        if (child instanceof Annotation) {
            Annotation annotation= (Annotation) child;
            if (isPureTypeAnnotation(annotation)) {
                listRewrite.remove(child, editGroup);
            }
        }
    }
}
项目:eclipse.jdt.ls    文件:UnusedCodeFix.java   
private void splitUpDeclarations(ASTRewrite rewrite, TextEditGroup group, VariableDeclarationFragment frag, VariableDeclarationStatement originalStatement, List<Expression> sideEffects) {
    if (sideEffects.size() > 0) {
        ListRewrite statementRewrite= rewrite.getListRewrite(originalStatement.getParent(), (ChildListPropertyDescriptor) originalStatement.getLocationInParent());

        Statement previousStatement= originalStatement;
        for (int i= 0; i < sideEffects.size(); i++) {
            Expression sideEffect= sideEffects.get(i);
            Expression movedInit= (Expression) rewrite.createMoveTarget(sideEffect);
            ExpressionStatement wrapped= rewrite.getAST().newExpressionStatement(movedInit);
            statementRewrite.insertAfter(wrapped, previousStatement, group);
            previousStatement= wrapped;
        }

        VariableDeclarationStatement newDeclaration= null;
        List<VariableDeclarationFragment> fragments= originalStatement.fragments();
        int fragIndex= fragments.indexOf(frag);
        ListIterator<VariableDeclarationFragment> fragmentIterator= fragments.listIterator(fragIndex+1);
        while (fragmentIterator.hasNext()) {
            VariableDeclarationFragment currentFragment= fragmentIterator.next();
            VariableDeclarationFragment movedFragment= (VariableDeclarationFragment) rewrite.createMoveTarget(currentFragment);
            if (newDeclaration == null) {
                newDeclaration= rewrite.getAST().newVariableDeclarationStatement(movedFragment);
                Type copiedType= (Type) rewrite.createCopyTarget(originalStatement.getType());
                newDeclaration.setType(copiedType);
            } else {
                newDeclaration.fragments().add(movedFragment);
            }
        }
        if (newDeclaration != null){
            statementRewrite.insertAfter(newDeclaration, previousStatement, group);
            if (originalStatement.fragments().size() == newDeclaration.fragments().size() + 1){
                rewrite.remove(originalStatement, group);
            }
        }
    }
}
项目:che    文件:ReplaceRewrite.java   
protected void handleManyMany(ASTNode[] replacements, TextEditGroup description) {
  ListRewrite container =
      fRewrite.getListRewrite(
          fToReplace[0].getParent(), (ChildListPropertyDescriptor) fDescriptor);
  if (fToReplace.length == replacements.length) {
    for (int i = 0; i < fToReplace.length; i++) {
      container.replace(fToReplace[i], replacements[i], description);
    }
  } else if (fToReplace.length < replacements.length) {
    for (int i = 0; i < fToReplace.length; i++) {
      container.replace(fToReplace[i], replacements[i], description);
    }
    for (int i = fToReplace.length; i < replacements.length; i++) {
      container.insertAfter(replacements[i], replacements[i - 1], description);
    }
  } else if (fToReplace.length > replacements.length) {
    int delta = fToReplace.length - replacements.length;
    for (int i = 0; i < delta; i++) {
      container.remove(fToReplace[i], description);
    }
    for (int i = delta, r = 0; i < fToReplace.length; i++, r++) {
      container.replace(fToReplace[i], replacements[r], description);
    }
  }
}
项目:che    文件:StatementRewrite.java   
@Override
protected void handleOneMany(ASTNode[] replacements, TextEditGroup description) {
  AST ast = fToReplace[0].getAST();
  // to replace == 1, but more than one replacement. Have to check if we
  // need to insert a block to not change structure
  if (ASTNodes.isControlStatementBody(fDescriptor)) {
    Block block = ast.newBlock();
    ListRewrite statements = fRewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
    for (int i = 0; i < replacements.length; i++) {
      statements.insertLast(replacements[i], description);
    }
    fRewrite.replace(fToReplace[0], block, description);
  } else {
    ListRewrite container =
        fRewrite.getListRewrite(
            fToReplace[0].getParent(), (ChildListPropertyDescriptor) fDescriptor);
    container.replace(fToReplace[0], replacements[0], description);
    for (int i = 1; i < replacements.length; i++) {
      container.insertAfter(replacements[i], replacements[i - 1], description);
    }
  }
}
项目:che    文件:NecessaryParenthesesChecker.java   
private static boolean locationNeedsParentheses(StructuralPropertyDescriptor locationInParent) {
  if (locationInParent instanceof ChildListPropertyDescriptor
      && locationInParent != InfixExpression.EXTENDED_OPERANDS_PROPERTY) {
    // e.g. argument lists of MethodInvocation, ClassInstanceCreation, dimensions of ArrayCreation
    // ...
    return false;
  }
  if (locationInParent == VariableDeclarationFragment.INITIALIZER_PROPERTY
      || locationInParent == SingleVariableDeclaration.INITIALIZER_PROPERTY
      || locationInParent == ReturnStatement.EXPRESSION_PROPERTY
      || locationInParent == EnhancedForStatement.EXPRESSION_PROPERTY
      || locationInParent == ForStatement.EXPRESSION_PROPERTY
      || locationInParent == WhileStatement.EXPRESSION_PROPERTY
      || locationInParent == DoStatement.EXPRESSION_PROPERTY
      || locationInParent == AssertStatement.EXPRESSION_PROPERTY
      || locationInParent == AssertStatement.MESSAGE_PROPERTY
      || locationInParent == IfStatement.EXPRESSION_PROPERTY
      || locationInParent == SwitchStatement.EXPRESSION_PROPERTY
      || locationInParent == SwitchCase.EXPRESSION_PROPERTY
      || locationInParent == ArrayAccess.INDEX_PROPERTY
      || locationInParent == ThrowStatement.EXPRESSION_PROPERTY
      || locationInParent == SynchronizedStatement.EXPRESSION_PROPERTY
      || locationInParent == ParenthesizedExpression.EXPRESSION_PROPERTY) {
    return false;
  }
  return true;
}
项目:che    文件:AddArgumentCorrectionProposal.java   
@Override
protected ASTRewrite getRewrite() {
  AST ast = fCallerNode.getAST();
  ASTRewrite rewrite = ASTRewrite.create(ast);
  ChildListPropertyDescriptor property = getProperty();

  for (int i = 0; i < fInsertIndexes.length; i++) {
    int idx = fInsertIndexes[i];
    String key = "newarg_" + i; // $NON-NLS-1$
    Expression newArg = evaluateArgumentExpressions(ast, fParamTypes[idx], key);
    ListRewrite listRewriter = rewrite.getListRewrite(fCallerNode, property);
    listRewriter.insertAt(newArg, idx, null);

    addLinkedPosition(rewrite.track(newArg), i == 0, key);
  }
  return rewrite;
}
项目:che    文件:NewVariableCorrectionProposal.java   
private ASTRewrite doAddField(CompilationUnit astRoot) {
  SimpleName node = fOriginalNode;
  boolean isInDifferentCU = false;

  ASTNode newTypeDecl = astRoot.findDeclaringNode(fSenderBinding);
  if (newTypeDecl == null) {
    astRoot = ASTResolving.createQuickFixAST(getCompilationUnit(), null);
    newTypeDecl = astRoot.findDeclaringNode(fSenderBinding.getKey());
    isInDifferentCU = true;
  }
  ImportRewrite imports = createImportRewrite(astRoot);
  ImportRewriteContext importRewriteContext =
      new ContextSensitiveImportRewriteContext(
          ASTResolving.findParentBodyDeclaration(node), imports);

  if (newTypeDecl != null) {
    AST ast = newTypeDecl.getAST();

    ASTRewrite rewrite = ASTRewrite.create(ast);

    VariableDeclarationFragment fragment = ast.newVariableDeclarationFragment();
    fragment.setName(ast.newSimpleName(node.getIdentifier()));

    Type type = evaluateVariableType(ast, imports, importRewriteContext, fSenderBinding);

    FieldDeclaration newDecl = ast.newFieldDeclaration(fragment);
    newDecl.setType(type);
    newDecl
        .modifiers()
        .addAll(ASTNodeFactory.newModifiers(ast, evaluateFieldModifiers(newTypeDecl)));

    if (fSenderBinding.isInterface() || fVariableKind == CONST_FIELD) {
      fragment.setInitializer(ASTNodeFactory.newDefaultExpression(ast, type, 0));
    }

    ChildListPropertyDescriptor property = ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
    List<BodyDeclaration> decls =
        ASTNodes.<BodyDeclaration>getChildListProperty(newTypeDecl, property);

    int maxOffset = isInDifferentCU ? -1 : node.getStartPosition();

    int insertIndex = findFieldInsertIndex(decls, newDecl, maxOffset);

    ListRewrite listRewriter = rewrite.getListRewrite(newTypeDecl, property);
    listRewriter.insertAt(newDecl, insertIndex, null);

    ModifierCorrectionSubProcessor.installLinkedVisibilityProposals(
        getLinkedProposalModel(), rewrite, newDecl.modifiers(), fSenderBinding.isInterface());

    addLinkedPosition(rewrite.track(newDecl.getType()), false, KEY_TYPE);
    if (!isInDifferentCU) {
      addLinkedPosition(rewrite.track(node), true, KEY_NAME);
    }
    addLinkedPosition(rewrite.track(fragment.getName()), false, KEY_NAME);

    if (fragment.getInitializer() != null) {
      addLinkedPosition(rewrite.track(fragment.getInitializer()), false, KEY_INITIALIZER);
    }
    return rewrite;
  }
  return null;
}
项目:che    文件:AssignToVariableAssistProposal.java   
private VariableDeclarationFragment addFieldDeclaration(
    ASTRewrite rewrite, ASTNode newTypeDecl, int modifiers, Expression expression) {
  if (fExistingFragment != null) {
    return fExistingFragment;
  }

  ChildListPropertyDescriptor property = ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
  List<BodyDeclaration> decls = ASTNodes.getBodyDeclarations(newTypeDecl);
  AST ast = newTypeDecl.getAST();
  String[] varNames = suggestFieldNames(fTypeBinding, expression, modifiers);
  for (int i = 0; i < varNames.length; i++) {
    addLinkedPositionProposal(KEY_NAME, varNames[i], null);
  }
  String varName = varNames[0];

  VariableDeclarationFragment newDeclFrag = ast.newVariableDeclarationFragment();
  newDeclFrag.setName(ast.newSimpleName(varName));

  FieldDeclaration newDecl = ast.newFieldDeclaration(newDeclFrag);

  Type type = evaluateType(ast);
  newDecl.setType(type);
  newDecl.modifiers().addAll(ASTNodeFactory.newModifiers(ast, modifiers));

  ModifierCorrectionSubProcessor.installLinkedVisibilityProposals(
      getLinkedProposalModel(), rewrite, newDecl.modifiers(), false);

  int insertIndex = findFieldInsertIndex(decls, fNodeToAssign.getStartPosition());
  rewrite.getListRewrite(newTypeDecl, property).insertAt(newDecl, insertIndex, null);

  return newDeclFrag;
}
项目:gwt-eclipse-plugin    文件:AbstractCreateMethodProposal.java   
@Override
protected ASTRewrite getRewrite() {
  CompilationUnit targetAstRoot = ASTResolving.createQuickFixAST(
      getCompilationUnit(), null);
  createImportRewrite(targetAstRoot);

  // Find the target type declaration
  TypeDeclaration typeDecl = JavaASTUtils.findTypeDeclaration(targetAstRoot,
      targetQualifiedTypeName);
  if (typeDecl == null) {
    return null;
  }

  ASTRewrite rewrite = ASTRewrite.create(targetAstRoot.getAST());

  // Generate the new method declaration
  MethodDeclaration methodDecl = createMethodDeclaration(rewrite.getAST());

  // Add the new method declaration to the interface
  ChildListPropertyDescriptor property = ASTNodes.getBodyDeclarationsProperty(typeDecl);
  ListRewrite listRewriter = rewrite.getListRewrite(typeDecl, property);
  listRewriter.insertLast(methodDecl, null);

  return rewrite;
}
项目:Eclipse-Postfix-Code-Completion    文件:Invocations.java   
public static ChildListPropertyDescriptor getArgumentsProperty(ASTNode invocation) {
    switch (invocation.getNodeType()) {
        case ASTNode.METHOD_INVOCATION:
            return MethodInvocation.ARGUMENTS_PROPERTY;
        case ASTNode.SUPER_METHOD_INVOCATION:
            return SuperMethodInvocation.ARGUMENTS_PROPERTY;

        case ASTNode.CONSTRUCTOR_INVOCATION:
            return ConstructorInvocation.ARGUMENTS_PROPERTY;
        case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
            return SuperConstructorInvocation.ARGUMENTS_PROPERTY;

        case ASTNode.CLASS_INSTANCE_CREATION:
            return ClassInstanceCreation.ARGUMENTS_PROPERTY;
        case ASTNode.ENUM_CONSTANT_DECLARATION:
            return EnumConstantDeclaration.ARGUMENTS_PROPERTY;

        default:
            throw new IllegalArgumentException(invocation.toString());
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:ReplaceRewrite.java   
protected void handleManyMany(ASTNode[] replacements, TextEditGroup description) {
    ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
    if (fToReplace.length == replacements.length) {
        for (int i= 0; i < fToReplace.length; i++) {
            container.replace(fToReplace[i], replacements[i], description);
        }
    } else if (fToReplace.length < replacements.length) {
        for (int i= 0; i < fToReplace.length; i++) {
            container.replace(fToReplace[i], replacements[i], description);
        }
        for (int i= fToReplace.length; i < replacements.length; i++) {
            container.insertAfter(replacements[i], replacements[i - 1], description);
        }
    } else if (fToReplace.length > replacements.length) {
        int delta= fToReplace.length - replacements.length;
        for(int i= 0; i < delta; i++) {
            container.remove(fToReplace[i], description);
        }
        for (int i= delta, r= 0; i < fToReplace.length; i++, r++) {
            container.replace(fToReplace[i], replacements[r], description);
        }
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:StatementRewrite.java   
@Override
protected void handleOneMany(ASTNode[] replacements, TextEditGroup description) {
    AST ast= fToReplace[0].getAST();
    // to replace == 1, but more than one replacement. Have to check if we
    // need to insert a block to not change structure
    if (ASTNodes.isControlStatementBody(fDescriptor)) {
        Block block= ast.newBlock();
        ListRewrite statements= fRewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
        for (int i= 0; i < replacements.length; i++) {
            statements.insertLast(replacements[i], description);
        }
        fRewrite.replace(fToReplace[0], block, description);
    } else {
        ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
        container.replace(fToReplace[0], replacements[0], description);
        for (int i= 1; i < replacements.length; i++) {
            container.insertAfter(replacements[i], replacements[i - 1], description);
        }
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:NecessaryParenthesesChecker.java   
private static boolean locationNeedsParentheses(StructuralPropertyDescriptor locationInParent) {
    if (locationInParent instanceof ChildListPropertyDescriptor && locationInParent != InfixExpression.EXTENDED_OPERANDS_PROPERTY) {
        // e.g. argument lists of MethodInvocation, ClassInstanceCreation, dimensions of ArrayCreation ...
        return false;
    }
    if (locationInParent == VariableDeclarationFragment.INITIALIZER_PROPERTY
            || locationInParent == SingleVariableDeclaration.INITIALIZER_PROPERTY
            || locationInParent == ReturnStatement.EXPRESSION_PROPERTY
            || locationInParent == EnhancedForStatement.EXPRESSION_PROPERTY
            || locationInParent == ForStatement.EXPRESSION_PROPERTY
            || locationInParent == WhileStatement.EXPRESSION_PROPERTY
            || locationInParent == DoStatement.EXPRESSION_PROPERTY
            || locationInParent == AssertStatement.EXPRESSION_PROPERTY
            || locationInParent == AssertStatement.MESSAGE_PROPERTY
            || locationInParent == IfStatement.EXPRESSION_PROPERTY
            || locationInParent == SwitchStatement.EXPRESSION_PROPERTY
            || locationInParent == SwitchCase.EXPRESSION_PROPERTY
            || locationInParent == ArrayAccess.INDEX_PROPERTY
            || locationInParent == ThrowStatement.EXPRESSION_PROPERTY
            || locationInParent == SynchronizedStatement.EXPRESSION_PROPERTY
            || locationInParent == ParenthesizedExpression.EXPRESSION_PROPERTY) {
        return false;
    }
    return true;
}
项目:Eclipse-Postfix-Code-Completion    文件:UnusedCodeFix.java   
private void splitUpDeclarations(ASTRewrite rewrite, TextEditGroup group, VariableDeclarationFragment frag, VariableDeclarationStatement originalStatement, List<Expression> sideEffects) {
    if (sideEffects.size() > 0) {
        ListRewrite statementRewrite= rewrite.getListRewrite(originalStatement.getParent(), (ChildListPropertyDescriptor) originalStatement.getLocationInParent());

        Statement previousStatement= originalStatement;
        for (int i= 0; i < sideEffects.size(); i++) {
            Expression sideEffect= sideEffects.get(i);
            Expression movedInit= (Expression) rewrite.createMoveTarget(sideEffect);
            ExpressionStatement wrapped= rewrite.getAST().newExpressionStatement(movedInit);
            statementRewrite.insertAfter(wrapped, previousStatement, group);
            previousStatement= wrapped;
        }

        VariableDeclarationStatement newDeclaration= null;
        List<VariableDeclarationFragment> fragments= originalStatement.fragments();
        int fragIndex= fragments.indexOf(frag);
        ListIterator<VariableDeclarationFragment> fragmentIterator= fragments.listIterator(fragIndex+1);
        while (fragmentIterator.hasNext()) {
            VariableDeclarationFragment currentFragment= fragmentIterator.next();
            VariableDeclarationFragment movedFragment= (VariableDeclarationFragment) rewrite.createMoveTarget(currentFragment);
            if (newDeclaration == null) {
                newDeclaration= rewrite.getAST().newVariableDeclarationStatement(movedFragment);
                Type copiedType= (Type) rewrite.createCopyTarget(originalStatement.getType());
                newDeclaration.setType(copiedType);
            } else {
                newDeclaration.fragments().add(movedFragment);
            }
        }
        if (newDeclaration != null){
            statementRewrite.insertAfter(newDeclaration, previousStatement, group);
            if (originalStatement.fragments().size() == newDeclaration.fragments().size() + 1){
                rewrite.remove(originalStatement, group);
            }
        }
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:AddArgumentCorrectionProposal.java   
@Override
protected ASTRewrite getRewrite() {
    AST ast= fCallerNode.getAST();
    ASTRewrite rewrite= ASTRewrite.create(ast);
    ChildListPropertyDescriptor property= getProperty();

    for (int i= 0; i < fInsertIndexes.length; i++) {
        int idx= fInsertIndexes[i];
        String key= "newarg_" + i; //$NON-NLS-1$
        Expression newArg= evaluateArgumentExpressions(ast, fParamTypes[idx], key);
        ListRewrite listRewriter= rewrite.getListRewrite(fCallerNode, property);
        listRewriter.insertAt(newArg, idx, null);

        addLinkedPosition(rewrite.track(newArg), i == 0, key);
    }
    return rewrite;
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:Invocations.java   
public static ChildListPropertyDescriptor getArgumentsProperty(ASTNode invocation) {
    switch (invocation.getNodeType()) {
        case ASTNode.METHOD_INVOCATION:
            return MethodInvocation.ARGUMENTS_PROPERTY;
        case ASTNode.SUPER_METHOD_INVOCATION:
            return SuperMethodInvocation.ARGUMENTS_PROPERTY;

        case ASTNode.CONSTRUCTOR_INVOCATION:
            return ConstructorInvocation.ARGUMENTS_PROPERTY;
        case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
            return SuperConstructorInvocation.ARGUMENTS_PROPERTY;

        case ASTNode.CLASS_INSTANCE_CREATION:
            return ClassInstanceCreation.ARGUMENTS_PROPERTY;
        case ASTNode.ENUM_CONSTANT_DECLARATION:
            return EnumConstantDeclaration.ARGUMENTS_PROPERTY;

        default:
            throw new IllegalArgumentException(invocation.toString());
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:ReplaceRewrite.java   
protected void handleManyMany(ASTNode[] replacements, TextEditGroup description) {
    ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
    if (fToReplace.length == replacements.length) {
        for (int i= 0; i < fToReplace.length; i++) {
            container.replace(fToReplace[i], replacements[i], description);
        }
    } else if (fToReplace.length < replacements.length) {
        for (int i= 0; i < fToReplace.length; i++) {
            container.replace(fToReplace[i], replacements[i], description);
        }
        for (int i= fToReplace.length; i < replacements.length; i++) {
            container.insertAfter(replacements[i], replacements[i - 1], description);
        }
    } else if (fToReplace.length > replacements.length) {
        int delta= fToReplace.length - replacements.length;
        for(int i= 0; i < delta; i++) {
            container.remove(fToReplace[i], description);
        }
        for (int i= delta, r= 0; i < fToReplace.length; i++, r++) {
            container.replace(fToReplace[i], replacements[r], description);
        }
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:StatementRewrite.java   
@Override
protected void handleOneMany(ASTNode[] replacements, TextEditGroup description) {
    AST ast= fToReplace[0].getAST();
    // to replace == 1, but more than one replacement. Have to check if we
    // need to insert a block to not change structure
    if (ASTNodes.isControlStatementBody(fDescriptor)) {
        Block block= ast.newBlock();
        ListRewrite statements= fRewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
        for (int i= 0; i < replacements.length; i++) {
            statements.insertLast(replacements[i], description);
        }
        fRewrite.replace(fToReplace[0], block, description);
    } else {
        ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
        container.replace(fToReplace[0], replacements[0], description);
        for (int i= 1; i < replacements.length; i++) {
            container.insertAfter(replacements[i], replacements[i - 1], description);
        }
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:NecessaryParenthesesChecker.java   
private static boolean locationNeedsParentheses(StructuralPropertyDescriptor locationInParent) {
    if (locationInParent instanceof ChildListPropertyDescriptor && locationInParent != InfixExpression.EXTENDED_OPERANDS_PROPERTY) {
        // e.g. argument lists of MethodInvocation, ClassInstanceCreation, dimensions of ArrayCreation ...
        return false;
    }
    if (locationInParent == VariableDeclarationFragment.INITIALIZER_PROPERTY
            || locationInParent == SingleVariableDeclaration.INITIALIZER_PROPERTY
            || locationInParent == ReturnStatement.EXPRESSION_PROPERTY
            || locationInParent == EnhancedForStatement.EXPRESSION_PROPERTY
            || locationInParent == ForStatement.EXPRESSION_PROPERTY
            || locationInParent == WhileStatement.EXPRESSION_PROPERTY
            || locationInParent == DoStatement.EXPRESSION_PROPERTY
            || locationInParent == AssertStatement.EXPRESSION_PROPERTY
            || locationInParent == AssertStatement.MESSAGE_PROPERTY
            || locationInParent == IfStatement.EXPRESSION_PROPERTY
            || locationInParent == SwitchStatement.EXPRESSION_PROPERTY
            || locationInParent == SwitchCase.EXPRESSION_PROPERTY
            || locationInParent == ArrayAccess.INDEX_PROPERTY
            || locationInParent == ThrowStatement.EXPRESSION_PROPERTY
            || locationInParent == SynchronizedStatement.EXPRESSION_PROPERTY
            || locationInParent == ParenthesizedExpression.EXPRESSION_PROPERTY) {
        return false;
    }
    return true;
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:AddArgumentCorrectionProposal.java   
@Override
protected ASTRewrite getRewrite() {
    AST ast= fCallerNode.getAST();
    ASTRewrite rewrite= ASTRewrite.create(ast);
    ChildListPropertyDescriptor property= getProperty();

    for (int i= 0; i < fInsertIndexes.length; i++) {
        int idx= fInsertIndexes[i];
        String key= "newarg_" + i; //$NON-NLS-1$
        Expression newArg= evaluateArgumentExpressions(ast, fParamTypes[idx], key);
        ListRewrite listRewriter= rewrite.getListRewrite(fCallerNode, property);
        listRewriter.insertAt(newArg, idx, null);

        addLinkedPosition(rewrite.track(newArg), i == 0, key);
    }
    return rewrite;
}
项目:eclipse-optimus    文件:ASTThrownExceptionsHelper.java   
public static ChildListPropertyDescriptor getThrownExceptionsPropertyDescriptor(MethodDeclaration node) {
    List<?> propertyDescriptors = MethodDeclaration.propertyDescriptors(node.getAST().apiLevel());
    for (Object propertyDescriptor : propertyDescriptors) {
        if (propertyDescriptor instanceof ChildListPropertyDescriptor) {
            ChildListPropertyDescriptor childListPropertyDescriptor = (ChildListPropertyDescriptor) propertyDescriptor;
            if (DESCRIPTOR_NAME_AST4.equals(childListPropertyDescriptor.getId())) {
                if (OptimusLogger.logger.isLoggable(Level.FINE)) {
                    OptimusLogger.logger.fine(String.format(DESCRIPTOR_RETURNED_MESSAGE, DESCRIPTOR_NAME_AST4));
                }
                return childListPropertyDescriptor;
            } else if (DESCRIPTOR_NAME_AST8.equals(childListPropertyDescriptor.getId())) {
                if (OptimusLogger.logger.isLoggable(Level.FINE)) {
                    OptimusLogger.logger.fine(String.format(DESCRIPTOR_RETURNED_MESSAGE, DESCRIPTOR_NAME_AST4));
                }
                return childListPropertyDescriptor;
            }
        }
    }
    return null;
}
项目:eclipse.jdt.ls    文件:ReplaceRewrite.java   
protected ReplaceRewrite(ASTRewrite rewrite, ASTNode[] nodes) {
    Assert.isNotNull(rewrite);
    Assert.isNotNull(nodes);
    Assert.isTrue(nodes.length > 0);
    fRewrite= rewrite;
    fToReplace= nodes;
    fDescriptor= fToReplace[0].getLocationInParent();
    if (nodes.length > 1) {
        Assert.isTrue(fDescriptor instanceof ChildListPropertyDescriptor);
    }
}
项目:eclipse.jdt.ls    文件:ASTNodes.java   
/**
 * Returns the list that contains the given ASTNode. If the node
 * isn't part of any list, <code>null</code> is returned.
 *
 * @param node the node in question
 * @return the list that contains the node or <code>null</code>
 */
public static List<? extends ASTNode> getContainingList(ASTNode node) {
    StructuralPropertyDescriptor locationInParent= node.getLocationInParent();
    if (locationInParent != null && locationInParent.isChildListProperty()) {
        return getChildListProperty(node.getParent(), (ChildListPropertyDescriptor) locationInParent);
    }
    return null;
}
项目:eclipse.jdt.ls    文件:ASTNodes.java   
/**
 * Returns the structural property descriptor for the "bodyDeclarations" property
 * of this node (element type: {@link BodyDeclaration}).
 *
 * @param node the node, either an {@link AbstractTypeDeclaration} or an {@link AnonymousClassDeclaration}
 * @return the property descriptor
 */
public static ChildListPropertyDescriptor getBodyDeclarationsProperty(ASTNode node) {
    if (node instanceof AbstractTypeDeclaration) {
        return ((AbstractTypeDeclaration)node).getBodyDeclarationsProperty();
    } else if (node instanceof AnonymousClassDeclaration) {
        return AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY;
    }
    // should not happen.
    Assert.isTrue(false);
    return null;
}
项目:eclipse.jdt.ls    文件:DimensionRewrite.java   
/**
 * Removes all children in <code>node</code>'s <code>childListProperty</code>.
 *
 * @param node ASTNode
 * @param childListProperty child list property
 * @param rewrite rewrite that removes the nodes
 * @param editGroup the edit group in which to collect the corresponding text edits, or null if ungrouped
 */
public static void removeAllChildren(ASTNode node, ChildListPropertyDescriptor childListProperty, ASTRewrite rewrite, TextEditGroup editGroup) {
    ListRewrite listRewrite= rewrite.getListRewrite(node, childListProperty);
    @SuppressWarnings("unchecked")
    List<? extends ASTNode> children= (List<? extends ASTNode>) node.getStructuralProperty(childListProperty);
    for (ASTNode child : children) {
        listRewrite.remove(child, editGroup);
    }
}
项目:eclipse.jdt.ls    文件:SelfEncapsulateFieldProposal.java   
@Override
protected ASTRewrite getRewrite() throws CoreException {
    CompilationUnit astRoot = ASTResolving.findParentCompilationUnit(fNode);
    ASTNode typeDecl = astRoot.findDeclaringNode(fSenderBinding);
    ASTNode newTypeDecl = null;
    if (typeDecl != null) {
        newTypeDecl = typeDecl;
    } else {
        astRoot = ASTResolving.createQuickFixAST(getCompilationUnit(), null);
        newTypeDecl = astRoot.findDeclaringNode(fSenderBinding.getKey());
    }
    createImportRewrite(astRoot);

    if (newTypeDecl != null) {
        ASTRewrite rewrite = ASTRewrite.create(astRoot.getAST());

        ChildListPropertyDescriptor property = ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
        List<BodyDeclaration> members = ASTNodes.getBodyDeclarations(newTypeDecl);

        int insertIndex = members.size();
        ListRewrite listRewriter = rewrite.getListRewrite(newTypeDecl, property);

        isGetter = true;
        MethodDeclaration newStub = getStub(rewrite, newTypeDecl);
        listRewriter.insertAt(newStub, insertIndex, null);

        isGetter = false;
        newStub = getStub(rewrite, newTypeDecl);
        listRewriter.insertAt(newStub, insertIndex + 1, null);

        return rewrite;
    }
    return null;
}
项目:eclipse.jdt.ls    文件:AddArgumentCorrectionProposal.java   
@Override
protected ASTRewrite getRewrite() {
    AST ast= fCallerNode.getAST();
    ASTRewrite rewrite= ASTRewrite.create(ast);
    ChildListPropertyDescriptor property= getProperty();

    for (int i= 0; i < fInsertIndexes.length; i++) {
        int idx= fInsertIndexes[i];
        String key= "newarg_" + i; //$NON-NLS-1$
        Expression newArg= evaluateArgumentExpressions(ast, fParamTypes[idx], key);
        ListRewrite listRewriter= rewrite.getListRewrite(fCallerNode, property);
        listRewriter.insertAt(newArg, idx, null);
    }
    return rewrite;
}
项目:eclipse.jdt.ls    文件:AddArgumentCorrectionProposal.java   
private ChildListPropertyDescriptor getProperty() {
    List<StructuralPropertyDescriptor> list= fCallerNode.structuralPropertiesForType();
    for (int i= 0; i < list.size(); i++) {
        StructuralPropertyDescriptor curr= list.get(i);
        if (curr.isChildListProperty() && "arguments".equals(curr.getId())) { //$NON-NLS-1$
            return (ChildListPropertyDescriptor) curr;
        }
    }
    return null;

}
项目:eclipse.jdt.ls    文件:NewVariableCorrectionProposal.java   
private ASTRewrite doAddField(CompilationUnit astRoot) {
    SimpleName node= fOriginalNode;
    boolean isInDifferentCU= false;

    ASTNode newTypeDecl= astRoot.findDeclaringNode(fSenderBinding);
    if (newTypeDecl == null) {
        astRoot= ASTResolving.createQuickFixAST(getCompilationUnit(), null);
        newTypeDecl= astRoot.findDeclaringNode(fSenderBinding.getKey());
        isInDifferentCU= true;
    }
    ImportRewrite imports= createImportRewrite(astRoot);
    ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(ASTResolving.findParentBodyDeclaration(node), imports);

    if (newTypeDecl != null) {
        AST ast= newTypeDecl.getAST();

        ASTRewrite rewrite= ASTRewrite.create(ast);

        VariableDeclarationFragment fragment= ast.newVariableDeclarationFragment();
        fragment.setName(ast.newSimpleName(node.getIdentifier()));

        Type type= evaluateVariableType(ast, imports, importRewriteContext, fSenderBinding, TypeLocation.FIELD);

        FieldDeclaration newDecl= ast.newFieldDeclaration(fragment);
        newDecl.setType(type);
        newDecl.modifiers().addAll(ASTNodeFactory.newModifiers(ast, evaluateFieldModifiers(newTypeDecl)));

        if (fSenderBinding.isInterface() || fVariableKind == CONST_FIELD) {
            fragment.setInitializer(ASTNodeFactory.newDefaultExpression(ast, type, 0));
        }

        ChildListPropertyDescriptor property= ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
        List<BodyDeclaration> decls= ASTNodes.<BodyDeclaration>getChildListProperty(newTypeDecl, property);

        int maxOffset= isInDifferentCU ? -1 : node.getStartPosition();

        int insertIndex= findFieldInsertIndex(decls, newDecl, maxOffset);

        ListRewrite listRewriter= rewrite.getListRewrite(newTypeDecl, property);
        listRewriter.insertAt(newDecl, insertIndex, null);

        return rewrite;
    }
    return null;
}
项目:eclipse.jdt.ls    文件:AbstractMethodCorrectionProposal.java   
@Override
protected ASTRewrite getRewrite() throws CoreException {
    CompilationUnit astRoot= ASTResolving.findParentCompilationUnit(fNode);
    ASTNode typeDecl= astRoot.findDeclaringNode(fSenderBinding);
    ASTNode newTypeDecl= null;
    boolean isInDifferentCU;
    if (typeDecl != null) {
        isInDifferentCU= false;
        newTypeDecl= typeDecl;
    } else {
        isInDifferentCU= true;
        astRoot= ASTResolving.createQuickFixAST(getCompilationUnit(), null);
        newTypeDecl= astRoot.findDeclaringNode(fSenderBinding.getKey());
    }
    createImportRewrite(astRoot);

    if (newTypeDecl != null) {
        ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST());

        MethodDeclaration newStub= getStub(rewrite, newTypeDecl);

        ChildListPropertyDescriptor property= ASTNodes.getBodyDeclarationsProperty(newTypeDecl);
        List<BodyDeclaration> members= ASTNodes.getBodyDeclarations(newTypeDecl);

        int insertIndex;
        if (isConstructor()) {
            insertIndex= findConstructorInsertIndex(members);
        } else if (!isInDifferentCU) {
            insertIndex= findMethodInsertIndex(members, fNode.getStartPosition());
        } else {
            insertIndex= members.size();
        }
        ListRewrite listRewriter= rewrite.getListRewrite(newTypeDecl, property);
        listRewriter.insertAt(newStub, insertIndex, null);

        return rewrite;
    }
    return null;
}
项目:code    文件:SaveAnnotations.java   
@Override
/**
 * Annotate local variables by visiting the enclosing statement.
 * 
 * Handles both VariableDeclarationStatement and VariableDeclarationExpression
 */
public boolean visit(VariableDeclarationFragment varDecl) {
    ASTNode parent = varDecl.getParent();
    Type declaredType = null;
    List parentMods = null;
    if(parent instanceof VariableDeclarationStatement ) {
        VariableDeclarationStatement varDeclStmt = (VariableDeclarationStatement)parent;
        parent = varDeclStmt;
        declaredType = varDeclStmt.getType();
        parentMods = varDeclStmt.modifiers();
    }
    else if (parent instanceof VariableDeclarationExpression ) {
        VariableDeclarationExpression varDeclExpr = (VariableDeclarationExpression)parent;
        parent = varDeclExpr;
        declaredType = varDeclExpr.getType();
        // Not allowed to call varExpr.modifiers();
        parentMods = null;
    }
    else {
        parent = null;
        // We handle FieldDeclaration elsewhere...
        return false;
    }

    ITypeBinding type = declaredType.resolveBinding();
    // XXX. Why would type be null here? Need to investigate.
    if (type != null && !type.isPrimitive()) {

        String annotation = "lent"; // XXX. Bad hard-coded default. What about <p>?
        if (HARD_CODE_STATICS && isStaticScope(parent)) {
            annotation = "shared<shared>";
        }
        else {
            annotation = strategy.getAnnotationForLocalVariable(varDecl);
        }

        ChildListPropertyDescriptor property = parent instanceof VariableDeclarationStatement ? 
                    VariableDeclarationStatement.MODIFIERS2_PROPERTY
                    : VariableDeclarationExpression.MODIFIERS2_PROPERTY;

        SingleMemberAnnotation currentAnnotation = getCurrentAnnotation(parentMods);
        if (currentAnnotation == null) {
            setVariableAnnotation2(parent, annotation, property);
        }
        else {
            updateVariableAnnotation2(parent, annotation, currentAnnotation, property);
        }       


        // XXX. Lookup enclosing type declaration from local variable
        String srcType = type.getQualifiedName();
        String dstType = Utils.getEnclosingTypeName(varDecl);
        // XXX. Come up with a better key
        trackChanges(varDecl.toString(), annotation, getValue(currentAnnotation), CSVConst.VARIABLE, srcType, dstType);

    }
    return super.visit(varDecl);
}
项目:code    文件:SaveAnnotations.java   
@Override
/**
 * Annotate local variables by visiting the enclosing statement.
 * 
 * Handles both VariableDeclarationStatement and VariableDeclarationExpression
 */
public boolean visit(VariableDeclarationFragment varDecl) {
    ASTNode parent = varDecl.getParent();
    Type declaredType = null;
    List parentMods = null;
    if(parent instanceof VariableDeclarationStatement ) {
        VariableDeclarationStatement varDeclStmt = (VariableDeclarationStatement)parent;
        parent = varDeclStmt;
        declaredType = varDeclStmt.getType();
        parentMods = varDeclStmt.modifiers();
    }
    else if (parent instanceof VariableDeclarationExpression ) {
        VariableDeclarationExpression varDeclExpr = (VariableDeclarationExpression)parent;
        parent = varDeclExpr;
        declaredType = varDeclExpr.getType();
        // Not allowed to call varExpr.modifiers();
        parentMods = null;
    }
    else {
        parent = null;
        // We handle FieldDeclaration elsewhere...
        return false;
    }

    ITypeBinding type = declaredType.resolveBinding();
    // XXX. Why would type be null here? Need to investigate.
    if (type != null && !type.isPrimitive()) {

        String annotation = "lent"; // XXX. Bad hard-coded default. What about <p>?
        if (HARD_CODE_STATICS && isStaticScope(parent)) {
            annotation = "shared<shared>";
        }
        else {
            annotation = strategy.getAnnotationForLocalVariable(varDecl);
        }

        ChildListPropertyDescriptor property = parent instanceof VariableDeclarationStatement ? 
                    VariableDeclarationStatement.MODIFIERS2_PROPERTY
                    : VariableDeclarationExpression.MODIFIERS2_PROPERTY;

        SingleMemberAnnotation currentAnnotation = getCurrentAnnotation(parentMods);
        if (currentAnnotation == null) {
            setVariableAnnotation2(parent, annotation, property);
        }
        else {
            updateVariableAnnotation2(parent, annotation, currentAnnotation, property);
        }       


        // XXX. Lookup enclosing type declaration from local variable
        String srcType = type.getQualifiedName();
        String dstType = Utils.getEnclosingTypeName(varDecl);
        // XXX. Come up with a better key
        trackChanges(varDecl.toString(), annotation, getValue(currentAnnotation), CSVConst.VARIABLE, srcType, dstType);

    }
    return super.visit(varDecl);
}
项目:che    文件:ReplaceRewrite.java   
protected ReplaceRewrite(ASTRewrite rewrite, ASTNode[] nodes) {
  Assert.isNotNull(rewrite);
  Assert.isNotNull(nodes);
  Assert.isTrue(nodes.length > 0);
  fRewrite = rewrite;
  fToReplace = nodes;
  fDescriptor = fToReplace[0].getLocationInParent();
  if (nodes.length > 1) {
    Assert.isTrue(fDescriptor instanceof ChildListPropertyDescriptor);
  }
}
项目:che    文件:DimensionRewrite.java   
/**
 * Removes all children in <code>node</code>'s <code>childListProperty</code>.
 *
 * @param node ASTNode
 * @param childListProperty child list property
 * @param rewrite rewrite that removes the nodes
 * @param editGroup the edit group in which to collect the corresponding text edits, or null if
 *     ungrouped
 */
public static void removeAllChildren(
    ASTNode node,
    ChildListPropertyDescriptor childListProperty,
    ASTRewrite rewrite,
    TextEditGroup editGroup) {
  ListRewrite listRewrite = rewrite.getListRewrite(node, childListProperty);
  @SuppressWarnings("unchecked")
  List<? extends ASTNode> children =
      (List<? extends ASTNode>) node.getStructuralProperty(childListProperty);
  for (ASTNode child : children) {
    listRewrite.remove(child, editGroup);
  }
}
项目:che    文件:UnusedCodeFix.java   
private void splitUpDeclarations(
    ASTRewrite rewrite,
    TextEditGroup group,
    VariableDeclarationFragment frag,
    VariableDeclarationStatement originalStatement,
    List<Expression> sideEffects) {
  if (sideEffects.size() > 0) {
    ListRewrite statementRewrite =
        rewrite.getListRewrite(
            originalStatement.getParent(),
            (ChildListPropertyDescriptor) originalStatement.getLocationInParent());

    Statement previousStatement = originalStatement;
    for (int i = 0; i < sideEffects.size(); i++) {
      Expression sideEffect = sideEffects.get(i);
      Expression movedInit = (Expression) rewrite.createMoveTarget(sideEffect);
      ExpressionStatement wrapped = rewrite.getAST().newExpressionStatement(movedInit);
      statementRewrite.insertAfter(wrapped, previousStatement, group);
      previousStatement = wrapped;
    }

    VariableDeclarationStatement newDeclaration = null;
    List<VariableDeclarationFragment> fragments = originalStatement.fragments();
    int fragIndex = fragments.indexOf(frag);
    ListIterator<VariableDeclarationFragment> fragmentIterator =
        fragments.listIterator(fragIndex + 1);
    while (fragmentIterator.hasNext()) {
      VariableDeclarationFragment currentFragment = fragmentIterator.next();
      VariableDeclarationFragment movedFragment =
          (VariableDeclarationFragment) rewrite.createMoveTarget(currentFragment);
      if (newDeclaration == null) {
        newDeclaration = rewrite.getAST().newVariableDeclarationStatement(movedFragment);
        Type copiedType = (Type) rewrite.createCopyTarget(originalStatement.getType());
        newDeclaration.setType(copiedType);
      } else {
        newDeclaration.fragments().add(movedFragment);
      }
    }
    if (newDeclaration != null) {
      statementRewrite.insertAfter(newDeclaration, previousStatement, group);
      if (originalStatement.fragments().size() == newDeclaration.fragments().size() + 1) {
        rewrite.remove(originalStatement, group);
      }
    }
  }
}
项目:che    文件:DelegateCreator.java   
private ChildListPropertyDescriptor getTypeBodyDeclarationsProperty() {
  ASTNode parent = fDeclaration.getParent();

  if (parent instanceof AbstractTypeDeclaration)
    return ((AbstractTypeDeclaration) parent).getBodyDeclarationsProperty();
  else if (parent instanceof AnonymousClassDeclaration)
    return AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY;

  Assert.isTrue(false);
  return null;
}