diff --git a/refactoring/impl/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java b/refactoring/impl/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java index 499c52ce50dc..d1350e607b3e 100644 --- a/refactoring/impl/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java +++ b/refactoring/impl/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java @@ -4,7 +4,6 @@ */ package com.intellij.refactoring.move.moveMembers; -import com.intellij.codeInsight.ChangeContextUtil; import com.intellij.lang.LanguageExtension; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -377,10 +376,18 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor { } } else if (scope instanceof PsiNewExpression) { - final PsiMethod refElement = ((PsiNewExpression)scope).resolveConstructor(); - if (refElement != null) { - if (!RefactoringHierarchyUtil.willBeInTargetClass(refElement, membersToMove, newContext, false)) { - checkAccessibility(refElement, newContext, null, member, conflicts); + final PsiNewExpression newExpression = (PsiNewExpression)scope; + final PsiAnonymousClass anonymousClass = newExpression.getAnonymousClass(); + if (anonymousClass != null) { + if (!RefactoringHierarchyUtil.willBeInTargetClass(anonymousClass, membersToMove, newContext, false)){ + checkAccessibility(anonymousClass, newContext, anonymousClass, member, conflicts); + } + } else { + final PsiMethod refElement = newExpression.resolveConstructor(); + if (refElement != null) { + if (!RefactoringHierarchyUtil.willBeInTargetClass(refElement, membersToMove, newContext, false)) { + checkAccessibility(refElement, newContext, null, member, conflicts); + } } } } diff --git a/refactoring/tests/com/intellij/refactoring/MoveMembersTest.java b/refactoring/tests/com/intellij/refactoring/MoveMembersTest.java index 6f9c430b4e77..f108268ddff8 100644 --- a/refactoring/tests/com/intellij/refactoring/MoveMembersTest.java +++ b/refactoring/tests/com/intellij/refactoring/MoveMembersTest.java @@ -62,6 +62,10 @@ public class MoveMembersTest extends MultiFileTestCase { doTest("C", "B", 0); } + public void testProtectedConstructor() throws Exception { + doTest("pack1.A", "pack1.C", 0); + } + public void testOtherPackageImport() throws Exception { doTest("pack1.ClassWithStaticMethod", "pack2.OtherClass", 1); } diff --git a/testData/refactoring/moveMembers/protectedConstructor/after/pack1/A.java b/testData/refactoring/moveMembers/protectedConstructor/after/pack1/A.java new file mode 100644 index 000000000000..46fc78fbbfbc --- /dev/null +++ b/testData/refactoring/moveMembers/protectedConstructor/after/pack1/A.java @@ -0,0 +1,4 @@ +package pack1; + +public class A { +} \ No newline at end of file diff --git a/testData/refactoring/moveMembers/protectedConstructor/after/pack1/C.java b/testData/refactoring/moveMembers/protectedConstructor/after/pack1/C.java new file mode 100644 index 000000000000..9ecf606de401 --- /dev/null +++ b/testData/refactoring/moveMembers/protectedConstructor/after/pack1/C.java @@ -0,0 +1,7 @@ +package pack1; + +public class C { + public static void foo() { + new B(){}; + } +} \ No newline at end of file diff --git a/testData/refactoring/moveMembers/protectedConstructor/after/pack2/B.java b/testData/refactoring/moveMembers/protectedConstructor/after/pack2/B.java new file mode 100644 index 000000000000..2dccb4e203e2 --- /dev/null +++ b/testData/refactoring/moveMembers/protectedConstructor/after/pack2/B.java @@ -0,0 +1,5 @@ +package pack2; + +public class B { + protected B(){} +} \ No newline at end of file diff --git a/testData/refactoring/moveMembers/protectedConstructor/before/pack1/A.java b/testData/refactoring/moveMembers/protectedConstructor/before/pack1/A.java new file mode 100644 index 000000000000..9877661b2213 --- /dev/null +++ b/testData/refactoring/moveMembers/protectedConstructor/before/pack1/A.java @@ -0,0 +1,7 @@ +package pack1; + +public class A { + public static void foo() { + new B(){}; + } +} \ No newline at end of file diff --git a/testData/refactoring/moveMembers/protectedConstructor/before/pack1/C.java b/testData/refactoring/moveMembers/protectedConstructor/before/pack1/C.java new file mode 100644 index 000000000000..bb7e3e001607 --- /dev/null +++ b/testData/refactoring/moveMembers/protectedConstructor/before/pack1/C.java @@ -0,0 +1,4 @@ +package pack1; + +public class C { +} \ No newline at end of file diff --git a/testData/refactoring/moveMembers/protectedConstructor/before/pack2/B.java b/testData/refactoring/moveMembers/protectedConstructor/before/pack2/B.java new file mode 100644 index 000000000000..2dccb4e203e2 --- /dev/null +++ b/testData/refactoring/moveMembers/protectedConstructor/before/pack2/B.java @@ -0,0 +1,5 @@ +package pack2; + +public class B { + protected B(){} +} \ No newline at end of file