Skip to content

Commit 8d9d7e2

Browse files
committed
ROASTER-42: Fixed FieldImpl.setType implementation
1 parent 8633b93 commit 8d9d7e2

File tree

2 files changed

+20
-40
lines changed

2 files changed

+20
-40
lines changed

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

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
import org.eclipse.jdt.core.dom.Expression;
1616
import org.eclipse.jdt.core.dom.FieldDeclaration;
1717
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
18-
import org.eclipse.jdt.core.dom.Name;
19-
import org.eclipse.jdt.core.dom.PrimitiveType;
20-
import org.eclipse.jdt.core.dom.PrimitiveType.Code;
2118
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
2219
import org.jboss.forge.roaster.Roaster;
2320
import org.jboss.forge.roaster.model.Annotation;
@@ -29,6 +26,7 @@
2926
import org.jboss.forge.roaster.model.ast.ModifierAccessor;
3027
import org.jboss.forge.roaster.model.source.AnnotationSource;
3128
import org.jboss.forge.roaster.model.source.FieldSource;
29+
import org.jboss.forge.roaster.model.source.JavaClassSource;
3230
import org.jboss.forge.roaster.model.source.JavaSource;
3331
import org.jboss.forge.roaster.model.util.Strings;
3432
import org.jboss.forge.roaster.model.util.Types;
@@ -339,43 +337,15 @@ public FieldSource<O> setType(final String typeName)
339337
origin.addImport(typeName);
340338
}
341339

342-
Code primitive = PrimitiveType.toCode(typeName);
340+
String stub = "public class Stub { " + simpleName + " field; }";
341+
JavaClassSource temp = (JavaClassSource) Roaster.parse(stub);
342+
List<FieldSource<JavaClassSource>> fields = temp.getFields();
343+
org.eclipse.jdt.core.dom.Type fieldType = ((FieldDeclaration) ((VariableDeclarationFragment) fields.get(0)
344+
.getInternal()).getParent()).getType();
345+
346+
fieldType = (org.eclipse.jdt.core.dom.Type) ASTNode.copySubtree(field.getAST(), fieldType);
347+
field.setType(fieldType);
343348

344-
org.eclipse.jdt.core.dom.Type type = null;
345-
if (primitive != null)
346-
{
347-
type = ast.newPrimitiveType(primitive);
348-
}
349-
else
350-
{
351-
if (!origin.requiresImport(typeName))
352-
{
353-
if (Types.isArray(typeName))
354-
{
355-
String arrayType = Types.stripArray(typeName);
356-
int arrayDimension = Types.getArrayDimension(typeName);
357-
if (Types.isPrimitive(arrayType))
358-
{
359-
type = ast.newArrayType(ast.newPrimitiveType(PrimitiveType.toCode(arrayType)), arrayDimension);
360-
}
361-
else
362-
{
363-
type = ast.newArrayType(ast.newSimpleType(ast.newSimpleName(arrayType)), arrayDimension);
364-
}
365-
}
366-
else
367-
{
368-
type = ast.newSimpleType(ast.newSimpleName(simpleName));
369-
}
370-
}
371-
else
372-
{
373-
String[] className = Types.tokenizeClassName(typeName);
374-
Name name = ast.newName(className);
375-
type = ast.newSimpleType(name);
376-
}
377-
}
378-
field.setType(type);
379349
return this;
380350
}
381351

@@ -434,7 +404,7 @@ public boolean equals(Object obj)
434404
if (other.field != null)
435405
return false;
436406
}
437-
else if (!field.equals(other.field ))
407+
else if (!field.equals(other.field))
438408
return false;
439409
if (fragment == null)
440410
{

impl/src/test/java/org/jboss/forge/test/roaster/model/JavaClassGenericsTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.jboss.forge.roaster.Roaster;
1313
import org.jboss.forge.roaster.model.JavaInterface;
14+
import org.jboss.forge.roaster.model.source.FieldSource;
1415
import org.jboss.forge.roaster.model.source.JavaClassSource;
1516
import org.jboss.forge.roaster.model.source.JavaInterfaceSource;
1617
import org.jboss.forge.roaster.model.source.TypeVariableSource;
@@ -185,4 +186,13 @@ public void getClassGenericsName() throws ClassNotFoundException
185186
Assert.assertTrue(typeVariables.get(1).getBounds().isEmpty());
186187
}
187188

189+
@Test
190+
public void testGenericTypeName() throws Exception
191+
{
192+
JavaClassSource javaClass = Roaster.create(JavaClassSource.class);
193+
FieldSource<JavaClassSource> field = javaClass.addField();
194+
field.setPrivate().setName("email").setType("java.util.List<String>");
195+
Assert.assertTrue(javaClass.hasImport(List.class));
196+
Assert.assertEquals("List<String>", field.getType().toString());
197+
}
188198
}

0 commit comments

Comments
 (0)