diff --git a/src/main/java/spoon/reflect/declaration/CtModifiable.java b/src/main/java/spoon/reflect/declaration/CtModifiable.java
index 1c9aca85f16..897b3e55f59 100644
--- a/src/main/java/spoon/reflect/declaration/CtModifiable.java
+++ b/src/main/java/spoon/reflect/declaration/CtModifiable.java
@@ -59,7 +59,6 @@ public interface CtModifiable extends CtElement {
* add a modifier
*
* @param modifier
- * @return true if this element changed as a result of the call
*/
@PropertySetter(role = MODIFIER)
T addModifier(ModifierKind modifier);
@@ -68,10 +67,9 @@ public interface CtModifiable extends CtElement {
* remove a modifier
*
* @param modifier
- * @return true if this element changed as a result of the call
*/
@PropertySetter(role = MODIFIER)
- boolean removeModifier(ModifierKind modifier);
+ T removeModifier(ModifierKind modifier);
/**
* Sets the visibility of this modifiable element (replaces old visibility).
diff --git a/src/main/java/spoon/support/reflect/CtModifierHandler.java b/src/main/java/spoon/support/reflect/CtModifierHandler.java
index fbdc89e50f3..c38e639546d 100644
--- a/src/main/java/spoon/support/reflect/CtModifierHandler.java
+++ b/src/main/java/spoon/support/reflect/CtModifierHandler.java
@@ -94,14 +94,15 @@ public CtModifierHandler addModifier(ModifierKind modifier) {
return this;
}
- public boolean removeModifier(ModifierKind modifier) {
+ public CtModifierHandler removeModifier(ModifierKind modifier) {
if (this.modifiers == CtElementImpl.emptySet()) {
- return false;
+ return this;
}
getFactory().getEnvironment().getModelChangeListener().onSetDelete(element, MODIFIER, modifiers, modifier);
// we want to remove implicit OR explicit modifier
- boolean b = modifiers.remove(new CtExtendedModifier(modifier));
- return b || modifiers.remove(new CtExtendedModifier(modifier, true));
+ modifiers.remove(new CtExtendedModifier(modifier));
+ modifiers.remove(new CtExtendedModifier(modifier, true));
+ return this;
}
public CtModifierHandler setVisibility(ModifierKind visibility) {
diff --git a/src/main/java/spoon/support/reflect/code/CtCatchVariableImpl.java b/src/main/java/spoon/support/reflect/code/CtCatchVariableImpl.java
index 141b27d3fa5..c3d78605786 100644
--- a/src/main/java/spoon/support/reflect/code/CtCatchVariableImpl.java
+++ b/src/main/java/spoon/support/reflect/code/CtCatchVariableImpl.java
@@ -197,8 +197,9 @@ public C addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public C removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (C) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/code/CtLocalVariableImpl.java b/src/main/java/spoon/support/reflect/code/CtLocalVariableImpl.java
index 539448bff05..920b6bc6b4c 100644
--- a/src/main/java/spoon/support/reflect/code/CtLocalVariableImpl.java
+++ b/src/main/java/spoon/support/reflect/code/CtLocalVariableImpl.java
@@ -130,8 +130,9 @@ public C addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public C removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (C) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/declaration/CtAnonymousExecutableImpl.java b/src/main/java/spoon/support/reflect/declaration/CtAnonymousExecutableImpl.java
index 63f8527b8fa..a605910ab81 100644
--- a/src/main/java/spoon/support/reflect/declaration/CtAnonymousExecutableImpl.java
+++ b/src/main/java/spoon/support/reflect/declaration/CtAnonymousExecutableImpl.java
@@ -53,8 +53,9 @@ public T addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public T removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (T) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/declaration/CtConstructorImpl.java b/src/main/java/spoon/support/reflect/declaration/CtConstructorImpl.java
index a261d8f5050..fa72f67e55b 100644
--- a/src/main/java/spoon/support/reflect/declaration/CtConstructorImpl.java
+++ b/src/main/java/spoon/support/reflect/declaration/CtConstructorImpl.java
@@ -158,8 +158,9 @@ public C addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public C removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (C) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/declaration/CtFieldImpl.java b/src/main/java/spoon/support/reflect/declaration/CtFieldImpl.java
index 29e352e2202..5e2f6b5e706 100644
--- a/src/main/java/spoon/support/reflect/declaration/CtFieldImpl.java
+++ b/src/main/java/spoon/support/reflect/declaration/CtFieldImpl.java
@@ -136,8 +136,9 @@ public C addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public C removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (C) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/declaration/CtMethodImpl.java b/src/main/java/spoon/support/reflect/declaration/CtMethodImpl.java
index 8a49047e3ee..84cf21a7f21 100644
--- a/src/main/java/spoon/support/reflect/declaration/CtMethodImpl.java
+++ b/src/main/java/spoon/support/reflect/declaration/CtMethodImpl.java
@@ -166,8 +166,9 @@ public C addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public C removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (C) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/declaration/CtParameterImpl.java b/src/main/java/spoon/support/reflect/declaration/CtParameterImpl.java
index e7d0e8fbc77..a96e0ffc9be 100644
--- a/src/main/java/spoon/support/reflect/declaration/CtParameterImpl.java
+++ b/src/main/java/spoon/support/reflect/declaration/CtParameterImpl.java
@@ -134,8 +134,9 @@ public C addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public C removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (C) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/declaration/CtTypeImpl.java b/src/main/java/spoon/support/reflect/declaration/CtTypeImpl.java
index 7003ddea795..3aea05647f3 100644
--- a/src/main/java/spoon/support/reflect/declaration/CtTypeImpl.java
+++ b/src/main/java/spoon/support/reflect/declaration/CtTypeImpl.java
@@ -479,8 +479,9 @@ public C addModifier(ModifierKind modifier) {
}
@Override
- public boolean removeModifier(ModifierKind modifier) {
- return modifierHandler.removeModifier(modifier);
+ public C removeModifier(ModifierKind modifier) {
+ modifierHandler.removeModifier(modifier);
+ return (C) this;
}
@Override
diff --git a/src/main/java/spoon/support/reflect/declaration/CtTypeParameterImpl.java b/src/main/java/spoon/support/reflect/declaration/CtTypeParameterImpl.java
index 305bd34ce56..ecda4097625 100644
--- a/src/main/java/spoon/support/reflect/declaration/CtTypeParameterImpl.java
+++ b/src/main/java/spoon/support/reflect/declaration/CtTypeParameterImpl.java
@@ -212,9 +212,9 @@ public C addModifier(ModifierKind modifier) {
@Override
@UnsettableProperty
- public boolean removeModifier(ModifierKind modifier) {
+ public C removeModifier(ModifierKind modifier) {
// unsettable property
- return true;
+ return (C) this;
}
@Override
diff --git a/src/test/java/spoon/test/modifiers/TestModifiers.java b/src/test/java/spoon/test/modifiers/TestModifiers.java
index bf20c902279..06790378825 100644
--- a/src/test/java/spoon/test/modifiers/TestModifiers.java
+++ b/src/test/java/spoon/test/modifiers/TestModifiers.java
@@ -37,6 +37,24 @@ public void testMethodWithVarargsDoesNotBecomeTransient() {
spoon.run();
}
+ @Test
+ public void testCtModifiableAddRemoveReturnCtModifiable() {
+ // contract: CtModifiable#addModifier and CtModifiable#removeModifier should return CtModifiable
+
+ Launcher spoon = new Launcher();
+ spoon.addInputResource("./src/test/java/spoon/test/modifiers/testclasses/MethodVarArgs.java");
+ spoon.buildModel();
+
+ CtType> myClass = spoon.getFactory().Type().get(MethodVarArgs.class);
+ CtMethod methodVarargs = myClass.getMethodsByName("getInitValues").get(0);
+
+ Object o = methodVarargs.addModifier(ModifierKind.FINAL);
+ assertEquals(methodVarargs, o);
+
+ o = methodVarargs.removeModifier(ModifierKind.FINAL);
+ assertEquals(methodVarargs, o);
+ }
+
@Test
public void testSetVisibility() {
// contract: setVisibility should only work with public/private/protected modifiers