diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 84896770107..65014f301f8 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -151,11 +151,16 @@ public class LazyJavaClassMemberScope( val jNestedClass = nestedClassIndex()[name] if (jNestedClass == null) null - else - LazyJavaClassDescriptor(c, + else { + // TODO: this caching is a temporary workaround, should be replaced with properly caching the whole LazyJavaSubModule + val alreadyResolved = c.javaResolverCache.getClass(jNestedClass) + if (alreadyResolved != null) + alreadyResolved + else LazyJavaClassDescriptor(c, getContainingDeclaration(), DescriptorUtils.getFQName(getContainingDeclaration()).child(name).toSafe(), jNestedClass) + } } override fun getClassifier(name: Name): ClassifierDescriptor? = if (enumClassObject) null else nestedClasses(name) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt index 56aa8faa4e2..23b7f8d75be 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt @@ -27,8 +27,14 @@ public abstract class LazyJavaPackageFragmentScope( val javaClass = c.finder.findClass(fqName) if (javaClass == null) c.javaClassResolver.resolveClassByFqName(fqName) - else - LazyJavaClassDescriptor(c.withTypes(TypeParameterResolver.EMPTY), packageFragment, fqName, javaClass) + else { + // TODO: this caching is a temporary workaround, should be replaced with properly caching the whole LazyJavaSubModule + val cached = c.javaResolverCache.getClass(javaClass) + if (cached != null) + cached + else + LazyJavaClassDescriptor(c.withTypes(TypeParameterResolver.EMPTY), packageFragment, fqName, javaClass) + } } protected fun computeMemberIndexForSamConstructors(delegate: MemberIndex): MemberIndex = object : MemberIndex by delegate {