diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java index b471b286fe1..ecc097976e3 100644 --- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java +++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java @@ -629,6 +629,19 @@ private RefactoringStatus checkReferencesToPushedDownMembers(IProgressMonitor mo continue; if (!(element instanceof IMember)) continue; + IType[] destinationTypes= getAbstractDestinations(new NullProgressMonitor()); + IMember elementMember= (IMember)element; + IType elementMemberType= elementMember.getDeclaringType(); + boolean isMoveDestination= false; + for (IType destinationType : destinationTypes) { + if (destinationType.getFullyQualifiedName().equals(elementMemberType.getFullyQualifiedName())) { + isMoveDestination= true; + break; + } + } + if (isMoveDestination) { + continue; + } IMember referencingMember= (IMember) element; Object[] keys= { label, createLabel(referencingMember) }; String msg= Messages.format(RefactoringCoreMessages.PushDownRefactoring_referenced, keys); diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PushDown/test40/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PushDown/test40/in/A.java new file mode 100644 index 00000000000..27d468df6fe --- /dev/null +++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PushDown/test40/in/A.java @@ -0,0 +1,13 @@ +package p; + +class A { + int f; + + void mA() { + class B extends A { + public void mB() { + f = 0; + } + } + } +} diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PushDown/test40/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PushDown/test40/out/A.java new file mode 100644 index 00000000000..dbcd5f761d8 --- /dev/null +++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PushDown/test40/out/A.java @@ -0,0 +1,13 @@ +package p; + +class A { + void mA() { + class B extends A { + int f; + + public void mB() { + f = 0; + } + } + } +} diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java index e8ac457ce04..037e81165e7 100644 --- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java +++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java @@ -963,6 +963,24 @@ public void test39() throws Exception { //https://github.com/eclipse-jdt/eclipse namesOfMethodsToDeclareAbstract, signaturesOfMethodsToDeclareAbstract, null, null); } + @Test + public void test40() throws Exception { //https://github.com/eclipse-jdt/eclipse.jdt.ui/issues/1679 + String[] selectedMethodNames= { }; + String[][] selectedMethodSignatures= { new String[0] }; + String[] selectedFieldNames= { "f" }; + String[] namesOfMethodsToPushDown= selectedMethodNames; + String[][] signaturesOfMethodsToPushDown= selectedMethodSignatures; + String[] namesOfFieldsToPushDown= {}; + String[] namesOfMethodsToDeclareAbstract= {}; + String[][] signaturesOfMethodsToDeclareAbstract= {}; + + helper(selectedMethodNames, selectedMethodSignatures, + selectedFieldNames, + namesOfMethodsToPushDown, signaturesOfMethodsToPushDown, + namesOfFieldsToPushDown, + namesOfMethodsToDeclareAbstract, signaturesOfMethodsToDeclareAbstract, null, null); + } + @Test public void testFail0() throws Exception { String[] selectedMethodNames= {"f"};