Temporarily revert changes that create separate class descriptors for each PSI class

This commit is contained in:
Andrey Breslav
2014-05-15 17:14:29 +04:00
parent 9be8501b60
commit 5ab979864b
2 changed files with 13 additions and 7 deletions
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragment import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragment
import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaClassDescriptor import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaClassDescriptor
import org.jetbrains.jet.lang.resolve.scopes.JetScope
public class LazyJavaPackageFragmentProvider( public class LazyJavaPackageFragmentProvider(
outerContext: GlobalJavaResolverContext, outerContext: GlobalJavaResolverContext,
@@ -66,7 +67,7 @@ public class LazyJavaPackageFragmentProvider(
} }
} }
private val topLevelClasses = c.storageManager.createMemoizedFunctionWithNullableValues @lambda { internal val topLevelClasses = c.storageManager.createMemoizedFunctionWithNullableValues @lambda {
(jClass: JavaClass): LazyJavaClassDescriptor? -> (jClass: JavaClass): LazyJavaClassDescriptor? ->
val fqName = jClass.getFqName() val fqName = jClass.getFqName()
if (fqName == null) return@lambda null if (fqName == null) return@lambda null
@@ -120,13 +121,18 @@ public class LazyJavaPackageFragmentProvider(
return c.javaResolverCache.getClassResolvedFromSource(fqName) return c.javaResolverCache.getClassResolvedFromSource(fqName)
} }
} }
val resolvedClassifier = getContainingScope(javaClass)?.getClassifier(javaClass.getName())
return resolvedClassifier as? ClassDescriptor ?: c.javaResolverCache.getClass(javaClass)
}
private fun getContainingScope(javaClass: JavaClass): JetScope? {
val outerClass = javaClass.getOuterClass() val outerClass = javaClass.getOuterClass()
if (outerClass == null) { if (outerClass != null) {
return c.lookupBinaryClass(javaClass) ?: topLevelClasses(javaClass) return resolveClass(outerClass)?.getUnsubstitutedInnerClassesScope()
}
else {
return getPackageFragment(javaClass.getFqName()!!.parent())?.getMemberScope()
} }
val outerClassScope = resolveClass(outerClass)?.getUnsubstitutedInnerClassesScope()
val nestedClass = outerClassScope?.getClassifier(javaClass.getName()) as? ClassDescriptor
return nestedClass ?: c.javaResolverCache.getClass(javaClass)
} }
override fun resolveClassByFqName(fqName: FqName): ClassDescriptor? { override fun resolveClassByFqName(fqName: FqName): ClassDescriptor? {
@@ -55,7 +55,7 @@ public abstract class LazyJavaPackageFragmentScope(
if (cached != null) if (cached != null)
cached cached
else { else {
val classDescriptor = c.javaClassResolver.resolveClass(jClass) val classDescriptor = c.packageFragmentProvider.topLevelClasses(jClass)
assert(classDescriptor == null || classDescriptor.getContainingDeclaration() == packageFragment, assert(classDescriptor == null || classDescriptor.getContainingDeclaration() == packageFragment,
"Wrong package fragment for $classDescriptor, expected $packageFragment") "Wrong package fragment for $classDescriptor, expected $packageFragment")
classDescriptor classDescriptor