Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Thoms2018-07-14 20:42:02 +0000
committerKalyan Prasad Tatavarthi2018-07-25 11:55:40 +0000
commit8339650573161d2c730896aa809969d2a9499629 (patch)
tree92ad2b4161dc5e8c147c76212e3cf3079a987e03
parent0a2e2c531c57240713b98c24ea5d47b52620c58b (diff)
downloadeclipse.jdt.ui-8339650573161d2c730896aa809969d2a9499629.tar.gz
eclipse.jdt.ui-8339650573161d2c730896aa809969d2a9499629.tar.xz
eclipse.jdt.ui-8339650573161d2c730896aa809969d2a9499629.zip
Bug 536612 - Fix remove redundant modifier cleanup for anon. classes
The 'public' modifier must not be removed from methods in an interface if the method is declared by an anonymous class. Added test case. Change-Id: I92c016befedd6aadd058c6c8cb09b8247a94509d Signed-off-by: Karsten Thoms <karsten.thoms@itemis.de>
-rw-r--r--org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java20
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java6
2 files changed, 24 insertions, 2 deletions
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
index 2a87bc2b0c..00326367dc 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
@@ -9152,8 +9152,26 @@ public class CleanUpTest extends CleanUpTestCase {
buf.append("}\n");
String expected2 = buf.toString();
+ // Anonymous class within an interface:
+ // public keyword must not be removed (see bug#536612)
+ buf= new StringBuffer();
+ buf.append("package test;\n");
+ buf.append("public interface X {\n");
+ buf.append(" void B();\n");
+ buf.append(" void A();\n");
+ buf.append(" default X y() {\n");
+ buf.append(" return new X() {\n");
+ buf.append(" @Override public void A() {}\n");
+ buf.append(" @Override public void B() {}\n");
+ buf.append(" };\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected3 = buf.toString();
+
+ ICompilationUnit cu3= pack1.createCompilationUnit("AnonymousNestedInInterface.java", buf.toString(), false, null);
+
enable(CleanUpConstants.REMOVE_REDUNDANT_MODIFIERS);
- assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1, cu2 }, new String[] { expected1, expected2 });
+ assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1, cu2, cu3 }, new String[] { expected1, expected2, expected3 });
}
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
index 3d1d07c1b7..cac62fb437 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
@@ -20,6 +20,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.MethodDeclaration;
@@ -134,7 +135,10 @@ public class RedundantModifiersCleanUp extends AbstractMultiFix {
public boolean visit(MethodDeclaration node) {
TypeDeclaration typeDecl= ASTNodes.getParent(node, TypeDeclaration.class);
if (typeDecl != null && typeDecl.isInterface()) {
- rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.PUBLIC | Modifier.ABSTRACT));
+ rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.ABSTRACT));
+ if (!AnonymousClassDeclaration.class.isInstance(node.getParent())) {
+ rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.PUBLIC));
+ }
} else if (typeDecl != null && Modifier.isFinal(typeDecl.getModifiers()) && Modifier.isFinal(node.getModifiers())) {
rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.FINAL));
}

Back to the top