Skip to content

Commit

Permalink
fix(replace): Use generic replace with CtStatementList elements (closes
Browse files Browse the repository at this point in the history
  • Loading branch information
GerardPaligot authored and monperrus committed Aug 19, 2016
1 parent 9266242 commit baeb8e4
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,6 @@ public <C extends CtStatement> C insertBefore(CtStatementList statements) {
return (C) this;
}

@Override
public void replace(CtElement element) {
if (element instanceof CtStatementList) {
CtStatementImpl.replace(this, (CtStatementList) element);
} else {
super.replace(element);
}
}

@Override
public <C extends CtAbstractInvocation<T>> C setArguments(List<CtExpression<?>> arguments) {
if (arguments == null || arguments.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,15 +143,6 @@ public void replace(CtStatement element) {
replace((CtElement) element);
}

@Override
public void replace(CtElement element) {
if (element instanceof CtStatementList) {
CtStatementImpl.replace(this, (CtStatementList) element);
} else {
super.replace(element);
}
}

@Override
public CtTypeReference<T> getType() {
return getExecutable() == null ? null : getExecutable().getType();
Expand Down
13 changes: 4 additions & 9 deletions src/main/java/spoon/support/reflect/code/CtStatementImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ public static void insertAfter(CtStatement target, CtStatement statement)
insertAfter(target, sts);
}

/**
* @see CtElement#replace(CtElement)
*/
@Deprecated
public static void replace(CtStatement target, CtStatementList statements)
throws ParentNotInitializedException {
insertAfter(target, statements);
Expand Down Expand Up @@ -269,15 +273,6 @@ public <T extends CtStatement> T insertAfter(CtStatementList statements) throws
return (T) this;
}

@Override
public void replace(CtElement element) {
if (element instanceof CtStatementList) {
CtStatementImpl.replace(this, (CtStatementList) element);
} else {
super.replace(element);
}
}

String label;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,6 @@ public <C extends CtStatement> C insertBefore(CtStatementList statements) {
return (C) this;
}

@Override
public void replace(CtElement element) {
if (element instanceof CtStatementList) {
CtStatementImpl.replace(this, (CtStatementList) element);
} else {
super.replace(element);
}
}

@Override
public <C extends CtUnaryOperator> C setOperand(CtExpression<T> expression) {
if (expression != null) {
Expand Down
18 changes: 17 additions & 1 deletion src/test/java/spoon/test/replace/ReplaceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import spoon.reflect.code.CtLiteral;
import spoon.reflect.code.CtLocalVariable;
import spoon.reflect.code.CtStatement;
import spoon.reflect.code.CtTry;
import spoon.reflect.code.CtVariableRead;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtElement;
Expand All @@ -29,13 +30,16 @@
import spoon.reflect.visitor.filter.NameFilter;
import spoon.reflect.visitor.filter.ReferenceTypeFilter;
import spoon.reflect.visitor.filter.TypeFilter;
import spoon.test.replace.testclasses.Mole;
import spoon.test.replace.testclasses.Tacos;

import java.util.List;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertSame;
import static spoon.testing.utils.ModelUtils.build;
import static spoon.testing.utils.ModelUtils.buildClass;

public class ReplaceTest {

Expand Down Expand Up @@ -154,7 +158,8 @@ public void testReplaceStmtByList() {
stmt.replace(lst);

// we should have only 2 statements after (from the stmt list)
assertEquals(2, sample.getMethod("retry").getBody().getStatements().size());
assertEquals(1, sample.getMethod("retry").getBody().getStatements().size());
assertEquals(2, ((CtBlock) sample.getMethod("retry").getBody().getStatement(0)).getStatements().size());
}

@Test
Expand Down Expand Up @@ -329,4 +334,15 @@ public void testReplaceExecutableReferenceByAnotherOne() throws Exception {
assertEquals(newExecutable, inv.getExecutable());
assertEquals("java.io.PrintStream#print(java.lang.String)", inv.getExecutable().toString());
}

@Test
public void testReplaceBlockTry() throws Exception {
final CtType<Mole> aMole = buildClass(Mole.class);
final CtBlock<?> newBlock = aMole.getFactory().Code().createCtBlock(aMole.getFactory().Code().createCodeSnippetStatement("int j = 0;").compile());
final CtTry ctTry = aMole.getMethod("m").getElements(new TypeFilter<>(CtTry.class)).get(0);

assertNotEquals(newBlock, ctTry.getBody());
ctTry.getBody().replace(newBlock);
assertEquals(newBlock, ctTry.getBody());
}
}
10 changes: 10 additions & 0 deletions src/test/java/spoon/test/replace/testclasses/Mole.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package spoon.test.replace.testclasses;

public class Mole {
void m() {
try {
int i;
} finally {
}
}
}

0 comments on commit baeb8e4

Please sign in to comment.