private void removeVariableWithInitializer(ASTRewrite rewrite, ASTNode initializerNode, ASTNode statementNode) { ArrayList sideEffectNodes= new ArrayList(); initializerNode.accept(new SideEffectFinder(sideEffectNodes)); int nSideEffects= sideEffectNodes.size(); if (nSideEffects == 0) { if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) { rewrite.replace(statementNode, rewrite.getAST().newBlock(), null); } else { rewrite.remove(statementNode, null); } } else { // do nothing yet } }
private void removeVariableWithInitializer(ASTRewrite rewrite, ASTNode initializerNode, ASTNode statementNode) { ArrayList<Expression> sideEffectNodes= new ArrayList<>(); initializerNode.accept(new SideEffectFinder(sideEffectNodes)); int nSideEffects= sideEffectNodes.size(); if (nSideEffects == 0) { if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) { rewrite.replace(statementNode, rewrite.getAST().newBlock(), null); } else { rewrite.remove(statementNode, null); } } else { // do nothing yet } }
private void removeVariableWithInitializer(ASTRewrite rewrite, ASTNode initializerNode, ASTNode statementNode) { ArrayList<Expression> sideEffectNodes= new ArrayList<>(); initializerNode.accept(new SideEffectFinder(sideEffectNodes)); int nSideEffects= sideEffectNodes.size(); if (nSideEffects == 0) { if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) { rewrite.replace(statementNode, rewrite.getAST().newBlock(), null); } else { rewrite.remove(statementNode, null); } } else { // do nothing yet } }
private void removeStatement(ASTRewrite rewrite, ASTNode statementNode, TextEditGroup group) { if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) { rewrite.replace(statementNode, rewrite.getAST().newBlock(), group); } else { rewrite.remove(statementNode, group); } }
private void removeStatement(ASTRewrite rewrite, ASTNode statementNode, TextEditGroup group) { if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) { rewrite.replace(statementNode, rewrite.getAST().newBlock(), group); } else { rewrite.remove(statementNode, group); } }
private void removeStatement(ASTRewrite rewrite, ASTNode statementNode, TextEditGroup group) { if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) { rewrite.replace(statementNode, rewrite.getAST().newBlock(), group); } else { rewrite.remove(statementNode, group); } }
private static boolean isNotInBlock(ASTNode parent) { ASTNode statement= parent.getParent(); boolean isStatement= statement.getNodeType() != ASTNode.EXPRESSION_STATEMENT; ASTNode block= statement.getParent(); boolean isBlock= block.getNodeType() == ASTNode.BLOCK || block.getNodeType() == ASTNode.SWITCH_STATEMENT; boolean isControlStatemenBody= ASTNodes.isControlStatementBody(statement.getLocationInParent()); return isStatement || !(isBlock || isControlStatemenBody); }
private static boolean isNotInBlock(ASTNode parent) { ASTNode statement= parent.getParent(); boolean isStatement= statement.getNodeType() != ASTNode.EXPRESSION_STATEMENT; ASTNode block= statement.getParent(); boolean isBlock= block.getNodeType() == ASTNode.BLOCK || block.getNodeType() == ASTNode.SWITCH_STATEMENT; boolean isControlStatemenBody= ASTNodes.isControlStatementBody(statement.getLocationInParent()); return isStatement || !(isBlock || isControlStatemenBody); }
private static void removeCatchBlock(ASTRewrite rewrite, CatchClause catchClause) { TryStatement tryStatement = (TryStatement) catchClause.getParent(); if (tryStatement.catchClauses().size() > 1 || tryStatement.getFinally() != null || !tryStatement.resources().isEmpty()) { rewrite.remove(catchClause, null); } else { Block block = tryStatement.getBody(); List<Statement> statements = block.statements(); int nStatements = statements.size(); if (nStatements == 1) { ASTNode first = statements.get(0); rewrite.replace(tryStatement, rewrite.createCopyTarget(first), null); } else if (nStatements > 1) { ListRewrite listRewrite = rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY); ASTNode first = statements.get(0); ASTNode last = statements.get(statements.size() - 1); ASTNode newStatement = listRewrite.createCopyTarget(first, last); if (ASTNodes.isControlStatementBody(tryStatement.getLocationInParent())) { Block newBlock = rewrite.getAST().newBlock(); newBlock.statements().add(newStatement); newStatement = newBlock; } rewrite.replace(tryStatement, newStatement, null); } else { rewrite.remove(tryStatement, null); } } }
private static void removeCatchBlock(ASTRewrite rewrite, CatchClause catchClause) { TryStatement tryStatement= (TryStatement) catchClause.getParent(); if (tryStatement.catchClauses().size() > 1 || tryStatement.getFinally() != null || !tryStatement.resources().isEmpty()) { rewrite.remove(catchClause, null); } else { Block block= tryStatement.getBody(); List<Statement> statements= block.statements(); int nStatements= statements.size(); if (nStatements == 1) { ASTNode first= statements.get(0); rewrite.replace(tryStatement, rewrite.createCopyTarget(first), null); } else if (nStatements > 1) { ListRewrite listRewrite= rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY); ASTNode first= statements.get(0); ASTNode last= statements.get(statements.size() - 1); ASTNode newStatement= listRewrite.createCopyTarget(first, last); if (ASTNodes.isControlStatementBody(tryStatement.getLocationInParent())) { Block newBlock= rewrite.getAST().newBlock(); newBlock.statements().add(newStatement); newStatement= newBlock; } rewrite.replace(tryStatement, newStatement, null); } else { rewrite.remove(tryStatement, null); } } }
private static void removeCatchBlock(ASTRewrite rewrite, CatchClause catchClause) { TryStatement tryStatement= (TryStatement) catchClause.getParent(); if (tryStatement.catchClauses().size() > 1 || tryStatement.getFinally() != null || !tryStatement.resources().isEmpty()) { rewrite.remove(catchClause, null); } else { Block block= tryStatement.getBody(); List<Statement> statements= block.statements(); int nStatements= statements.size(); if (nStatements == 1) { ASTNode first= statements.get(0); rewrite.replace(tryStatement, rewrite.createCopyTarget(first), null); } else if (nStatements > 1) { ListRewrite listRewrite= rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY); ASTNode first= statements.get(0); ASTNode last= statements.get(statements.size() - 1); ASTNode newStatement= listRewrite.createCopyTarget(first, last); if (ASTNodes.isControlStatementBody(tryStatement.getLocationInParent())) { Block newBlock= rewrite.getAST().newBlock(); newBlock.statements().add(newStatement); newStatement= newBlock; } rewrite.replace(tryStatement, newStatement, null); } else { rewrite.remove(tryStatement, null); } } }
private static void removeCatchBlock(ASTRewrite rewrite, CatchClause catchClause) { TryStatement tryStatement= (TryStatement) catchClause.getParent(); if (tryStatement.catchClauses().size() > 1 || tryStatement.getFinally() != null) { rewrite.remove(catchClause, null); } else { Block block= tryStatement.getBody(); List statements= block.statements(); int nStatements= statements.size(); if (nStatements == 1) { ASTNode first= (ASTNode) statements.get(0); rewrite.replace(tryStatement, rewrite.createCopyTarget(first), null); } else if (nStatements > 1) { ListRewrite listRewrite= rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY); ASTNode first= (ASTNode) statements.get(0); ASTNode last= (ASTNode) statements.get(statements.size() - 1); ASTNode newStatement= listRewrite.createCopyTarget(first, last); if (ASTNodes.isControlStatementBody(tryStatement.getLocationInParent())) { Block newBlock= rewrite.getAST().newBlock(); newBlock.statements().add(newStatement); newStatement= newBlock; } rewrite.replace(tryStatement, newStatement, null); } else { rewrite.remove(tryStatement, null); } } }
private void removeVariableWithInitializer(ASTRewrite rewrite, ASTNode initializerNode, ASTNode statementNode, TextEditGroup group) { boolean performRemove= fForceRemove; if (!performRemove) { ArrayList sideEffectNodes= new ArrayList(); initializerNode.accept(new SideEffectFinder(sideEffectNodes)); performRemove= sideEffectNodes.isEmpty(); } if (performRemove) { if (ASTNodes.isControlStatementBody(statementNode.getLocationInParent())) { rewrite.replace(statementNode, rewrite.getAST().newBlock(), group); } else { rewrite.remove(statementNode, group); } fRemovedAssignmentsCount++; } else { ASTNode initNode = rewrite.createMoveTarget(initializerNode); ExpressionStatement statement = rewrite.getAST().newExpressionStatement((Expression) initNode); rewrite.replace(statementNode, statement, null); fAlteredAssignmentsCount++; } }
private void replaceSelectedExpressionWithTempDeclaration() throws CoreException { ASTRewrite rewrite= fCURewrite.getASTRewrite(); Expression selectedExpression= getSelectedExpression().getAssociatedExpression(); // whole expression selected Expression initializer= (Expression) rewrite.createMoveTarget(selectedExpression); ASTNode replacement= createTempDeclaration(initializer); // creates a VariableDeclarationStatement ExpressionStatement parent= (ExpressionStatement) selectedExpression.getParent(); if (ASTNodes.isControlStatementBody(parent.getLocationInParent())) { Block block= rewrite.getAST().newBlock(); block.statements().add(replacement); replacement= block; } rewrite.replace(parent, replacement, fCURewrite.createGroupDescription(RefactoringCoreMessages.ExtractTempRefactoring_declare_local_variable)); }
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); } } } }
@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); } } } }
@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); } } } }
@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); } } } }
private void replaceSelectedExpressionWithTempDeclaration() throws CoreException { ASTRewrite rewrite= fCURewrite.getASTRewrite(); Expression selectedExpression= getSelectedExpression().getAssociatedExpression(); // whole expression selected Expression initializer= (Expression) rewrite.createMoveTarget(selectedExpression); VariableDeclarationStatement tempDeclaration= createTempDeclaration(initializer); ASTNode replacement; ASTNode parent= selectedExpression.getParent(); boolean isParentLambda= parent instanceof LambdaExpression; AST ast= rewrite.getAST(); if (isParentLambda) { Block blockBody= ast.newBlock(); blockBody.statements().add(tempDeclaration); if (!Bindings.isVoidType(((LambdaExpression) parent).resolveMethodBinding().getReturnType())) { List<VariableDeclarationFragment> fragments= tempDeclaration.fragments(); SimpleName varName= fragments.get(0).getName(); ReturnStatement returnStatement= ast.newReturnStatement(); returnStatement.setExpression(ast.newSimpleName(varName.getIdentifier())); blockBody.statements().add(returnStatement); } replacement= blockBody; } else if (ASTNodes.isControlStatementBody(parent.getLocationInParent())) { Block block= ast.newBlock(); block.statements().add(tempDeclaration); replacement= block; } else { replacement= tempDeclaration; } ASTNode replacee= isParentLambda || !ASTNodes.hasSemicolon((ExpressionStatement) parent, fCu) ? selectedExpression : parent; rewrite.replace(replacee, replacement, fCURewrite.createGroupDescription(RefactoringCoreMessages.ExtractTempRefactoring_declare_local_variable)); }
private void replaceSelectedExpressionWithTempDeclaration() throws CoreException { ASTRewrite rewrite = fCURewrite.getASTRewrite(); Expression selectedExpression = getSelectedExpression().getAssociatedExpression(); // whole expression selected Expression initializer = (Expression) rewrite.createMoveTarget(selectedExpression); VariableDeclarationStatement tempDeclaration = createTempDeclaration(initializer); ASTNode replacement; ASTNode parent = selectedExpression.getParent(); boolean isParentLambda = parent instanceof LambdaExpression; AST ast = rewrite.getAST(); if (isParentLambda) { Block blockBody = ast.newBlock(); blockBody.statements().add(tempDeclaration); if (!Bindings.isVoidType(((LambdaExpression) parent).resolveMethodBinding().getReturnType())) { List<VariableDeclarationFragment> fragments = tempDeclaration.fragments(); SimpleName varName = fragments.get(0).getName(); ReturnStatement returnStatement = ast.newReturnStatement(); returnStatement.setExpression(ast.newSimpleName(varName.getIdentifier())); blockBody.statements().add(returnStatement); } replacement = blockBody; } else if (ASTNodes.isControlStatementBody(parent.getLocationInParent())) { Block block = ast.newBlock(); block.statements().add(tempDeclaration); replacement = block; } else { replacement = tempDeclaration; } ASTNode replacee = isParentLambda || !ASTNodes.hasSemicolon((ExpressionStatement) parent, fCu) ? selectedExpression : parent; rewrite.replace(replacee, replacement, fCURewrite.createGroupDescription(RefactoringCoreMessages.ExtractTempRefactoring_declare_local_variable)); }