diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 891909f1acc..615878be621 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -65,4 +65,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes public PackageFragmentDescriptor getPackageFragment(@NotNull FqName fqName) { return lazyJavaPackageFragmentProvider.getPackageFragment(fqName); } + + @Nullable + public PackageFragmentDescriptor getPackageFragment(@NotNull JavaClass javaClass) { + return lazyJavaPackageFragmentProvider.getPackageFragment(javaClass); + } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt index 12e47514418..5e725820870 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt @@ -61,9 +61,8 @@ public class LazyJavaPackageFragmentProvider( } else { val jClass = c.findJavaClass(fqName) - if (jClass != null && DescriptorResolverUtils.hasStaticMembers(jClass)) { - val correspondingClass = c.javaClassResolver.resolveClass(jClass) - if (correspondingClass != null) LazyPackageFragmentForJavaClass(c, _module, jClass) else null + if (jClass != null) { + packageFragmentsForClasses(jClass) } else null } @@ -85,7 +84,17 @@ public class LazyJavaPackageFragmentProvider( ) } + private val packageFragmentsForClasses: MemoizedFunctionToNullable = c.storageManager.createMemoizedFunctionWithNullableValues { + jClass -> + if (DescriptorResolverUtils.hasStaticMembers(jClass)) { + val correspondingClass = c.javaClassResolver.resolveClass(jClass) + if (correspondingClass != null) LazyPackageFragmentForJavaClass(c, _module, jClass) else null + } + else null + } + override fun getPackageFragment(fqName: FqName) = _packageFragments(fqName) + fun getPackageFragment(javaClass: JavaClass) = packageFragmentsForClasses(javaClass) override fun getPackageFragments(fqName: FqName) = getPackageFragment(fqName)?.let {listOf(it)}.orEmpty()