diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java index a2ff67a9794..75a04da0952 100644 --- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java @@ -2075,6 +2075,8 @@ public final class RefactoringCoreMessages extends NLS { public static String ReorgPolicyFactory_cannot_modify; + public static String ReorgPolicyFactory_cannot_move_interface_member; + public static String ReorgPolicyFactory_cannot_move_package_to_parent; public static String ReorgPolicyFactory_cannot_move_source_to_parent; diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties index 44142c645e8..98d63ae1b86 100644 --- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties @@ -1119,6 +1119,7 @@ ReorgPolicyFactory_copy_elements_plural=Copy elements ReorgPolicyFactory_copy_elements_header_singular=Copy element ''{0}'' to ''{1}'' ReorgPolicyFactory_copy_elements_header_plural=Copy {0} elements to ''{1}'' ReorgPolicyFactory_copy_description_singular=Copy element +ReorgPolicyFactory_cannot_move_interface_member=Interface member cannot be moved to selected destination. ReorgPolicyFactory_cannot_move_source_to_parent=A source folder cannot be moved to its own parent. ReorgPolicyFactory_cannot_move_package_to_parent=A package cannot be moved to its own parent. ReorgPolicyFactory_move_description_plural=Move elements diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java index 1c29134ca24..c084f1ae0ff 100644 --- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java +++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2023 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -2367,6 +2367,11 @@ protected RefactoringStatus verifyDestination(IJavaElement destination, int loca } parent= parent.getParent(); } + if (element instanceof IMember member && member.getParent() instanceof IType parentType && parentType.isInterface()) { + if (!(destination instanceof IType destType) || !destType.isInterface()) { + return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_cannot_move_interface_member); + } + } } RefactoringStatus superStatus= super.verifyDestination(destination, location); diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/A.java new file mode 100644 index 00000000000..d5ba2875a23 --- /dev/null +++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/A.java @@ -0,0 +1,4 @@ +package p; +public interface A{ + int m(); +} \ No newline at end of file diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/B.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/B.java new file mode 100644 index 00000000000..d110d65e7a0 --- /dev/null +++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveMembers/testFail22/in/B.java @@ -0,0 +1,3 @@ +package p; +class B{ +} \ No newline at end of file diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java index 19e0940e261..c71d354dc81 100644 --- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java +++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveMembersTests.java @@ -691,9 +691,12 @@ public void testFail21() throws Exception{ RefactoringStatus.FATAL, "p.B"); } + // Issue 1299 @Test public void testFail22() throws Exception{ - //free slot + fieldMethodTypeHelper_failing(new String[0], + new String[]{"m"}, new String[][]{new String[0]}, new String[0], + RefactoringStatus.FATAL, "p.B"); } @Test