From c81ea3cecad696f0e1a1b0c3513ba5f27cc10dc6 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 1 Feb 2010 17:05:26 +0300 Subject: [PATCH] move to inner: ignore package local access if class was moved to interface (IDEA-39296) --- .../moveClassesOrPackages/MoveClassToInnerProcessor.java | 2 +- .../after/pack1/Usage.java | 7 +++++++ .../after/pack1/empty.txt | 0 .../after/pack2/A.java | 6 ++++++ .../after/pack2/empty.txt | 0 .../before/pack1/Class1.java | 4 ++++ .../before/pack1/Usage.java | 4 ++++ .../before/pack1/empty.txt | 0 .../before/pack2/A.java | 4 ++++ .../before/pack2/empty.txt | 0 .../com/intellij/refactoring/MoveClassToInnerTest.java | 4 ++++ 11 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/Usage.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/A.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Class1.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Usage.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/empty.txt create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/A.java create mode 100644 java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/empty.txt diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java index eb7d8e2779ad..112436e3f89a 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassToInnerProcessor.java @@ -353,7 +353,7 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor { private boolean isInaccessibleFromTarget(final PsiElement element, final String visibility) { final PsiPackage elementPackage = JavaDirectoryService.getInstance().getPackage(element.getContainingFile().getContainingDirectory()); return !PsiUtil.isAccessible(myTargetClass, element, null) || - (visibility.equals(PsiModifier.PACKAGE_LOCAL) && !Comparing.equal(elementPackage, myTargetPackage)); + (!myTargetClass.isInterface() && visibility.equals(PsiModifier.PACKAGE_LOCAL) && !Comparing.equal(elementPackage, myTargetPackage)); } private void detectInaccessibleMemberUsages(final ConflictsCollector collector) { diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/Usage.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/Usage.java new file mode 100644 index 000000000000..94cfc26e9255 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/Usage.java @@ -0,0 +1,7 @@ +package pack1; + +import pack2.A; + +class Usage { + A.Class1 cl1; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack1/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/A.java new file mode 100644 index 000000000000..2c9548698627 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/A.java @@ -0,0 +1,6 @@ +package pack2; + +public interface A { + static class Class1 { + } +} diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/after/pack2/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Class1.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Class1.java new file mode 100644 index 000000000000..9fb46688f0be --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Class1.java @@ -0,0 +1,4 @@ +package pack1; + +class Class1 { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Usage.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Usage.java new file mode 100644 index 000000000000..d7e8ed68444e --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/Usage.java @@ -0,0 +1,4 @@ +package pack1; +class Usage { + Class1 cl1; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack1/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/A.java b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/A.java new file mode 100644 index 000000000000..abd77b402614 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/A.java @@ -0,0 +1,4 @@ +package pack2; + +public interface A { +} diff --git a/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/empty.txt b/java/java-tests/testData/refactoring/moveClassToInner/locallyUsedPackageLocalToPublicInterface/before/pack2/empty.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java index 4ff7434780c0..635ec1e43ab3 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveClassToInnerTest.java @@ -79,6 +79,10 @@ public class MoveClassToInnerTest extends CodeInsightTestCase { doTest(new String[] { "pack1.Class1" }, "pack1.A"); } + public void testLocallyUsedPackageLocalToPublicInterface() throws Exception { + doTest(new String[]{"pack1.Class1"}, "pack2.A"); + } + public void testPackageLocalClass() throws Exception { doTestConflicts("pack1.Class1", "pack2.A", "Field Class1.c2 uses a package-local class pack1.Class2."); }