Skip to content

Commit 1ef5040

Browse files
mariofuscosotty
authored andcommitted
refactoring
1 parent 8ab770d commit 1ef5040

7 files changed

Lines changed: 97 additions & 38 deletions

File tree

api/src/main/java/org/jboss/forge/roaster/model/Block.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,17 @@
88
package org.jboss.forge.roaster.model;
99

1010
import org.jboss.forge.roaster.Origin;
11+
import org.jboss.forge.roaster.model.expressions.Expression;
1112
import org.jboss.forge.roaster.model.source.BlockHolder;
1213
import org.jboss.forge.roaster.model.source.JavaSource;
13-
import org.jboss.forge.roaster.model.source.MethodSource;
14-
import org.jboss.forge.roaster.model.statements.AssignStatement;
15-
import org.jboss.forge.roaster.model.statements.BlockStatement;
16-
import org.jboss.forge.roaster.model.statements.DeclareStatement;
17-
import org.jboss.forge.roaster.model.statements.ForEachStatement;
18-
import org.jboss.forge.roaster.model.statements.ForStatement;
19-
import org.jboss.forge.roaster.model.statements.IfStatement;
20-
import org.jboss.forge.roaster.model.statements.InvokeStatement;
21-
import org.jboss.forge.roaster.model.statements.ReturnStatement;
2214
import org.jboss.forge.roaster.model.statements.Statement;
23-
import org.jboss.forge.roaster.model.statements.WhileStatement;
2415

2516
public interface Block<O extends JavaSource<O>, T extends BlockHolder<O,?>>
2617
extends Origin<T>,
2718
BlockHolder<O,Block<O,T>> {
2819

20+
Block<O, T> addStatement( Statement<?,?,?> statement );
21+
22+
Block<O, T> addStatement( Expression<?,?> statement );
23+
2924
}

api/src/main/java/org/jboss/forge/roaster/model/source/MethodSource.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77

88
package org.jboss.forge.roaster.model.source;
99

10-
import java.util.List;
11-
12-
import org.jboss.forge.roaster.model.Block;
1310
import org.jboss.forge.roaster.model.JavaClass;
1411
import org.jboss.forge.roaster.model.JavaType;
1512
import org.jboss.forge.roaster.model.Method;
1613
import org.jboss.forge.roaster.model.expressions.Expression;
1714
import org.jboss.forge.roaster.model.statements.Statement;
1815

16+
import java.util.List;
17+
1918
/**
2019
* Represents a Java Method in source form.
2120
*
@@ -136,4 +135,10 @@ public interface MethodSource<O extends JavaSource<O>> extends Method<O, MethodS
136135
*/
137136
MethodSource<O> setBody( Expression expr );
138137

138+
/**
139+
* Returns the body of this method as a Roaster Block
140+
* @return
141+
*/
142+
org.jboss.forge.roaster.model.Block getBodyAsBlock();
143+
139144
}

api/src/main/java/org/jboss/forge/roaster/model/statements/BlockStatement.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public interface BlockStatement<O extends JavaSource<O>, T extends Block<O, ? ex
1616
extends Statement<O,T,BlockStatement<O,T>>,
1717
Block<O, T> {
1818

19-
BlockStatement<O,T> addStatement( Statement<?,?,?> statement );
19+
BlockStatement<O, T> addStatement( Statement<?,?,?> statement );
2020

21-
BlockStatement<O, T> addStatement( Expression<?,?> statement );
21+
BlockStatement<O, T> addStatement( Expression<?,?> statement );
2222

2323
}

impl/src/main/java/org/jboss/forge/roaster/model/impl/BlockImpl.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,52 @@
99

1010
import org.eclipse.jdt.core.dom.AST;
1111
import org.jboss.forge.roaster.model.Block;
12+
import org.jboss.forge.roaster.model.expressions.Expression;
13+
import org.jboss.forge.roaster.model.impl.statements.ExpressionStatementImpl;
1214
import org.jboss.forge.roaster.model.impl.statements.JdtStatementWrapper;
1315
import org.jboss.forge.roaster.model.source.BlockHolder;
1416
import org.jboss.forge.roaster.model.source.JavaSource;
15-
import org.jboss.forge.roaster.model.statements.BlockStatement;
17+
import org.jboss.forge.roaster.model.statements.Statement;
18+
19+
import java.util.Collections;
20+
import java.util.LinkedList;
21+
import java.util.List;
1622

