LazyJavaSubModule turned into a JavaPackageFragmentProvider
This commit is contained in:
+18
-10
@@ -8,13 +8,17 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaPackage
|
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaPackage
|
||||||
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass
|
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver
|
||||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils
|
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.Name
|
||||||
|
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
|
||||||
|
|
||||||
public open class LazyJavaSubModule(
|
public open class LazyJavaSubModule(
|
||||||
private val outerContext: GlobalJavaResolverContext,
|
private val outerContext: GlobalJavaResolverContext,
|
||||||
private val module: ModuleDescriptor
|
private val _module: ModuleDescriptor
|
||||||
) {
|
) : JavaPackageFragmentProvider {
|
||||||
private val c = LazyJavaResolverContext(
|
private val c = LazyJavaResolverContext(
|
||||||
this,
|
this,
|
||||||
outerContext.storageManager,
|
outerContext.storageManager,
|
||||||
@@ -28,26 +32,30 @@ public open class LazyJavaSubModule(
|
|||||||
outerContext.javaDescriptorResolver
|
outerContext.javaDescriptorResolver
|
||||||
)
|
)
|
||||||
|
|
||||||
private val _packageFragments: MemoizedFunctionToNullable<FqName, PackageFragmentDescriptor> = c.storageManager.createMemoizedFunctionWithNullableValues {
|
override fun getModule() = _module
|
||||||
|
|
||||||
|
override fun getJavaDescriptorResolver() = c.javaDescriptorResolver
|
||||||
|
|
||||||
|
private val _packageFragments: MemoizedFunctionToNullable<FqName, JavaPackageFragmentDescriptor> = c.storageManager.createMemoizedFunctionWithNullableValues {
|
||||||
fqName ->
|
fqName ->
|
||||||
val jPackage = c.finder.findPackage(fqName)
|
val jPackage = c.finder.findPackage(fqName)
|
||||||
if (jPackage != null) {
|
if (jPackage != null) {
|
||||||
LazyPackageFragmentForJavaPackage(c, module, jPackage)
|
LazyPackageFragmentForJavaPackage(c, _module, jPackage)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val jClass = c.finder.findClass(fqName)
|
val jClass = c.finder.findClass(fqName)
|
||||||
if (jClass != null && DescriptorResolverUtils.isJavaClassVisibleAsPackage(jClass)) {
|
if (jClass != null && DescriptorResolverUtils.isJavaClassVisibleAsPackage(jClass)) {
|
||||||
LazyPackageFragmentForJavaClass(c, module, jClass)
|
LazyPackageFragmentForJavaClass(c, _module, jClass)
|
||||||
}
|
}
|
||||||
else null
|
else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findParent(fqName: FqName) =
|
override fun getPackageFragment(fqName: FqName) = _packageFragments(fqName)
|
||||||
if (fqName.isRoot()) module else getPackageFragment(fqName.parent())
|
override fun getPackageFragments(fqName: FqName) = getPackageFragment(fqName)?.let {listOf(it)} ?: listOf()
|
||||||
?: throw IllegalStateException("Cannot resolve parent package for: $fqName")
|
|
||||||
|
|
||||||
fun getPackageFragment(fqName: FqName) = _packageFragments(fqName)
|
override fun getSubPackagesOf(fqName: FqName) = listOf() // TODO
|
||||||
|
override fun getClassNamesInPackage(packageName: FqName) = listOf() // TODO
|
||||||
|
|
||||||
fun getClass(fqName: FqName): ClassDescriptor? = c.javaClassResolver.resolveClassByFqName(fqName)
|
fun getClass(fqName: FqName): ClassDescriptor? = c.javaClassResolver.resolveClassByFqName(fqName)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user