Skip to content

Commit 70f87e1

Browse files
committed
ROASTER-36: Fixed PropertyImpl.setType
1 parent d2f27e4 commit 70f87e1

5 files changed

Lines changed: 52 additions & 4 deletions

File tree

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

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

1010
import java.util.List;
1111

12+
import org.jboss.forge.roaster.model.JavaType;
1213
import org.jboss.forge.roaster.model.Property;
1314
import org.jboss.forge.roaster.model.PropertyHolder;
1415

@@ -25,6 +26,16 @@ public interface PropertyHolderSource<O extends JavaSource<O>> extends
2526
*/
2627
PropertySource<O> addProperty(String type, String name);
2728

29+
/**
30+
* Add a new {@link Property} declaration to this {@link O} instance.
31+
*/
32+
PropertySource<O> addProperty(Class<?> type, String name);
33+
34+
/**
35+
* Add a new {@link Property} declaration to this {@link O} instance.
36+
*/
37+
PropertySource<O> addProperty(JavaType<?> type, String name);
38+
2839
/**
2940
* Remove the given {@link Property} from this {@link O} instance, if it exists; otherwise, do nothing.
3041
*/

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,8 @@ public boolean hasMethodSignature(final Method<?, ?> method)
310310
Iterator<ParameterSource<O>> localParams = local.getParameters().iterator();
311311
for (Parameter<? extends JavaType<?>> methodParam : method.getParameters())
312312
{
313-
if (localParams.hasNext() && Strings.areEqual(localParams.next().getType().getName(), methodParam.getType().getName()))
313+
if (localParams.hasNext()
314+
&& Strings.areEqual(localParams.next().getType().getName(), methodParam.getType().getName()))
314315
{
315316
continue;
316317
}
@@ -515,6 +516,18 @@ public org.jboss.forge.roaster.model.Type<O> getType()
515516
return getProperty(name);
516517
}
517518

519+
@Override
520+
public PropertySource<O> addProperty(Class<?> type, String name)
521+
{
522+
return addProperty(type.getName(), name);
523+
}
524+
525+
@Override
526+
public PropertySource<O> addProperty(JavaType<?> type, String name)
527+
{
528+
return addProperty(type.getQualifiedName(), name);
529+
}
530+
518531
@Override
519532
public final AbstractJavaSourceMemberHolder<O> removeProperty(Property<O> property)
520533
{

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,14 @@ public MethodSource<O> setReturnTypeVoid()
248248
@Override
249249
public MethodSource<O> setReturnType(final String typeName)
250250
{
251-
String stub = "public class Stub { public " + typeName + " method() {} }";
251+
String simpleName = Types.toSimpleName(typeName);
252+
253+
O origin = getOrigin();
254+
if (!Strings.areEqual(typeName, simpleName) && origin.requiresImport(typeName))
255+
{
256+
origin.addImport(typeName);
257+
}
258+
String stub = "public class Stub { public " + simpleName + " method() {} }";
252259
JavaClassSource temp = (JavaClassSource) Roaster.parse(stub);
253260
List<MethodSource<JavaClassSource>> methods = temp.getMethods();
254261
org.eclipse.jdt.core.dom.Type returnType = ((MethodDeclaration) methods.get(0).getInternal()).getReturnType2();

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.jboss.forge.roaster.model.source.FieldSource;
2626
import org.jboss.forge.roaster.model.source.JavaSource;
2727
import org.jboss.forge.roaster.model.source.MethodSource;
28+
import org.jboss.forge.roaster.model.source.ParameterSource;
2829
import org.jboss.forge.roaster.model.source.PropertyHolderSource;
2930
import org.jboss.forge.roaster.model.source.PropertySource;
3031
import org.jboss.forge.roaster.model.util.Assert;
@@ -339,7 +340,9 @@ public PropertySource<O> setType(String type)
339340
}
340341
if (mutator != null)
341342
{
342-
mutator.setParameters(String.format("%s %s", type, getName()));
343+
for (ParameterSource<O> param : mutator.getParameters())
344+
mutator.removeParameter(param);
345+
mutator.addParameter(type, getName());
343346
}
344347
if (field != null)
345348
{
@@ -450,7 +453,7 @@ public boolean equals(Object obj)
450453
@Override
451454
public int hashCode()
452455
{
453-
// compatible with Java 6:
456+
// compatible with Java 6:
454457
return Arrays.hashCode(new Object[] { getOrigin(), getName() });
455458
}
456459

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
package org.jboss.forge.test.roaster.model;
99

1010
import java.io.InputStream;
11+
import java.sql.Timestamp;
12+
import java.util.Date;
1113
import java.util.List;
1214

1315
import org.jboss.forge.roaster.Roaster;
@@ -59,4 +61,16 @@ public void testBooleanProperties()
5961
Assert.assertNotNull(source.getProperty("myBoolean").getAccessor());
6062
Assert.assertNotNull(source.getProperty("myBoolean").getMutator());
6163
}
64+
65+
@Test
66+
public void testChangePropertyType()
67+
{
68+
JavaClassSource source = Roaster.create(JavaClassSource.class).setName("MyClass");
69+
PropertySource<JavaClassSource> property = source.addProperty(Date.class, "myDate");
70+
property.setType(Timestamp.class);
71+
Assert.assertEquals("Timestamp", source.getField("myDate").getType().getName());
72+
Assert.assertEquals("Timestamp", source.getMethod("getMyDate").getReturnType().getName());
73+
Assert.assertNotNull(source.getMethod("setMyDate", Timestamp.class));
74+
75+
}
6276
}

0 commit comments

Comments
 (0)