1723
public class BlockImpl<O extends JavaSource<O>, T extends BlockHolder<O,T>>
1824
extends NodeImpl<O,T,org.eclipse.jdt.core.dom.Block>
1925
implements Block<O,T>,
2026
JdtStatementWrapper<O,T, org.eclipse.jdt.core.dom.Block> {
2127

2228
private org.eclipse.jdt.core.dom.Block block;
29+
private List<Statement<?,?,?>> statements = Collections.EMPTY_LIST;
2330

24-
private BlockStatement body;
31+
@Override
32+
public Block<O, T> addStatement( Statement<?,?,?> statement ) {
33+
if ( statements.isEmpty() ) {
34+
statements = new LinkedList<Statement<?,?,?>>();
35+
}
36+
statements.add( statement );
37+
return this;
38+
}
2539

26-
public void setBlock( BlockStatement body ) {
27-
this.body = body;
40+
@Override
41+
public Block<O, T> addStatement( Expression<?,?> expression ) {
42+
return addStatement( new ExpressionStatementImpl<O, Block<O, T>>( expression ) );
2843
}
2944

3045
@Override
3146
public org.eclipse.jdt.core.dom.Block materialize( AST ast ) {
47+
if (block != null) {
48+
return block;
49+
}
50+
51+
block = ast.newBlock();
52+
53+
for ( Statement<?,?,?> statement : statements ) {
54+
block.statements().add( wireAndGetStatement( statement, this, ast ) );
55+
}
56+
3257
return block;
3358
}
59+
3460
}

impl/src/main/java/org/jboss/forge/roaster/model/impl/MethodImpl.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@
66
*/
77
package org.jboss.forge.roaster.model.impl;
88

9-
import java.util.ArrayList;
10-
import java.util.Collections;
11-
import java.util.Iterator;
12-
import java.util.List;
13-
149
import org.eclipse.jdt.core.dom.AST;
1510
import org.eclipse.jdt.core.dom.ASTNode;
1611
import org.eclipse.jdt.core.dom.Block;
@@ -26,7 +21,6 @@
2621
import org.jboss.forge.roaster.Roaster;
2722
import org.jboss.forge.roaster.model.Annotation;
2823
import org.jboss.forge.roaster.model.JavaType;
29-
import org.jboss.forge.roaster.model.Method;
3024
import org.jboss.forge.roaster.model.Type;
3125
import org.jboss.forge.roaster.model.TypeVariable;
3226
import org.jboss.forge.roaster.model.Visibility;
@@ -35,7 +29,6 @@
3529
import org.jboss.forge.roaster.model.expressions.Expression;
3630
import org.jboss.forge.roaster.model.impl.statements.ExpressionStatementImpl;
3731
import org.jboss.forge.roaster.model.impl.statements.JdtStatementWrapper;
38-
import org.jboss.forge.roaster.model.impl.statements.StatementImpl;
3932
import org.jboss.forge.roaster.model.source.AnnotationSource;
4033
import org.jboss.forge.roaster.model.source.BlockHolder;
4134
import org.jboss.forge.roaster.model.source.JavaClassSource;
@@ -45,10 +38,14 @@
4538
import org.jboss.forge.roaster.model.source.ParameterSource;
4639
import org.jboss.forge.roaster.model.source.TypeVariableSource;
4740
import org.jboss.forge.roaster.model.statements.BlockStatement;
48-
import org.jboss.forge.roaster.model.statements.Statements;
4941
import org.jboss.forge.roaster.model.util.Strings;
5042
import org.jboss.forge.roaster.model.util.Types;
5143

44+
import java.util.ArrayList;
45+
import java.util.Collections;
46+
import java.util.Iterator;
47+
import java.util.List;
48+
5249
/**
5350
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
5451
*/
@@ -62,6 +59,8 @@ public class MethodImpl<O extends JavaSource<O>> implements MethodSource<O>, Blo
6259
private CompilationUnit cu = null;
6360
private final MethodDeclaration method;
6461

62+
private org.jboss.forge.roaster.model.Block body;
63+
6564
private void init(final O parent)
6665
{
6766
this.parent = parent;
@@ -798,24 +797,27 @@ public JavaDocSource<MethodSource<O>> getJavaDoc()
798797
@Override
799798
public MethodSource<O> setBody( org.jboss.forge.roaster.model.statements.Statement statement )
800799
{
801-
BlockImpl<O,MethodSource<O>> block = new BlockImpl<O,MethodSource<O>>();
800+
if (statement instanceof org.jboss.forge.roaster.model.Block) {
801+
this.body = ((org.jboss.forge.roaster.model.Block) statement);
802+
} else {
803+
this.body = new BlockImpl<O,MethodSource<O>>();
804+
body.addStatement(statement);
805+
}
802806

803-
Statement jdtStatement = ((BlockImpl) block).wireAndGetStatement( statement.wrap(), block, cu.getAST() );
804-
method.setBody( (Block) jdtStatement );
807+
Statement jdtStatement = ((JdtStatementWrapper) body).wireAndGetStatement(statement.wrap(), this, cu.getAST());
808+
method.setBody((Block) jdtStatement);
805809

806810
return this;
807811
}
808812

809813
@Override
810814
public MethodSource<O> setBody( Expression expr )
811815
{
812-
ExpressionStatementImpl<O,BlockStatement<O,?>> expressionStatement = new ExpressionStatementImpl<O, BlockStatement<O,?>>( expr );
813-
BlockImpl<O,MethodSource<O>> block = new BlockImpl<O,MethodSource<O>>();
814-
815-
Statement jdtStatement = ((BlockImpl) block).wireAndGetStatement( expressionStatement.wrap(), block, cu.getAST() );
816-
method.setBody( (Block) jdtStatement );
817-
818-
return this;
816+
return setBody( new ExpressionStatementImpl<O, BlockStatement<O,?>>( expr ) );
819817
}
820818

819+
public org.jboss.forge.roaster.model.Block getBodyAsBlock()
820+
{
821+
return body;
822+
}
821823
}

impl/src/main/java/org/jboss/forge/roaster/model/impl/statements/JdtStatementWrapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77

88
package org.jboss.forge.roaster.model.impl.statements;
99

10+
import org.eclipse.jdt.core.dom.AST;
1011
import org.eclipse.jdt.core.dom.Statement;
1112
import org.jboss.forge.roaster.model.ASTNode;
1213
import org.jboss.forge.roaster.model.source.JavaSource;
1314

1415
public interface JdtStatementWrapper<O extends JavaSource, T, J extends Statement> extends ASTNode<J> {
1516

16-
public void setOrigin( T origin );
17+
void setOrigin( T origin );
18+
19+
<K extends org.eclipse.jdt.core.dom.Statement, P> org.eclipse.jdt.core.dom.Statement wireAndGetStatement( org.jboss.forge.roaster.model.statements.Statement statement, P parent, AST ast );
1720
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.jboss.forge.test.roaster.model.statements;
2+
3+
import org.jboss.forge.roaster.Roaster;
4+
import org.jboss.forge.roaster.model.Block;
5+
import org.jboss.forge.roaster.model.source.JavaClassSource;
6+
import org.jboss.forge.roaster.model.source.MethodSource;
7+
import org.junit.Test;
8+
9+
import static org.jboss.forge.roaster.model.expressions.Expressions.var;
10+
import static org.jboss.forge.roaster.model.statements.Statements.newReturn;
11+
import static org.junit.Assert.assertEquals;
12+
13+
public class ModifyMethodBodyTest {
14+
@Test
15+
public void testReturnArg() throws Exception
16+
{
17+
String target = "return x;";
18+
MethodSource<JavaClassSource> method = Roaster.create(JavaClassSource.class).addMethod( "public String echo( String x )" );
19+
20+
method.setBody( newReturn().setReturn( var( "x" ) ) );
21+
22+
assertEquals( target, method.getBody().trim() );
23+
24+
Block body = method.getBodyAsBlock();
25+
System.out.println(body);
26+
}
27+
28+
}

0 commit comments

Comments
 (0)