Skip to content

Commit

Permalink
ROASTER-42: Fixed FieldImpl.setType implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Oct 28, 2014
1 parent 8633b93 commit 5392e54
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
import org.eclipse.jdt.core.dom.Name;
import org.eclipse.jdt.core.dom.PrimitiveType;
import org.eclipse.jdt.core.dom.PrimitiveType.Code;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.Annotation;
Expand All @@ -29,6 +26,7 @@
import org.jboss.forge.roaster.model.ast.ModifierAccessor;
import org.jboss.forge.roaster.model.source.AnnotationSource;
import org.jboss.forge.roaster.model.source.FieldSource;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.forge.roaster.model.source.JavaSource;
import org.jboss.forge.roaster.model.util.Strings;
import org.jboss.forge.roaster.model.util.Types;
Expand Down Expand Up @@ -339,43 +337,15 @@ public FieldSource<O> setType(final String typeName)
origin.addImport(typeName);
}

Code primitive = PrimitiveType.toCode(typeName);
String stub = "public class Stub { " + simpleName + " field; }";
JavaClassSource temp = (JavaClassSource) Roaster.parse(stub);
List<FieldSource<JavaClassSource>> fields = temp.getFields();
org.eclipse.jdt.core.dom.Type fieldType = ((FieldDeclaration) ((VariableDeclarationFragment) fields.get(0)
.getInternal()).getParent()).getType();

fieldType = (org.eclipse.jdt.core.dom.Type) ASTNode.copySubtree(field.getAST(), fieldType);
field.setType(fieldType);

org.eclipse.jdt.core.dom.Type type = null;
if (primitive != null)
{
type = ast.newPrimitiveType(primitive);
}
else
{
if (!origin.requiresImport(typeName))
{
if (Types.isArray(typeName))
{
String arrayType = Types.stripArray(typeName);
int arrayDimension = Types.getArrayDimension(typeName);
if (Types.isPrimitive(arrayType))
{
type = ast.newArrayType(ast.newPrimitiveType(PrimitiveType.toCode(arrayType)), arrayDimension);
}
else
{
type = ast.newArrayType(ast.newSimpleType(ast.newSimpleName(arrayType)), arrayDimension);
}
}
else
{
type = ast.newSimpleType(ast.newSimpleName(simpleName));
}
}
else
{
String[] className = Types.tokenizeClassName(typeName);
Name name = ast.newName(className);
type = ast.newSimpleType(name);
}
}
field.setType(type);
return this;
}

Expand Down Expand Up @@ -434,7 +404,7 @@ public boolean equals(Object obj)
if (other.field != null)
return false;
}
else if (!field.equals(other.field ))
else if (!field.equals(other.field))
return false;
if (fragment == null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,6 @@ public void testFieldMultidimensionalArray()
Assert.assertEquals(3, type.getArrayDimensions());
}


@Test
public void testFieldMultidimensionalArray2()
{
Expand All @@ -243,7 +242,7 @@ public void testFieldMultidimensionalArray2()
Assert.assertEquals(3, type.getArrayDimensions());
Assert.assertEquals("Vector[][][]", field.getType().getName());
}

@Test
public void testFieldTypeByteArrayAlternativeDeclarationTest()
{
Expand All @@ -254,7 +253,7 @@ public void testFieldTypeByteArrayAlternativeDeclarationTest()
Assert.assertTrue(field.getType().isArray());
Assert.assertEquals(1, field.getType().getArrayDimensions());
}

@Test
public void testFieldTypeObjectArrayAlternativeDeclarationTest()
{
Expand All @@ -265,7 +264,7 @@ public void testFieldTypeObjectArrayAlternativeDeclarationTest()
Assert.assertTrue(field.getType().isArray());
Assert.assertEquals(1, field.getType().getArrayDimensions());
}

@Test
public void testFieldTypeObjectArrayMixedDimensionTest()
{
Expand All @@ -276,4 +275,14 @@ public void testFieldTypeObjectArrayMixedDimensionTest()
Assert.assertTrue(field.getType().isArray());
Assert.assertEquals(2, field.getType().getArrayDimensions());
}

@Test
public void testGenericFieldType() throws Exception
{
JavaClassSource javaClass = Roaster.create(JavaClassSource.class);
FieldSource<JavaClassSource> field = javaClass.addField();
field.setPrivate().setName("email").setType("java.util.List<String>");
Assert.assertTrue(javaClass.hasImport(List.class));
Assert.assertEquals("List<String>", field.getType().toString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,5 +184,4 @@ public void getClassGenericsName() throws ClassNotFoundException
Assert.assertEquals("O", typeVariables.get(1).getName());
Assert.assertTrue(typeVariables.get(1).getBounds().isEmpty());
}

}

0 comments on commit 5392e54

Please sign in to comment.