diff options
-rw-r--r-- | org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java | 20 | ||||
-rw-r--r-- | org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java | 6 |
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)); } |