Enabling creating different descriptors for different Java classes
This commit is contained in:
+6
-12
@@ -28,7 +28,6 @@ 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,
|
||||||
@@ -67,7 +66,7 @@ public class LazyJavaPackageFragmentProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val topLevelClasses = c.storageManager.createMemoizedFunctionWithNullableValues @lambda {
|
private 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
|
||||||
@@ -121,18 +120,13 @@ 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 resolveClass(outerClass)?.getUnsubstitutedInnerClassesScope()
|
return c.lookupBinaryClass(javaClass) ?: topLevelClasses(javaClass)
|
||||||
}
|
|
||||||
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? {
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ public abstract class LazyJavaPackageFragmentScope(
|
|||||||
if (cached != null)
|
if (cached != null)
|
||||||
cached
|
cached
|
||||||
else {
|
else {
|
||||||
val classDescriptor = c.packageFragmentProvider.topLevelClasses(jClass)
|
val classDescriptor = c.javaClassResolver.resolveClass(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
|
||||||
|
|||||||
Reference in New Issue
Block a user