]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/refaktor-before/src/no/uio/ifi/refaktor/refactorings/visitors/InsertAssertsVisitor.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / refaktor-before / src / no / uio / ifi / refaktor / refactorings / visitors / InsertAssertsVisitor.java
CommitLineData
1b2798f6
EK
1package no.uio.ifi.refaktor.refactorings.visitors;
2
3import java.util.List;
4
5import org.eclipse.jdt.core.dom.ASTVisitor;
6import org.eclipse.jdt.core.dom.AssertStatement;
7import org.eclipse.jdt.core.dom.Block;
8import org.eclipse.jdt.core.dom.InfixExpression;
9import org.eclipse.jdt.core.dom.MethodDeclaration;
10import org.eclipse.jdt.core.dom.Name;
11import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
12import org.eclipse.jdt.core.dom.Statement;
13import org.eclipse.jdt.core.dom.StringLiteral;
14import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
15import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
16
17public 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}