From 192a59e0f0519945546fea33c3cdf7fa3ab4dce4 Mon Sep 17 00:00:00 2001 From: nchallut Date: Wed, 20 Jan 2016 18:45:41 +0100 Subject: [PATCH] ROASTER-91 : implementInterface doesn't work for JavaInterfaceSource Change MethodImpl#isAbstract() & MethodImpl#setAbstract() to handle interface special behavior. A method interface is abstract by default, so it doesn't need modifier. JUnit test updated. --- .../forge/roaster/model/impl/MethodImpl.java | 27 +++++++++++-------- .../model/MethodImplementationTest.java | 8 +++--- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/impl/src/main/java/org/jboss/forge/roaster/model/impl/MethodImpl.java b/impl/src/main/java/org/jboss/forge/roaster/model/impl/MethodImpl.java index 740cc42b..f52fc36b 100644 --- a/impl/src/main/java/org/jboss/forge/roaster/model/impl/MethodImpl.java +++ b/impl/src/main/java/org/jboss/forge/roaster/model/impl/MethodImpl.java @@ -37,6 +37,7 @@ import org.jboss.forge.roaster.model.source.Import; import org.jboss.forge.roaster.model.source.JavaClassSource; import org.jboss.forge.roaster.model.source.JavaDocSource; +import org.jboss.forge.roaster.model.source.JavaInterfaceSource; import org.jboss.forge.roaster.model.source.JavaSource; import org.jboss.forge.roaster.model.source.MethodSource; import org.jboss.forge.roaster.model.source.ParameterSource; @@ -340,24 +341,28 @@ public MethodSource setReturnType(final JavaType type) @Override public boolean isAbstract() { - return modifiers.hasModifier(method, ModifierKeyword.ABSTRACT_KEYWORD); + return (parent instanceof JavaInterfaceSource) ? true + : modifiers.hasModifier(method, ModifierKeyword.ABSTRACT_KEYWORD); } @Override public MethodSource setAbstract(final boolean abstrct) { - if (abstrct) + if (!(parent instanceof JavaInterfaceSource)) { - modifiers.addModifier(method, ModifierKeyword.ABSTRACT_KEYWORD); - // Abstract methods do not specify a body - setBody((String) null); - } - else - { - modifiers.removeModifier(method, ModifierKeyword.ABSTRACT_KEYWORD); - if (getBody() == null) + if (abstrct) { - setBody(""); + modifiers.addModifier(method, ModifierKeyword.ABSTRACT_KEYWORD); + // Abstract methods do not specify a body + setBody((String) null); + } + else + { + modifiers.removeModifier(method, ModifierKeyword.ABSTRACT_KEYWORD); + if (getBody() == null) + { + setBody(""); + } } } return this; diff --git a/impl/src/test/java/org/jboss/forge/test/roaster/model/MethodImplementationTest.java b/impl/src/test/java/org/jboss/forge/test/roaster/model/MethodImplementationTest.java index 8220caf4..624cebc8 100644 --- a/impl/src/test/java/org/jboss/forge/test/roaster/model/MethodImplementationTest.java +++ b/impl/src/test/java/org/jboss/forge/test/roaster/model/MethodImplementationTest.java @@ -35,8 +35,9 @@ public void testJavaClassImplementInterface() throws Exception { JavaClassSource source = Roaster.create(JavaClassSource.class); JavaInterfaceSource interfaceSource = Roaster.create(JavaInterfaceSource.class).setName("Bar").setPackage("test"); - interfaceSource.addMethod().setAbstract(true).setName("doSomething").setReturnTypeVoid(); + interfaceSource.addMethod().setName("doSomething").setReturnTypeVoid(); source.implementInterface(interfaceSource); + Assert.assertThat(interfaceSource.getMethod("doSomething").isAbstract(), is(true)); Assert.assertThat(source.getMethods().size(), is(1)); Assert.assertNotNull(source.getMethod("doSomething")); Assert.assertThat(source.getMethod("doSomething").isAbstract(), is(false)); @@ -60,8 +61,9 @@ public void testJavaEnumImplementInterface() throws Exception { JavaEnumSource source = Roaster.create(JavaEnumSource.class); JavaInterfaceSource interfaceSource = Roaster.create(JavaInterfaceSource.class).setName("Bar").setPackage("test"); - interfaceSource.addMethod().setAbstract(true).setName("doSomething").setReturnTypeVoid(); + interfaceSource.addMethod().setName("doSomething").setReturnTypeVoid(); source.implementInterface(interfaceSource); + Assert.assertThat(interfaceSource.getMethod("doSomething").isAbstract(), is(true)); Assert.assertThat(source.getMethods().size(), is(1)); Assert.assertNotNull(source.getMethod("doSomething")); Assert.assertThat(source.getMethod("doSomething").isAbstract(), is(false)); @@ -142,4 +144,4 @@ public void testJavaClassImplementInterfaceWithReflectedMethods() throws Excepti Assert.assertThat(source.getMethod("lookup", int.class, int.class, boolean.class), notNullValue()); } -} +} \ No newline at end of file