From 8888a8b67d07a252902128cbba612f51bf594d9c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 25 Aug 2009 19:44:04 +0400 Subject: [PATCH] move static members: process anonymous class creation (IDEADEV-39807) --- .../move/moveMembers/MoveMembersProcessor.java | 17 ++++++++++++----- .../intellij/refactoring/MoveMembersTest.java | 4 ++++ .../protectedConstructor/after/pack1/A.java | 4 ++++ .../protectedConstructor/after/pack1/C.java | 7 +++++++ .../protectedConstructor/after/pack2/B.java | 5 +++++ .../protectedConstructor/before/pack1/A.java | 7 +++++++ .../protectedConstructor/before/pack1/C.java | 4 ++++ .../protectedConstructor/before/pack2/B.java | 5 +++++ 8 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 testData/refactoring/moveMembers/protectedConstructor/after/pack1/A.java create mode 100644 testData/refactoring/moveMembers/protectedConstructor/after/pack1/C.java create mode 100644 testData/refactoring/moveMembers/protectedConstructor/after/pack2/B.java create mode 100644 testData/refactoring/moveMembers/protectedConstructor/before/pack1/A.java create mode 100644 testData/refactoring/moveMembers/protectedConstructor/before/pack1/C.java create mode 100644 testData/refactoring/moveMembers/protectedConstructor/before/pack2/B.java 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