diff options
author | Karsten Thoms | 2018-07-14 20:42:02 +0000 |
---|---|---|
committer | Kalyan Prasad Tatavarthi | 2018-07-25 11:55:40 +0000 |
commit | 8339650573161d2c730896aa809969d2a9499629 (patch) | |
tree | 92ad2b4161dc5e8c147c76212e3cf3079a987e03 | |
parent | 0a2e2c531c57240713b98c24ea5d47b52620c58b (diff) | |
download | eclipse.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.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)); } |