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.");
}