| /******************************************************************************* |
| * Copyright (c) 2000, 2015 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.core.tests.rewrite.describing; |
| |
| import java.util.List; |
| |
| import junit.framework.Test; |
| |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.dom.AST; |
| import org.eclipse.jdt.core.dom.ASTNode; |
| import org.eclipse.jdt.core.dom.Block; |
| import org.eclipse.jdt.core.dom.CastExpression; |
| import org.eclipse.jdt.core.dom.CompilationUnit; |
| import org.eclipse.jdt.core.dom.Expression; |
| import org.eclipse.jdt.core.dom.ExpressionStatement; |
| import org.eclipse.jdt.core.dom.ForStatement; |
| import org.eclipse.jdt.core.dom.IfStatement; |
| import org.eclipse.jdt.core.dom.MethodDeclaration; |
| import org.eclipse.jdt.core.dom.MethodInvocation; |
| import org.eclipse.jdt.core.dom.ParenthesizedExpression; |
| import org.eclipse.jdt.core.dom.PrefixExpression; |
| import org.eclipse.jdt.core.dom.ReturnStatement; |
| import org.eclipse.jdt.core.dom.Statement; |
| import org.eclipse.jdt.core.dom.Type; |
| import org.eclipse.jdt.core.dom.TypeDeclaration; |
| import org.eclipse.jdt.core.dom.VariableDeclarationFragment; |
| import org.eclipse.jdt.core.dom.VariableDeclarationStatement; |
| import org.eclipse.jdt.core.dom.WhileStatement; |
| import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; |
| import org.eclipse.jdt.core.dom.rewrite.ListRewrite; |
| |
| @SuppressWarnings({"rawtypes", "unchecked"}) |
| public class ASTRewritingMoveCodeTest extends ASTRewritingTest { |
| |
| public ASTRewritingMoveCodeTest(String name) { |
| super(name); |
| } |
| public ASTRewritingMoveCodeTest(String name, int apiLevel) { |
| super(name, apiLevel); |
| } |
| |
| public static Test suite() { |
| return createSuite(ASTRewritingMoveCodeTest.class); |
| } |
| |
| public void testMove_only_2_3_4() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" int x;\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| List bodyDecls= type.bodyDeclarations(); |
| |
| ASTNode first= (ASTNode) bodyDecls.get(0); |
| ASTNode placeholder= rewrite.createMoveTarget(first); |
| |
| rewrite.getListRewrite(type, TypeDeclaration.BODY_DECLARATIONS_PROPERTY).insertLast(placeholder, null); |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append(" int x;\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testMoveDeclSameLevelCD() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // move inner type to the end of the type & move, copy statements from constructor to method |
| |
| List members= type.bodyDeclarations(); |
| assertTrue("Has declarations", !members.isEmpty()); |
| |
| assertTrue("Cannot find inner class", members.get(0) instanceof TypeDeclaration); |
| TypeDeclaration innerType= (TypeDeclaration) members.get(0); |
| |
| rewrite.remove(innerType, null); |
| ASTNode movedNode= rewrite.createCopyTarget(innerType); |
| |
| rewrite.getListRewrite(type, TypeDeclaration.BODY_DECLARATIONS_PROPERTY).insertLast(movedNode, null); |
| |
| Statement toMove; |
| Statement toCopy; |
| { |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "E"); |
| assertTrue("Cannot find Constructor E", methodDecl != null); |
| Block body= methodDecl.getBody(); |
| assertTrue("No body", body != null); |
| List statements= body.statements(); |
| assertTrue("Not expected number of statements", statements.size() == 4); |
| |
| toMove= (Statement) statements.get(1); |
| toCopy= (Statement) statements.get(3); |
| |
| rewrite.remove(toMove, null); |
| } |
| { |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "gee"); |
| assertTrue("Cannot find gee()", methodDecl != null); |
| Block body= methodDecl.getBody(); |
| assertTrue("No body", body != null); |
| List statements= body.statements(); |
| assertTrue("Has statements", statements.isEmpty()); |
| |
| ASTNode insertNodeForMove= rewrite.createCopyTarget(toMove); |
| ASTNode insertNodeForCopy= rewrite.createCopyTarget(toCopy); |
| |
| rewrite.getListRewrite(body, Block.STATEMENTS_PROPERTY).insertLast(insertNodeForCopy, null); |
| rewrite.getListRewrite(body, Block.STATEMENTS_PROPERTY).insertLast(insertNodeForMove, null); |
| |
| } |
| } |
| |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" }\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testMoveDeclSameLevel() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // move inner type to the end of the type & move, copy statements from constructor to method |
| |
| List members= type.bodyDeclarations(); |
| assertTrue("Has declarations", !members.isEmpty()); |
| |
| assertTrue("Cannot find inner class", members.get(0) instanceof TypeDeclaration); |
| TypeDeclaration innerType= (TypeDeclaration) members.get(0); |
| |
| ASTNode movedNode= rewrite.createMoveTarget(innerType); |
| rewrite.getListRewrite(type, TypeDeclaration.BODY_DECLARATIONS_PROPERTY).insertLast(movedNode, null); |
| |
| |
| Statement toMove; |
| Statement toCopy; |
| { |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "E"); |
| assertTrue("Cannot find Constructor E", methodDecl != null); |
| Block body= methodDecl.getBody(); |
| assertTrue("No body", body != null); |
| List statements= body.statements(); |
| assertTrue("Not expected number of statements", statements.size() == 4); |
| |
| toMove= (Statement) statements.get(1); |
| toCopy= (Statement) statements.get(3); |
| } |
| { |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "gee"); |
| assertTrue("Cannot find gee()", methodDecl != null); |
| Block body= methodDecl.getBody(); |
| assertTrue("No body", body != null); |
| List statements= body.statements(); |
| assertTrue("Has statements", statements.isEmpty()); |
| |
| ASTNode insertNodeForMove= rewrite.createMoveTarget(toMove); |
| ASTNode insertNodeForCopy= rewrite.createCopyTarget(toCopy); |
| |
| rewrite.getListRewrite(body, Block.STATEMENTS_PROPERTY).insertLast(insertNodeForCopy, null); |
| rewrite.getListRewrite(body, Block.STATEMENTS_PROPERTY).insertLast(insertNodeForMove, null); |
| } |
| } |
| |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" }\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| |
| public void testMoveDeclDifferentLevelCD_only_2_3_4() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { |
| List members= type.bodyDeclarations(); |
| assertTrue("Has declarations", !members.isEmpty()); |
| |
| assertTrue("Cannot find inner class", members.get(0) instanceof TypeDeclaration); |
| TypeDeclaration innerType= (TypeDeclaration) members.get(0); |
| |
| List innerMembers= innerType.bodyDeclarations(); |
| assertTrue("Not expected number of inner members", innerMembers.size() == 1); |
| |
| { // move outer as inner of inner. |
| TypeDeclaration outerType= findTypeDeclaration(astRoot, "G"); |
| assertTrue("G not found", outerType != null); |
| |
| rewrite.remove(outerType, null); |
| |
| ASTNode insertNodeForCopy= rewrite.createCopyTarget(outerType); |
| |
| rewrite.getListRewrite(innerType, TypeDeclaration.BODY_DECLARATIONS_PROPERTY).insertLast(insertNodeForCopy, null); |
| |
| |
| } |
| { // copy method of inner to main type |
| MethodDeclaration methodDecl= (MethodDeclaration) innerMembers.get(0); |
| ASTNode insertNodeForMove= rewrite.createCopyTarget(methodDecl); |
| |
| rewrite.getListRewrite(type, TypeDeclaration.BODY_DECLARATIONS_PROPERTY).insertLast(insertNodeForMove, null); |
| |
| } |
| { // nest body of constructor in a while statement |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "E"); |
| assertTrue("Cannot find Constructor E", methodDecl != null); |
| |
| Block body= methodDecl.getBody(); |
| |
| WhileStatement whileStatement= ast.newWhileStatement(); |
| whileStatement.setExpression(ast.newBooleanLiteral(true)); |
| |
| Statement insertNodeForCopy= (Statement) rewrite.createCopyTarget(body); |
| |
| whileStatement.setBody(insertNodeForCopy); // set existing body |
| |
| Block newBody= ast.newBlock(); |
| List newStatements= newBody.statements(); |
| newStatements.add(whileStatement); |
| |
| rewrite.replace(body, newBody, null); |
| } |
| } |
| |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append("\n"); |
| buf.append(" interface G {\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" while (true) {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testMoveDeclDifferentLevel_only_2_3_4() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { |
| List members= type.bodyDeclarations(); |
| assertTrue("Has declarations", !members.isEmpty()); |
| |
| assertTrue("Cannot find inner class", members.get(0) instanceof TypeDeclaration); |
| TypeDeclaration innerType= (TypeDeclaration) members.get(0); |
| |
| List innerMembers= innerType.bodyDeclarations(); |
| assertTrue("Not expected number of inner members", innerMembers.size() == 1); |
| |
| { // move outer as inner of inner. |
| TypeDeclaration outerType= findTypeDeclaration(astRoot, "G"); |
| assertTrue("G not found", outerType != null); |
| |
| ASTNode insertNodeForCopy= rewrite.createMoveTarget(outerType); |
| |
| rewrite.getListRewrite(innerType, TypeDeclaration.BODY_DECLARATIONS_PROPERTY).insertLast(insertNodeForCopy, null); |
| } |
| { // copy method of inner to main type |
| MethodDeclaration methodDecl= (MethodDeclaration) innerMembers.get(0); |
| ASTNode insertNodeForMove= rewrite.createCopyTarget(methodDecl); |
| |
| rewrite.getListRewrite(type, TypeDeclaration.BODY_DECLARATIONS_PROPERTY).insertLast(insertNodeForMove, null); |
| } |
| { // nest body of constructor in a while statement |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "E"); |
| assertTrue("Cannot find Constructor E", methodDecl != null); |
| |
| Block body= methodDecl.getBody(); |
| |
| WhileStatement whileStatement= ast.newWhileStatement(); |
| whileStatement.setExpression(ast.newBooleanLiteral(true)); |
| |
| Statement insertNodeForCopy= (Statement) rewrite.createCopyTarget(body); |
| |
| whileStatement.setBody(insertNodeForCopy); // set existing body |
| |
| Block newBody= ast.newBlock(); |
| List newStatements= newBody.statements(); |
| newStatements.add(whileStatement); |
| |
| rewrite.replace(body, newBody, null); |
| } |
| } |
| |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append("\n"); |
| buf.append(" interface G {\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" while (true) {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testMoveStatementsCD() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // move first statments inside an ifstatement, move second statment inside a new while statement |
| // that is in the ifstatement |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "E"); |
| assertTrue("Cannot find Constructor E", methodDecl != null); |
| |
| Block body= methodDecl.getBody(); |
| List statements= body.statements(); |
| |
| assertTrue("Cannot find if statement", statements.get(3) instanceof IfStatement); |
| |
| IfStatement ifStatement= (IfStatement) statements.get(3); |
| |
| Statement insertNodeForCopy1= (Statement) rewrite.createCopyTarget((ASTNode) statements.get(1)); |
| Statement insertNodeForCopy2= (Statement) rewrite.createCopyTarget((ASTNode) statements.get(2)); |
| |
| Block whileBody= ast.newBlock(); |
| |
| WhileStatement whileStatement= ast.newWhileStatement(); |
| whileStatement.setExpression(ast.newBooleanLiteral(true)); |
| whileStatement.setBody(whileBody); |
| |
| List whileBodyStatements= whileBody.statements(); |
| whileBodyStatements.add(insertNodeForCopy2); |
| |
| |
| assertTrue("if statement body not a block", ifStatement.getThenStatement() instanceof Block); |
| |
| |
| Block block= (Block)ifStatement.getThenStatement(); |
| |
| rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY).insertFirst(whileStatement, null); |
| rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY).insertAfter(insertNodeForCopy1, whileStatement, null); |
| |
| rewrite.remove((ASTNode) statements.get(1), null); |
| rewrite.remove((ASTNode) statements.get(2), null); |
| } |
| |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" public static class EInner {\n"); |
| buf.append(" public void xee() {\n"); |
| buf.append(" /* does nothing */\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" while (true) {\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" }\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testMoveStatements() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // move first statments inside an ifstatement, move second statment inside a new while statement |
| // that is in the ifstatement |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "E"); |
| assertTrue("Cannot find Constructor E", methodDecl != null); |
| |
| Block body= methodDecl.getBody(); |
| List statements= body.statements(); |
| |
| assertTrue("Cannot find if statement", statements.get(3) instanceof IfStatement); |
| |
| IfStatement ifStatement= (IfStatement) statements.get(3); |
| |
| Statement insertNodeForCopy1= (Statement) rewrite.createMoveTarget((ASTNode) statements.get(1)); |
| Statement insertNodeForCopy2= (Statement) rewrite.createMoveTarget((ASTNode) statements.get(2)); |
| |
| Block whileBody= ast.newBlock(); |
| |
| WhileStatement whileStatement= ast.newWhileStatement(); |
| whileStatement.setExpression(ast.newBooleanLiteral(true)); |
| whileStatement.setBody(whileBody); |
| |
| List whileBodyStatements= whileBody.statements(); |
| whileBodyStatements.add(insertNodeForCopy2); |
| |
| |
| assertTrue("if statement body not a block", ifStatement.getThenStatement() instanceof Block); |
| |
| Block block= (Block) ifStatement.getThenStatement(); |
| rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY).insertFirst(whileStatement, null); |
| rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY).insertAfter(insertNodeForCopy1, whileStatement, null); |
| } |
| |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E extends Exception implements Runnable, Serializable {\n"); |
| buf.append(" private /* inner comment */ int i;\n"); |
| buf.append(" private int k;\n"); |
| buf.append(" public E() {\n"); |
| buf.append(" super();\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" while (true) {\n"); |
| buf.append(" k= 9;\n"); |
| buf.append(" }\n"); |
| buf.append(" i= 0;\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void gee() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("interface G {\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testCopyFromDeleted() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void goo() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // delete method foo, but copy if statement to goo |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| assertTrue("Cannot find foo", methodDecl != null); |
| |
| rewrite.remove(methodDecl, null); |
| |
| Block body= methodDecl.getBody(); |
| List statements= body.statements(); |
| assertTrue("Cannot find if statement", statements.size() == 1); |
| |
| ASTNode placeHolder= rewrite.createMoveTarget((ASTNode) statements.get(0)); |
| |
| |
| MethodDeclaration methodGoo= findMethodDeclaration(type, "goo"); |
| assertTrue("Cannot find goo", methodGoo != null); |
| |
| rewrite.getListRewrite(methodGoo.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeHolder, null); |
| } |
| |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void goo() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee(); // cool\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testChangesInMoveCD() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee( /* cool */);\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void goo() {\n"); |
| buf.append(" x= 1;\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // replace statement in goo with moved ifStatement from foo. add a node to if statement |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| assertTrue("Cannot find foo", methodDecl != null); |
| |
| List fooStatements= methodDecl.getBody().statements(); |
| assertTrue("Cannot find if statement", fooStatements.size() == 1); |
| |
| // prepare ifStatement to move |
| IfStatement ifStatement= (IfStatement) fooStatements.get(0); |
| rewrite.remove(ifStatement, null); |
| |
| ASTNode placeHolder= rewrite.createCopyTarget(ifStatement); |
| |
| // add return statement to ifStatement block |
| ReturnStatement returnStatement= ast.newReturnStatement(); |
| Block then= (Block) ifStatement.getThenStatement(); |
| rewrite.getListRewrite(then, Block.STATEMENTS_PROPERTY).insertLast(returnStatement, null); |
| |
| // replace statement in goo with moved ifStatement |
| MethodDeclaration methodGoo= findMethodDeclaration(type, "goo"); |
| assertTrue("Cannot find goo", methodGoo != null); |
| |
| List gooStatements= methodGoo.getBody().statements(); |
| assertTrue("Cannot find statement in goo", gooStatements.size() == 1); |
| |
| rewrite.replace((ASTNode) gooStatements.get(0), placeHolder, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append(" public void goo() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee( /* cool */);\n"); |
| buf.append(" return;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testChangesInMove() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee( /* cool */);\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append(" public void goo() {\n"); |
| buf.append(" x= 1;\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // replace statement in goo with moved ifStatement from foo. add a node to if statement |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| assertTrue("Cannot find foo", methodDecl != null); |
| |
| List fooStatements= methodDecl.getBody().statements(); |
| assertTrue("Cannot find if statement", fooStatements.size() == 1); |
| |
| // prepare ifStatement to move |
| IfStatement ifStatement= (IfStatement) fooStatements.get(0); |
| |
| ASTNode placeHolder= rewrite.createMoveTarget(ifStatement); |
| |
| // add return statement to ifStatement block |
| ReturnStatement returnStatement= ast.newReturnStatement(); |
| |
| Block then= (Block) ifStatement.getThenStatement(); |
| rewrite.getListRewrite(then, Block.STATEMENTS_PROPERTY).insertLast(returnStatement, null); |
| |
| |
| // replace statement in goo with moved ifStatement |
| MethodDeclaration methodGoo= findMethodDeclaration(type, "goo"); |
| assertTrue("Cannot find goo", methodGoo != null); |
| |
| List gooStatements= methodGoo.getBody().statements(); |
| assertTrue("Cannot find statement in goo", gooStatements.size() == 1); |
| |
| rewrite.replace((ASTNode) gooStatements.get(0), placeHolder, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append(" public void goo() {\n"); |
| buf.append(" if (System.out == null) {\n"); |
| buf.append(" gee( /* cool */);\n"); |
| buf.append(" return;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testSwapCD() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" goo(xoo(/*hello*/), k * 2);\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // swap the two arguments |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| assertTrue("Cannot find foo", methodDecl != null); |
| |
| List fooStatements= methodDecl.getBody().statements(); |
| assertTrue("More statements than expected", fooStatements.size() == 1); |
| |
| ExpressionStatement statement= (ExpressionStatement) fooStatements.get(0); |
| MethodInvocation invocation= (MethodInvocation) statement.getExpression(); |
| |
| List arguments= invocation.arguments(); |
| assertTrue("More arguments than expected", arguments.size() == 2); |
| |
| ASTNode arg0= (ASTNode) arguments.get(0); |
| ASTNode arg1= (ASTNode) arguments.get(1); |
| |
| ASTNode placeHolder0= rewrite.createCopyTarget(arg0); |
| ASTNode placeHolder1= rewrite.createCopyTarget(arg1); |
| |
| rewrite.replace(arg0, placeHolder1, null); |
| rewrite.replace(arg1, placeHolder0, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" goo(k * 2, xoo(/*hello*/));\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testSwap() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" goo(xoo(/*hello*/), k * 2);\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| |
| { // swap the two arguments |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| assertTrue("Cannot find foo", methodDecl != null); |
| |
| List fooStatements= methodDecl.getBody().statements(); |
| assertTrue("More statements than expected", fooStatements.size() == 1); |
| |
| ExpressionStatement statement= (ExpressionStatement) fooStatements.get(0); |
| MethodInvocation invocation= (MethodInvocation) statement.getExpression(); |
| |
| List arguments= invocation.arguments(); |
| assertTrue("More arguments than expected", arguments.size() == 2); |
| |
| ASTNode arg0= (ASTNode) arguments.get(0); |
| ASTNode arg1= (ASTNode) arguments.get(1); |
| |
| ASTNode placeHolder0= rewrite.createMoveTarget(arg0); |
| ASTNode placeHolder1= rewrite.createMoveTarget(arg1); |
| |
| rewrite.replace(arg0, placeHolder1, null); // replace instead of remove |
| rewrite.replace(arg1, placeHolder0, null); // replace instead of remove |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" goo(k * 2, xoo(/*hello*/));\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| |
| public void testMultipleCopiesOfSameNode() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| List ifStatementBody= ((Block) ifStatement.getThenStatement()).statements(); |
| |
| ASTNode node= (ASTNode) ifStatementBody.get(1); |
| ASTNode placeholder1= rewrite.createCopyTarget(node); |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder1, null); |
| |
| ASTNode placeholder2= rewrite.createCopyTarget(node); |
| rewrite.replace((ASTNode) ifStatementBody.get(0), placeholder2, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testCopyMultipleNodes() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first= (ASTNode) thenStatements.get(0); |
| ASTNode last= (ASTNode) thenStatements.get(1); |
| |
| ASTNode placeholder= listRewrite.createCopyTarget(first, last); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| public void testCopyMultipleNodes0() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first= (ASTNode) thenStatements.get(0); |
| ASTNode second= (ASTNode) thenStatements.get(1); |
| |
| ASTNode placeholder= listRewrite.createCopyTarget(first, second); |
| |
| // replace the first |
| AST ast= astRoot.getAST(); |
| PrefixExpression expression= ast.newPrefixExpression(); |
| expression.setOperand(ast.newSimpleName("i")); |
| expression.setOperator(PrefixExpression.Operator.DECREMENT); |
| ExpressionStatement newStatement= ast.newExpressionStatement(expression); |
| |
| listRewrite.replace(first, newStatement, null); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" --i;\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" --i;\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| |
| public void testCopyMultipleNodes1() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first= (ASTNode) thenStatements.get(0); |
| ASTNode second= (ASTNode) thenStatements.get(1); |
| |
| ASTNode placeholder= listRewrite.createCopyTarget(first, second); |
| |
| // insert between the copied |
| AST ast= astRoot.getAST(); |
| PrefixExpression expression= ast.newPrefixExpression(); |
| expression.setOperand(ast.newSimpleName("i")); |
| expression.setOperator(PrefixExpression.Operator.DECREMENT); |
| ExpressionStatement newStatement= ast.newExpressionStatement(expression); |
| listRewrite.insertAfter(newStatement, first, null); |
| |
| // remove the last |
| listRewrite.remove((ASTNode) thenStatements.get(2), null); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" --i;\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" }\n"); |
| buf.append(" foo();\n"); |
| buf.append(" --i;\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| |
| public void testCopyMultipleNodes2() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo(1);\n"); |
| buf.append(" foo(2); // comment\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode second= (ASTNode) thenStatements.get(1); |
| ASTNode last= (ASTNode) thenStatements.get(2); |
| |
| ASTNode placeholder1= listRewrite.createCopyTarget(second, last); |
| rewrite.replace(ifStatement, placeholder1, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" foo(2); // comment\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| public void testCopyMultipleNodes3() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo(1);\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first= (ASTNode) thenStatements.get(0); |
| ASTNode second= (ASTNode) thenStatements.get(1); |
| ASTNode last= (ASTNode) thenStatements.get(2); |
| |
| ASTNode placeholder1= listRewrite.createCopyTarget(first, second); |
| ASTNode placeholder2= listRewrite.createCopyTarget(first, last); |
| |
| listRewrite.insertAfter(placeholder1, last, null); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder2, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo(1);\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" foo(1);\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" }\n"); |
| buf.append(" foo(1);\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| public void testCopyMultipleNodes4() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo(1);\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first= (ASTNode) thenStatements.get(0); |
| ASTNode second= (ASTNode) thenStatements.get(1); |
| |
| ASTNode last= (ASTNode) thenStatements.get(2); |
| |
| ASTNode placeholder1= listRewrite.createCopyTarget(first, last); |
| ASTNode placeholder2= listRewrite.createCopyTarget(first, second); |
| ASTNode placeholder3= rewrite.createMoveTarget(first); |
| |
| listRewrite.insertAfter(placeholder1, last, null); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder2, null); |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertFirst(placeholder3, null); |
| |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" foo(1);\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" foo(3);\n"); |
| buf.append(" }\n"); |
| buf.append(" foo(2);\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| public void testMultipleCopiesOfSameNodeAndMove() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| List ifStatementBody= ((Block) ifStatement.getThenStatement()).statements(); |
| |
| ASTNode node= (ASTNode) ifStatementBody.get(1); |
| ASTNode placeholder1= rewrite.createCopyTarget(node); |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder1, null); |
| |
| ASTNode placeholder2= rewrite.createCopyTarget(node); |
| rewrite.replace((ASTNode) ifStatementBody.get(0), placeholder2, null); |
| |
| ASTNode placeholder3= rewrite.createMoveTarget(node); |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertFirst(placeholder3, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testMoveMultipleNodes() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first= (ASTNode) thenStatements.get(0); |
| ASTNode last= (ASTNode) thenStatements.get(1); |
| |
| ASTNode placeholder= listRewrite.createMoveTarget(first, last); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" i++;\n"); |
| buf.append(" }\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| public void testMoveMultipleNodes2() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" i--;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first1= (ASTNode) thenStatements.get(0); |
| ASTNode last1= (ASTNode) thenStatements.get(1); |
| |
| ASTNode placeholder1= listRewrite.createMoveTarget(first1, last1); |
| |
| ASTNode first2= (ASTNode) thenStatements.get(2); |
| ASTNode last2= (ASTNode) thenStatements.get(3); |
| |
| ASTNode placeholder2= listRewrite.createMoveTarget(first2, last2); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertFirst(placeholder1, null); |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertLast(placeholder2, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" }\n"); |
| buf.append(" i++;\n"); |
| buf.append(" i--;\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| |
| public void testMoveMultipleNodes3() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" i--;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first= (ASTNode) thenStatements.get(0); |
| ASTNode between= (ASTNode) thenStatements.get(1); |
| ASTNode last= (ASTNode) thenStatements.get(3); |
| |
| ASTNode placeholder1= listRewrite.createMoveTarget(first, last); |
| ASTNode placeholder2= listRewrite.createCopyTarget(first, between); |
| |
| rewrite.replace(ifStatement, placeholder1, null); |
| |
| rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY).insertFirst(placeholder2, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" i--;\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| public void testMoveMultipleNodes4() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" if (i == 0) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i++;\n"); |
| buf.append(" i--;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| IfStatement ifStatement= (IfStatement) statements.get(0); |
| Block thenBlock= (Block) ifStatement.getThenStatement(); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(thenBlock, Block.STATEMENTS_PROPERTY); |
| List thenStatements= thenBlock.statements(); |
| ASTNode first1= (ASTNode) thenStatements.get(0); |
| ASTNode last1= (ASTNode) thenStatements.get(2); |
| |
| listRewrite.createMoveTarget(first1, last1); |
| |
| ASTNode first2= (ASTNode) thenStatements.get(2); |
| ASTNode last2= (ASTNode) thenStatements.get(3); |
| |
| try { |
| listRewrite.createMoveTarget(first2, last2); |
| assertFalse(true); |
| } catch (IllegalArgumentException e) { |
| // overlapping move ranges |
| } |
| } |
| } |
| |
| |
| public void testReplaceMoveMultiple() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i--;\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| ASTNode first= (ASTNode) statements.get(0); |
| ASTNode last= (ASTNode) statements.get(2); |
| |
| ListRewrite listRewrite= rewrite.getListRewrite(methodDecl.getBody(), Block.STATEMENTS_PROPERTY); |
| |
| Block newBlock= astRoot.getAST().newBlock(); |
| |
| ASTNode placeholder1= listRewrite.createMoveTarget(first, last, newBlock, null); |
| newBlock.statements().add(placeholder1); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" i++; // comment\n"); |
| buf.append(" i--;\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| } |
| |
| |
| public void testMoveForStatementToForBlockCD() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" for(int i= 0; i < 8; i++)\n"); |
| buf.append(" foo();\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| ForStatement forStatement= (ForStatement) statements.get(0); |
| Statement body= forStatement.getBody(); |
| |
| ASTNode placeholder= rewrite.createCopyTarget(body); |
| |
| Block newBody= ast.newBlock(); |
| newBody.statements().add(placeholder); |
| |
| rewrite.replace(body, newBody, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" for(int i= 0; i < 8; i++) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testMoveForStatementToForBlock() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" for(int i= 0; i < 8; i++)\n"); |
| buf.append(" foo();\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| AST ast= astRoot.getAST(); |
| assertTrue("Code has errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); |
| |
| TypeDeclaration type= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methodDecl= findMethodDeclaration(type, "foo"); |
| { |
| List statements= methodDecl.getBody().statements(); |
| ForStatement forStatement= (ForStatement) statements.get(0); |
| Statement body= forStatement.getBody(); |
| |
| ASTNode placeholder= rewrite.createMoveTarget(body); |
| |
| Block newBody= ast.newBlock(); |
| newBody.statements().add(placeholder); |
| |
| rewrite.replace(body, newBody, null); |
| } |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" for(int i= 0; i < 8; i++) {\n"); |
| buf.append(" foo();\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEqualString(preview, buf.toString()); |
| |
| } |
| |
| public void testNestedCopies_only_2_3_4() throws Exception { |
| IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); |
| |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo(Object o) {\n"); |
| buf.append(" int i= (String) o.indexOf('1');\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); |
| |
| CompilationUnit astRoot= createAST(cu); |
| AST ast= astRoot.getAST(); |
| ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); |
| |
| TypeDeclaration typeDecl= findTypeDeclaration(astRoot, "E"); |
| MethodDeclaration methDecl= findMethodDeclaration(typeDecl, "foo"); |
| VariableDeclarationStatement varStat= (VariableDeclarationStatement) methDecl.getBody().statements().get(0); |
| |
| CastExpression expression= (CastExpression) ((VariableDeclarationFragment) varStat.fragments().get(0)).getInitializer(); |
| MethodInvocation invocation= (MethodInvocation) expression.getExpression(); |
| |
| CastExpression newCast= ast.newCastExpression(); |
| newCast.setType((Type) rewrite.createCopyTarget(expression.getType())); |
| newCast.setExpression((Expression) rewrite.createCopyTarget(invocation.getExpression())); |
| ParenthesizedExpression parents= ast.newParenthesizedExpression(); |
| parents.setExpression(newCast); |
| |
| ASTNode node= rewrite.createCopyTarget(invocation); |
| rewrite.replace(expression, node, null); |
| rewrite.replace(invocation.getExpression(), parents, null); |
| |
| String preview= evaluateRewrite(cu, rewrite); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("public class E {\n"); |
| buf.append(" public void foo(Object o) {\n"); |
| buf.append(" int i= ((String) o).indexOf('1');\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String expected= buf.toString(); |
| |
| assertEqualString(preview, expected); |
| } |
| |
| |
| } |