]>
Commit | Line | Data |
---|---|---|
1b2798f6 EK |
1 | package no.uio.ifi.refaktor.refactorings.visitors; |
2 | ||
3 | import java.util.List; | |
4 | ||
5 | import org.eclipse.jdt.core.dom.ASTVisitor; | |
6 | import org.eclipse.jdt.core.dom.AssertStatement; | |
7 | import org.eclipse.jdt.core.dom.Block; | |
8 | import org.eclipse.jdt.core.dom.InfixExpression; | |
9 | import org.eclipse.jdt.core.dom.MethodDeclaration; | |
10 | import org.eclipse.jdt.core.dom.Name; | |
11 | import org.eclipse.jdt.core.dom.SingleVariableDeclaration; | |
12 | import org.eclipse.jdt.core.dom.Statement; | |
13 | import org.eclipse.jdt.core.dom.StringLiteral; | |
14 | import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; | |
15 | import org.eclipse.jdt.core.dom.rewrite.ListRewrite; | |
16 | ||
17 | public class InsertAssertsVisitor extends ASTVisitor { | |
18 | private ASTRewrite rewrite; | |
19 | ||
20 | @Override | |
21 | public boolean visit(MethodDeclaration node) { | |
22 | makeTheAssertRewrite(node); | |
23 | return false; | |
24 | } | |
25 | ||
26 | protected void makeTheAssertRewrite(MethodDeclaration node) { | |
27 | Block body = node.getBody(); | |
28 | this.rewrite = ASTRewrite.create(body.getAST()); | |
29 | ListRewrite statementsListRewrite = this.rewrite.getListRewrite(body, Block.STATEMENTS_PROPERTY); | |
30 | @SuppressWarnings("unchecked") | |
31 | List<Statement> originalList = (List<Statement>) statementsListRewrite.getOriginalList(); | |
32 | ||
33 | for (Statement stmt: originalList) { | |
34 | if (stmt == originalList.get(originalList.size()-1)) | |
35 | break; | |
36 | // TODO: Do we have to call getAST() every time again? | |
37 | AssertStatement assertStatement = body.getAST().newAssertStatement(); | |
38 | InfixExpression infixExpression = body.getAST().newInfixExpression(); | |
39 | Name qualifier = ((SingleVariableDeclaration) node.parameters().get(0)).getName(); | |
40 | // TODO: how can we make sure that "x" is free? | |
41 | infixExpression.setLeftOperand(body.getAST().newQualifiedName(body.getAST().newName(qualifier.getFullyQualifiedName()) , body.getAST().newSimpleName("x"))); | |
42 | infixExpression.setOperator(InfixExpression.Operator.EQUALS); | |
43 | infixExpression.setRightOperand(body.getAST().newThisExpression()); | |
44 | assertStatement.setExpression(infixExpression); | |
45 | StringLiteral stringLiteral = body.getAST().newStringLiteral(); | |
46 | stringLiteral.setLiteralValue("The Move Method refactoring has broken the program due to aliasing issues!"); | |
47 | assertStatement.setMessage(stringLiteral); | |
48 | statementsListRewrite.insertAfter(assertStatement, stmt, null); | |
49 | } | |
50 | } | |
51 | ||
52 | public ASTRewrite getRewrite() { | |
53 | return rewrite; | |
54 | } | |
55 | } |