diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java index 40fadbff188..d823d50e3a3 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java @@ -16,15 +16,23 @@ package org.jetbrains.jet.lang.resolve.java.scope; +import com.intellij.psi.PsiClass; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices; import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider; +import org.jetbrains.jet.lang.resolve.java.provider.PackagePsiDeclarationProvider; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; +import java.util.Collection; + +import static org.jetbrains.jet.lang.resolve.java.scope.ScopeUtils.computeAllPackageDeclarations; + public final class JavaClassStaticMembersScope extends JavaClassMembersScope { @NotNull private final FqName packageFQN; @@ -43,4 +51,14 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope { public NamespaceDescriptor getNamespace(@NotNull Name name) { return getResolver().resolveNamespace(packageFQN.child(name), DescriptorSearchRule.INCLUDE_KOTLIN); } + + @NotNull + @Override + protected Collection computeAllDescriptors() { + Collection result = super.computeAllDescriptors(); + for (PsiClass nested : declarationProvider.getPsiClass().getInnerClasses()) { + ContainerUtil.addIfNotNull(result, getNamespace(Name.identifier(nested.getName()))); + } + return result; + } } diff --git a/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.java b/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.java new file mode 100644 index 00000000000..3070b54c55b --- /dev/null +++ b/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.java @@ -0,0 +1,10 @@ +package test; + +public class DeeplyNestedStatic { + public static class Foo { + public static class Bar { + public static void method() { + } + } + } +} \ No newline at end of file diff --git a/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.txt b/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.txt new file mode 100644 index 00000000000..479c8f8e3d7 --- /dev/null +++ b/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.txt @@ -0,0 +1,23 @@ +package test + +public open class DeeplyNestedStatic : java.lang.Object { + public constructor DeeplyNestedStatic() + + public open class Foo : java.lang.Object { + public constructor Foo() + + public open class Bar : java.lang.Object { + public constructor Bar() + } + } +} + +package DeeplyNestedStatic { + + package Foo { + + package Bar { + public open fun method() : jet.Unit + } + } +} diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java index 8c3b8a90b6c..57f08fbf4d7 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaTestGenerated.java @@ -1177,6 +1177,11 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest { public void testDeeplyInnerClass() throws Exception { doTestCompiledJava("compiler/testData/loadJava/compiledJava/static/DeeplyInnerClass.java"); } + + @TestMetadata("DeeplyNestedStatic.java") + public void testDeeplyNestedStatic() throws Exception { + doTestCompiledJava("compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.java"); + } @TestMetadata("Enum.java") public void testEnum() throws Exception {