Optimize LazyScopeAdapter internals
This commit is contained in:
@@ -440,9 +440,9 @@ class TypeResolver(
|
|||||||
private fun getScopeForTypeParameter(c: TypeResolutionContext, typeParameterDescriptor: TypeParameterDescriptor): MemberScope {
|
private fun getScopeForTypeParameter(c: TypeResolutionContext, typeParameterDescriptor: TypeParameterDescriptor): MemberScope {
|
||||||
return when {
|
return when {
|
||||||
c.checkBounds -> TypeIntersector.getUpperBoundsAsType(typeParameterDescriptor).memberScope
|
c.checkBounds -> TypeIntersector.getUpperBoundsAsType(typeParameterDescriptor).memberScope
|
||||||
else -> LazyScopeAdapter(LockBasedStorageManager.NO_LOCKS.createLazyValue {
|
else -> LazyScopeAdapter {
|
||||||
TypeIntersector.getUpperBoundsAsType(typeParameterDescriptor).memberScope
|
TypeIntersector.getUpperBoundsAsType(typeParameterDescriptor).memberScope
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -281,12 +281,12 @@ open class WrappedTypeParameterDescriptor(
|
|||||||
private val _defaultType: SimpleType by lazy {
|
private val _defaultType: SimpleType by lazy {
|
||||||
KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope(
|
KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope(
|
||||||
Annotations.EMPTY, typeConstructor, emptyList(), false,
|
Annotations.EMPTY, typeConstructor, emptyList(), false,
|
||||||
LazyScopeAdapter(LockBasedStorageManager.NO_LOCKS.createLazyValue {
|
LazyScopeAdapter {
|
||||||
TypeIntersectionScope.create(
|
TypeIntersectionScope.create(
|
||||||
"Scope for type parameter " + name.asString(),
|
"Scope for type parameter " + name.asString(),
|
||||||
upperBounds
|
upperBounds
|
||||||
)
|
)
|
||||||
})
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -72,14 +72,14 @@ public abstract class AbstractTypeParameterDescriptor extends DeclarationDescrip
|
|||||||
return KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope(
|
return KotlinTypeFactory.simpleTypeWithNonTrivialMemberScope(
|
||||||
Annotations.Companion.getEMPTY(),
|
Annotations.Companion.getEMPTY(),
|
||||||
getTypeConstructor(), Collections.<TypeProjection>emptyList(), false,
|
getTypeConstructor(), Collections.<TypeProjection>emptyList(), false,
|
||||||
new LazyScopeAdapter(storageManager.createLazyValue(
|
new LazyScopeAdapter(
|
||||||
new Function0<MemberScope>() {
|
new Function0<MemberScope>() {
|
||||||
@Override
|
@Override
|
||||||
public MemberScope invoke() {
|
public MemberScope invoke() {
|
||||||
return TypeIntersectionScope.create("Scope for type parameter " + name.asString(), getUpperBounds());
|
return TypeIntersectionScope.create("Scope for type parameter " + name.asString(), getUpperBounds());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
))
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+4
-5
@@ -37,16 +37,15 @@ class LazyPackageViewDescriptorImpl(
|
|||||||
module.packageFragmentProvider.getPackageFragments(fqName)
|
module.packageFragmentProvider.getPackageFragments(fqName)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val memberScope: MemberScope = LazyScopeAdapter(storageManager.createLazyValue {
|
override val memberScope: MemberScope = LazyScopeAdapter(storageManager) {
|
||||||
if (fragments.isEmpty()) {
|
if (fragments.isEmpty()) {
|
||||||
MemberScope.Empty
|
MemberScope.Empty
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// Packages from SubpackagesScope are got via getContributedDescriptors(DescriptorKindFilter.PACKAGES, MemberScope.ALL_NAME_FILTER)
|
// Packages from SubpackagesScope are got via getContributedDescriptors(DescriptorKindFilter.PACKAGES, MemberScope.ALL_NAME_FILTER)
|
||||||
val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(module, fqName)
|
val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(module, fqName)
|
||||||
ChainedMemberScope("package view scope for $fqName in ${module.name}", scopes)
|
ChainedMemberScope.create("package view scope for $fqName in ${module.name}", scopes)
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
override fun getContainingDeclaration(): PackageViewDescriptor? {
|
override fun getContainingDeclaration(): PackageViewDescriptor? {
|
||||||
return if (fqName.isRoot) null else module.getPackage(fqName.parent())
|
return if (fqName.isRoot) null else module.getPackage(fqName.parent())
|
||||||
|
|||||||
@@ -16,9 +16,20 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.scopes
|
package org.jetbrains.kotlin.resolve.scopes
|
||||||
|
|
||||||
import org.jetbrains.kotlin.storage.NotNullLazyValue
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
|
class LazyScopeAdapter @JvmOverloads constructor(
|
||||||
|
storageManager: StorageManager = LockBasedStorageManager.NO_LOCKS,
|
||||||
|
getScope: () -> MemberScope
|
||||||
|
) : AbstractScopeAdapter() {
|
||||||
|
|
||||||
|
private val lazyScope = storageManager.createLazyValue{
|
||||||
|
getScope().let {
|
||||||
|
if (it is AbstractScopeAdapter) it.getActualScope() else it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class LazyScopeAdapter(private val scope: NotNullLazyValue<MemberScope>) : AbstractScopeAdapter() {
|
|
||||||
override val workerScope: MemberScope
|
override val workerScope: MemberScope
|
||||||
get() = scope()
|
get() = lazyScope()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user