Make LazyJavaPackageFragment#javaScope private

This commit is contained in:
Alexander Udalov
2016-04-05 20:56:12 +03:00
parent a34aaa5955
commit c091bb990b
5 changed files with 18 additions and 21 deletions
@@ -52,7 +52,7 @@ class LazyJavaPackageFragmentProvider(
override fun getPackageFragments(fqName: FqName) = emptyOrSingletonList(getPackageFragment(fqName))
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean) =
getPackageFragment(fqName)?.javaScope?.getSubPackages().orEmpty()
getPackageFragment(fqName)?.getSubPackageFqNames().orEmpty()
fun getClass(javaClass: JavaClass): ClassDescriptor? = c.javaClassResolver.resolveClass(javaClass)
@@ -70,7 +70,7 @@ class LazyJavaPackageFragmentProvider(
if (fqName == null) return null
return getPackageFragment(fqName.parent())?.javaScope?.findClassifierByJavaClass(javaClass, NoLookupLocation.FROM_JAVA_LOADER)
return getPackageFragment(fqName.parent())?.findClassifierByJavaClass(javaClass)
}
}
}
@@ -16,13 +16,16 @@
package org.jetbrains.kotlin.load.java.lazy.descriptors
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.load.java.structure.JavaPackage
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryPackageSourceElement
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
import org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter
@@ -39,7 +42,7 @@ class LazyJavaPackageFragment(
}.toMap()
}
internal val javaScope by c.storageManager.createLazyValue {
private val javaScope by c.storageManager.createLazyValue {
LazyJavaPackageScope(c, jPackage, this)
}
@@ -51,6 +54,16 @@ class LazyJavaPackageFragment(
}))
}
private val subPackages = c.storageManager.createRecursionTolerantLazyValue(
{ jPackage.subPackages.map(JavaPackage::fqName) },
// This breaks infinite recursion between loading Java descriptors and building light classes
onRecursiveCall = listOf()
)
internal fun getSubPackageFqNames(): List<FqName> = subPackages()
internal fun findClassifierByJavaClass(jClass: JavaClass): ClassDescriptor? = javaScope.findClassifierByJavaClass(jClass)
private val partToFacade by c.storageManager.createLazyValue {
val result = hashMapOf<String, String>()
kotlinClasses@for ((partName, kotlinClass) in binaryClasses) {
@@ -118,7 +118,8 @@ class LazyJavaPackageScope(
return classes(FindClassRequest(name, javaClass))
}
fun findClassifierByJavaClass(javaClass: JavaClass, location: LookupLocation) = findClassifier(javaClass.name, javaClass, location)
internal fun findClassifierByJavaClass(javaClass: JavaClass) =
findClassifier(javaClass.name, javaClass, NoLookupLocation.FROM_JAVA_LOADER)
override fun getContributedVariables(name: Name, location: LookupLocation): Collection<PropertyDescriptor> = emptyList()
@@ -143,22 +144,12 @@ class LazyJavaPackageScope(
return super.getFunctionNames(kindFilter, nameFilter)
}
private val subPackages = c.storageManager.createRecursionTolerantLazyValue(
{
jPackage.subPackages.map { sp -> sp.fqName }
},
// This breaks infinite recursion between loading Java descriptors and building light classes
onRecursiveCall = listOf()
)
override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) {
c.components.samConversionResolver.resolveSamConstructor(ownerDescriptor) {
getContributedClassifier(name, NoLookupLocation.FOR_ALREADY_TRACKED)
}?.let { result.add(it) }
}
override fun getSubPackages() = subPackages()
override fun getPropertyNames(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean) = listOf<Name>()
// we don't use implementation from super which caches all descriptors and does not use filters
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils.resolve
import org.jetbrains.kotlin.load.java.descriptors.getParentJavaStaticClassScope
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValueOfMethod
import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValuesMethod
@@ -69,8 +68,6 @@ class LazyJavaStaticClassScope(
return null
}
override fun getSubPackages(): Collection<FqName> = listOf()
override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) {
c.components.samConversionResolver.resolveSamConstructor(ownerDescriptor) {
ownerDescriptor.unsubstitutedInnerClassesScope.getContributedClassifier(name, NoLookupLocation.FOR_ALREADY_TRACKED)
@@ -21,16 +21,12 @@ import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
import org.jetbrains.kotlin.load.java.structure.JavaMethod
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
abstract class LazyJavaStaticScope(c: LazyJavaResolverContext) : LazyJavaScope(c) {
override fun getDispatchReceiverParameter() = null
abstract fun getSubPackages(): Collection<FqName>
override fun resolveMethodSignature(
method: JavaMethod, methodTypeParameters: List<TypeParameterDescriptor>, returnType: KotlinType,
valueParameters: List<ValueParameterDescriptor>