diff options
author | Nikolay Metchev | 2013-12-19 11:55:07 +0000 |
---|---|---|
committer | Noopur Gupta | 2013-12-19 11:55:07 +0000 |
commit | 217b71b09ddca5d11afd74b858708bf06251e83b (patch) | |
tree | 444fa078c73dfd998250fd6961b87f3ae25b02fc | |
parent | 9e6c10b4bc71eb8bab57420f4867da8c08d6720a (diff) | |
download | eclipse.jdt.ui-217b71b09ddca5d11afd74b858708bf06251e83b.tar.gz eclipse.jdt.ui-217b71b09ddca5d11afd74b858708bf06251e83b.tar.xz eclipse.jdt.ui-217b71b09ddca5d11afd74b858708bf06251e83b.zip |
Fixed bug 404471: [move method] Annotation error in applying
move-refactoring to inherited methods
Signed-off-by: Nikolay Metchev <nikolaymetchev@gmail.com>
4 files changed, 50 insertions, 0 deletions
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test65/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test65/in/A.java new file mode 100644 index 0000000000..c33a73ef01 --- /dev/null +++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test65/in/A.java @@ -0,0 +1,14 @@ +public class A extends B { + @Override + public void m(C c) { + } +} + +class B { + public void m(C c) { + } +} + +class C { + +} diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test65/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test65/out/A.java new file mode 100644 index 0000000000..08d7f69abe --- /dev/null +++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test65/out/A.java @@ -0,0 +1,18 @@ +public class A extends B { + @Override + public void m(C c) { + c.m(); + } +} + +class B { + public void m(C c) { + } +} + +class C { + + public void m() { + } + +} diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java index 8e3200b867..580d2084c1 100644 --- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java +++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java @@ -10,6 +10,7 @@ * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] super method invocation does not compile after refactoring - https://bugs.eclipse.org/356687 * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] Move method with static imported method calls introduces compiler error - https://bugs.eclipse.org/217753 * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] Wrong detection of duplicate methods (can result in compile errors) - https://bugs.eclipse.org/404477 + * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] Annotation error in applying move-refactoring to inherited methods - https://bugs.eclipse.org/404471 *******************************************************************************/ package org.eclipse.jdt.ui.tests.refactoring; @@ -558,6 +559,11 @@ public class MoveInstanceMethodTests extends RefactoringTest { helper1(new String[] { "A" }, "A", 3, 17, 3, 18, PARAMETER, "b", true, true); } + // bug 404471 + public void test65() throws Exception { + helper1(new String[] { "A" }, "A", 3, 17, 3, 18, PARAMETER, "c", false, false); + } + // Move mA1 to field fB, do not inline delegator public void test3() throws Exception { helper1(new String[] { "p1.A", "p2.B", "p3.C"}, "p1.A", 9, 17, 9, 20, FIELD, "fB", false, false); diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java index c6f286b8c0..a84f682d5e 100644 --- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java +++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java @@ -10,6 +10,7 @@ * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] super method invocation does not compile after refactoring - https://bugs.eclipse.org/356687 * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] Move method with static imported method calls introduces compiler error - https://bugs.eclipse.org/217753 * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] Wrong detection of duplicate methods (can result in compile errors) - https://bugs.eclipse.org/404477 + * Nikolay Metchev <nikolaymetchev@gmail.com> - [move method] Annotation error in applying move-refactoring to inherited methods - https://bugs.eclipse.org/404471 *******************************************************************************/ package org.eclipse.jdt.internal.corext.refactoring.structure; @@ -72,6 +73,7 @@ import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; +import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration; import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; import org.eclipse.jdt.core.dom.Assignment; @@ -82,6 +84,7 @@ import org.eclipse.jdt.core.dom.EnumDeclaration; import org.eclipse.jdt.core.dom.Expression; import org.eclipse.jdt.core.dom.FieldAccess; import org.eclipse.jdt.core.dom.IBinding; +import org.eclipse.jdt.core.dom.IExtendedModifier; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.IVariableBinding; @@ -2306,6 +2309,15 @@ public final class MoveInstanceMethodProcessor extends MoveProcessor implements adjustments.put(fMethod, adjustment); } } + for (IExtendedModifier modifier : (List<IExtendedModifier>) declaration.modifiers()) { + if (modifier.isAnnotation()) { + Annotation annotation= (Annotation) modifier; + ITypeBinding typeBinding= annotation.resolveTypeBinding(); + if (typeBinding != null && typeBinding.getQualifiedName().equals("java.lang.Override")) { //$NON-NLS-1$ + rewrite.remove(annotation, null); + } + } + } target= createMethodArguments(rewrites, rewrite, declaration, adjustments, status); createMethodTypeParameters(rewrite, declaration, status); createMethodComment(rewrite, declaration); |