Removed MemberScope.ownerDescriptor

This commit is contained in:
Stanislav Erokhin
2015-11-05 02:16:36 +03:00
parent 22f78b148c
commit 55157df3eb
36 changed files with 61 additions and 155 deletions
@@ -65,7 +65,7 @@ public class InterfaceImplBodyCodegen(
descriptor, Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME), descriptor, Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME),
Modality.FINAL, Collections.emptyList(), SourceElement.NO_SOURCE) Modality.FINAL, Collections.emptyList(), SourceElement.NO_SOURCE)
classDescriptorImpl.initialize(MemberScope.empty(classDescriptorImpl), emptySet(), null) classDescriptorImpl.initialize(MemberScope.Empty, emptySet(), null)
return classDescriptorImpl return classDescriptorImpl
} }
@@ -161,13 +161,13 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
@Override @Override
@NotNull @NotNull
public MemberScope getUnsubstitutedMemberScope() { public MemberScope getUnsubstitutedMemberScope() {
return MemberScope.Companion.empty(this); // used for getDefaultType return MemberScope.Empty.INSTANCE; // used for getDefaultType
} }
@NotNull @NotNull
@Override @Override
public MemberScope getStaticScope() { public MemberScope getStaticScope() {
return MemberScope.Companion.empty(this); return MemberScope.Empty.INSTANCE;
} }
@Override @Override
@@ -101,7 +101,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
supertypes, supertypes,
KotlinSourceElementKt.toSourceElement(element) KotlinSourceElementKt.toSourceElement(element)
); );
classDescriptor.initialize(MemberScope.Companion.empty(classDescriptor), Collections.<ConstructorDescriptor>emptySet(), null); classDescriptor.initialize(MemberScope.Empty.INSTANCE, Collections.<ConstructorDescriptor>emptySet(), null);
bindingTrace.record(CLASS_FOR_CALLABLE, callableDescriptor, classDescriptor); bindingTrace.record(CLASS_FOR_CALLABLE, callableDescriptor, classDescriptor);
return classDescriptor; return classDescriptor;
@@ -212,7 +212,7 @@ public class CodegenBinding {
new ClassDescriptorImpl(descriptor, Name.special("<script-" + simpleName + ">"), Modality.FINAL, new ClassDescriptorImpl(descriptor, Name.special("<script-" + simpleName + ">"), Modality.FINAL,
Collections.singleton(DescriptorUtilsKt.getBuiltIns(descriptor).getAnyType()), Collections.singleton(DescriptorUtilsKt.getBuiltIns(descriptor).getAnyType()),
KotlinSourceElementKt.toSourceElement(script)); KotlinSourceElementKt.toSourceElement(script));
classDescriptor.initialize(MemberScope.Companion.empty(classDescriptor), Collections.<ConstructorDescriptor>emptySet(), null); classDescriptor.initialize(MemberScope.Empty.INSTANCE, Collections.<ConstructorDescriptor>emptySet(), null);
recordClosure(trace, classDescriptor, null, asmType, fileClassesManager); recordClosure(trace, classDescriptor, null, asmType, fileClassesManager);
@@ -99,7 +99,7 @@ public class IncrementalPackageFragmentProvider(
val memberScope: NotNullLazyValue<MemberScope> = storageManager.createLazyValue { val memberScope: NotNullLazyValue<MemberScope> = storageManager.createLazyValue {
if (fqName !in fqNamesToLoad) { if (fqName !in fqNamesToLoad) {
MemberScope.empty(this) MemberScope.Empty
} }
else { else {
val moduleMapping = incrementalCache.getModuleMappingData()?.let { ModuleMapping.create(it) } val moduleMapping = incrementalCache.getModuleMappingData()?.let { ModuleMapping.create(it) }
@@ -128,10 +128,10 @@ public class IncrementalPackageFragmentProvider(
} }
if (scopes.isEmpty()) { if (scopes.isEmpty()) {
MemberScope.empty(this) MemberScope.Empty
} }
else { else {
ChainedScope(this, "Member scope for incremental compilation: union of package parts data", *scopes.toTypedArray()) ChainedScope("Member scope for incremental compilation: union of package parts data", *scopes.toTypedArray())
} }
} }
} }
@@ -151,11 +151,11 @@ public class IncrementalPackageFragmentProvider(
val memberScope = storageManager.createLazyValue { val memberScope = storageManager.createLazyValue {
val partsData = partsNames.map { incrementalCache.getPackagePartData(it) }.filterNotNull() val partsData = partsNames.map { incrementalCache.getPackagePartData(it) }.filterNotNull()
if (partsData.isEmpty()) if (partsData.isEmpty())
MemberScope.empty(this) MemberScope.Empty
else { else {
val scopes = partsData.map { IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(it.data, it.strings)) } val scopes = partsData.map { IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(it.data, it.strings)) }
ChainedScope(this, ChainedScope(
"Member scope for incremental compilation: union of multifile class parts data for $multifileClassFqName", "Member scope for incremental compilation: union of multifile class parts data for $multifileClassFqName",
*scopes.toTypedArray<MemberScope>()) *scopes.toTypedArray<MemberScope>())
} }
} }
@@ -67,7 +67,7 @@ class PropagationHeuristics {
arrayTypeFromSuper.getConstructor(), arrayTypeFromSuper.getConstructor(),
arrayTypeFromSuper.isMarkedNullable(), arrayTypeFromSuper.isMarkedNullable(),
Arrays.asList(new TypeProjectionImpl(Variance.OUT_VARIANCE, elementTypeInSuper)), Arrays.asList(new TypeProjectionImpl(Variance.OUT_VARIANCE, elementTypeInSuper)),
MemberScope.Companion.empty(elementType.getMemberScope().getOwnerDescriptor())); MemberScope.Empty.INSTANCE);
data.reportError("Return type is not a subtype of overridden method. " + data.reportError("Return type is not a subtype of overridden method. " +
"To fix it, add annotation with Kotlin signature to super method with type " "To fix it, add annotation with Kotlin signature to super method with type "
@@ -22,17 +22,14 @@ import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.resolve.scopes.*; import org.jetbrains.kotlin.resolve.scopes.*;
public class MutablePackageFragmentDescriptor extends PackageFragmentDescriptorImpl { public class MutablePackageFragmentDescriptor extends PackageFragmentDescriptorImpl {
private final MemberScope scope;
public MutablePackageFragmentDescriptor(@NotNull ModuleDescriptor module, @NotNull FqName fqName) { public MutablePackageFragmentDescriptor(@NotNull ModuleDescriptor module, @NotNull FqName fqName) {
super(module, fqName); super(module, fqName);
scope = MemberScope.Companion.empty(module);
} }
@NotNull @NotNull
@Override @Override
public MemberScope getMemberScope() { public MemberScope getMemberScope() {
return scope; return MemberScope.Empty.INSTANCE;
} }
} }
@@ -165,7 +165,7 @@ public class ConstraintSystemImpl : ConstraintSystem {
val TypeParameterDescriptor.correspondingType: KotlinType val TypeParameterDescriptor.correspondingType: KotlinType
get() = cachedTypeForVariable.getOrPut(this) { get() = cachedTypeForVariable.getOrPut(this) {
KotlinTypeImpl.create(Annotations.EMPTY, this.getTypeConstructor(), false, listOf(), MemberScope.empty(this)) KotlinTypeImpl.create(Annotations.EMPTY, this.getTypeConstructor(), false, listOf(), MemberScope.Empty)
} }
fun KotlinType.isProper() = !TypeUtils.containsSpecialType(this) { fun KotlinType.isProper() = !TypeUtils.containsSpecialType(this) {
@@ -573,7 +573,7 @@ public fun createTypeSubstitutor(conversion: (TypeParameterDescriptor) -> TypePa
if (descriptor !is TypeParameterDescriptor) return null if (descriptor !is TypeParameterDescriptor) return null
val typeParameterDescriptor = conversion(descriptor) ?: return null val typeParameterDescriptor = conversion(descriptor) ?: return null
val type = KotlinTypeImpl.create(Annotations.EMPTY, typeParameterDescriptor.getTypeConstructor(), false, listOf(), MemberScope.empty(typeParameterDescriptor)) val type = KotlinTypeImpl.create(Annotations.EMPTY, typeParameterDescriptor.getTypeConstructor(), false, listOf(), MemberScope.Empty)
return TypeProjectionImpl(type) return TypeProjectionImpl(type)
} }
}) })
@@ -45,8 +45,6 @@ class DynamicCallableDescriptors(private val builtIns: KotlinBuiltIns) {
val dynamicType = createDynamicType(builtIns) val dynamicType = createDynamicType(builtIns)
fun createDynamicDescriptorScope(call: Call, owner: DeclarationDescriptor) = object : MemberScopeImpl() { fun createDynamicDescriptorScope(call: Call, owner: DeclarationDescriptor) = object : MemberScopeImpl() {
override val ownerDescriptor: DeclarationDescriptor get() = owner
override fun printScopeStructure(p: Printer) { override fun printScopeStructure(p: Printer) {
p.println(javaClass.getSimpleName(), ": dynamic candidates for " + call) p.println(javaClass.getSimpleName(), ": dynamic candidates for " + call)
} }
@@ -59,8 +59,6 @@ protected constructor(
}.toReadOnlyList() }.toReadOnlyList()
} }
override val ownerDescriptor: DeclarationDescriptor get() = thisDescriptor
override fun getContributedClassifier(name: Name, location: LookupLocation): ClassDescriptor? { override fun getContributedClassifier(name: Name, location: LookupLocation): ClassDescriptor? {
recordLookup(name, location) recordLookup(name, location)
return classDescriptors(name).firstOrNull() return classDescriptors(name).firstOrNull()
@@ -186,6 +184,6 @@ protected constructor(
} }
private fun recordLookup(name: Name, from: LookupLocation) { private fun recordLookup(name: Name, from: LookupLocation) {
c.lookupTracker.record(from, ownerDescriptor, this, name) c.lookupTracker.record(from, thisDescriptor, this, name)
} }
} }
@@ -23,9 +23,6 @@ import org.jetbrains.kotlin.utils.Printer
public class FilteringScope(private val workerScope: MemberScope, private val predicate: (DeclarationDescriptor) -> Boolean) : MemberScope { public class FilteringScope(private val workerScope: MemberScope, private val predicate: (DeclarationDescriptor) -> Boolean) : MemberScope {
override val ownerDescriptor: DeclarationDescriptor
get() = workerScope.ownerDescriptor
override fun getContributedFunctions(name: Name, location: LookupLocation) = workerScope.getContributedFunctions(name, location).filter(predicate) override fun getContributedFunctions(name: Name, location: LookupLocation) = workerScope.getContributedFunctions(name, location).filter(predicate)
private fun <D : DeclarationDescriptor> filterDescriptor(descriptor: D?): D? private fun <D : DeclarationDescriptor> filterDescriptor(descriptor: D?): D?
@@ -104,7 +104,7 @@ class ClassifierQualifier(
override val scope: MemberScope get() { override val scope: MemberScope get() {
if (classifier !is ClassDescriptor) { if (classifier !is ClassDescriptor) {
return MemberScope.empty(classifier) return MemberScope.Empty
} }
val scopes = ArrayList<MemberScope>(3) val scopes = ArrayList<MemberScope>(3)
@@ -120,12 +120,12 @@ class ClassifierQualifier(
scopes.add(classifier.unsubstitutedInnerClassesScope) scopes.add(classifier.unsubstitutedInnerClassesScope)
} }
return ChainedScope(descriptor, "Member scope for $name as class or object", *scopes.toTypedArray()) return ChainedScope("Member scope for $name as class or object", *scopes.toTypedArray())
} }
override fun getNestedClassesAndPackageMembersScope(): MemberScope { override fun getNestedClassesAndPackageMembersScope(): MemberScope {
if (classifier !is ClassDescriptor) { if (classifier !is ClassDescriptor) {
return MemberScope.empty(classifier) return MemberScope.Empty
} }
val scopes = ArrayList<MemberScope>(2) val scopes = ArrayList<MemberScope>(2)
@@ -136,7 +136,7 @@ class ClassifierQualifier(
scopes.add(JetScopeUtils.getStaticNestedClassesScope(classifier)) scopes.add(JetScopeUtils.getStaticNestedClassesScope(classifier))
} }
return ChainedScope(descriptor, "Static scope for $name as class or object", *scopes.toTypedArray()) return ChainedScope("Static scope for $name as class or object", *scopes.toTypedArray())
} }
override fun toString() = "Classifier{$classifier}" override fun toString() = "Classifier{$classifier}"
@@ -136,7 +136,7 @@ public class TypeIntersector {
constructor, constructor,
allNullable, allNullable,
Collections.<TypeProjection>emptyList(), Collections.<TypeProjection>emptyList(),
new IntersectionScope(constructor, scopes) new ChainedScope("member scope for intersection type " + constructor, scopes)
); );
} }
@@ -153,19 +153,6 @@ public class TypeIntersector {
return upperBoundsAsType != null ? upperBoundsAsType : getBuiltIns(descriptor).getNothingType(); return upperBoundsAsType != null ? upperBoundsAsType : getBuiltIns(descriptor).getNothingType();
} }
// TODO: check intersectability, don't use a chained scope
private static class IntersectionScope extends ChainedScope {
public IntersectionScope(@NotNull TypeConstructor constructor, @NotNull MemberScope[] scopes) {
super(null, "member scope for intersection type " + constructor, scopes);
}
@NotNull
@Override
public DeclarationDescriptor getOwnerDescriptor() {
throw new UnsupportedOperationException("Should not call getContainingDeclaration on intersection scope " + this);
}
}
private static class TypeUnifier { private static class TypeUnifier {
private static class TypeParameterUsage { private static class TypeParameterUsage {
private final TypeParameterDescriptor typeParameterDescriptor; private final TypeParameterDescriptor typeParameterDescriptor;
@@ -191,7 +191,7 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
private val scope: MemberScope private val scope: MemberScope
init { init {
scope = ChainedScope(this, "synthetic package view for test", ScopeWithClassifiers(classes, this), *packageScopes.toTypedArray()) scope = ChainedScope("synthetic package view for test", ScopeWithClassifiers(classes), *packageScopes.toTypedArray())
} }
override val fqName: FqName override val fqName: FqName
@@ -211,10 +211,7 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi
get() = throw UnsupportedOperationException() get() = throw UnsupportedOperationException()
} }
private class ScopeWithClassifiers( private class ScopeWithClassifiers(classifiers: List<ClassifierDescriptor>) : MemberScopeImpl() {
classifiers: List<ClassifierDescriptor>,
override val ownerDescriptor: DeclarationDescriptor
) : MemberScopeImpl() {
private val classifierMap = HashMap<Name, ClassifierDescriptor>() private val classifierMap = HashMap<Name, ClassifierDescriptor>()
val redeclarationHandler = RedeclarationHandler.THROW_EXCEPTION val redeclarationHandler = RedeclarationHandler.THROW_EXCEPTION
@@ -66,7 +66,7 @@ public class ConstraintSystemTestData(
val number = matcher.group(1)!! val number = matcher.group(1)!!
return KotlinTypeImpl.create( return KotlinTypeImpl.create(
Annotations.EMPTY, IntegerValueTypeConstructor(number.toLong(), functionFoo.builtIns), false, listOf(), Annotations.EMPTY, IntegerValueTypeConstructor(number.toLong(), functionFoo.builtIns), false, listOf(),
MemberScope.empty(functionFoo) MemberScope.Empty
) )
} }
return typeResolver.resolveType( return typeResolver.resolveType(
@@ -61,9 +61,9 @@ import java.util.*
public class LazyJavaClassMemberScope( public class LazyJavaClassMemberScope(
c: LazyJavaResolverContext, c: LazyJavaResolverContext,
containingDeclaration: ClassDescriptor, override val ownerDescriptor: ClassDescriptor,
private val jClass: JavaClass private val jClass: JavaClass
) : LazyJavaScope(c, containingDeclaration) { ) : LazyJavaScope(c) {
override fun computeMemberIndex(): MemberIndex { override fun computeMemberIndex(): MemberIndex {
return object : ClassMemberIndex(jClass, { !it.isStatic() }) { return object : ClassMemberIndex(jClass, { !it.isStatic() }) {
@@ -634,9 +634,6 @@ public class LazyJavaClassMemberScope(
} }
} }
override val ownerDescriptor: ClassDescriptor
get() = super.ownerDescriptor as ClassDescriptor
// namespaces should be resolved elsewhere // namespaces should be resolved elsewhere
override fun getPackage(name: Name) = null override fun getPackage(name: Name) = null
@@ -36,11 +36,12 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope
public class LazyJavaPackageScope( public class LazyJavaPackageScope(
c: LazyJavaResolverContext, c: LazyJavaResolverContext,
private val jPackage: JavaPackage, private val jPackage: JavaPackage,
private val containingDeclaration: LazyJavaPackageFragment override val ownerDescriptor: LazyJavaPackageFragment
) : LazyJavaStaticScope(c, containingDeclaration) { ) : LazyJavaStaticScope(c) {
private val partToFacade = c.storageManager.createLazyValue { private val partToFacade = c.storageManager.createLazyValue {
val result = hashMapOf<String, String>() val result = hashMapOf<String, String>()
kotlinClasses@for (kotlinClass in containingDeclaration.kotlinBinaryClasses) { kotlinClasses@for (kotlinClass in ownerDescriptor.kotlinBinaryClasses) {
val header = kotlinClass.classHeader val header = kotlinClass.classHeader
when (header.kind) { when (header.kind) {
KotlinClassHeader.Kind.MULTIFILE_CLASS_PART -> { KotlinClassHeader.Kind.MULTIFILE_CLASS_PART -> {
@@ -62,25 +63,23 @@ public class LazyJavaPackageScope(
partToFacade()[partName] partToFacade()[partName]
private val deserializedPackageScope = c.storageManager.createLazyValue { private val deserializedPackageScope = c.storageManager.createLazyValue {
if (containingDeclaration.kotlinBinaryClasses.isEmpty()) { if (ownerDescriptor.kotlinBinaryClasses.isEmpty()) {
// If the scope is queried but no package parts are found, there's a possibility that we're trying to load symbols // If the scope is queried but no package parts are found, there's a possibility that we're trying to load symbols
// from an old package with the binary-incompatible facade. // from an old package with the binary-incompatible facade.
// We try to read the old package facade if there is one, to report the "incompatible ABI version" message. // We try to read the old package facade if there is one, to report the "incompatible ABI version" message.
packageFragment.oldPackageFacade?.let { binaryClass -> ownerDescriptor.oldPackageFacade?.let { binaryClass ->
c.components.deserializedDescriptorResolver.readData(binaryClass, DeserializedDescriptorResolver.KOTLIN_PACKAGE_FACADE) c.components.deserializedDescriptorResolver.readData(binaryClass, DeserializedDescriptorResolver.KOTLIN_PACKAGE_FACADE)
} }
MemberScope.empty(packageFragment) MemberScope.Empty
} }
else { else {
c.components.deserializedDescriptorResolver.createKotlinPackageScope(packageFragment, containingDeclaration.kotlinBinaryClasses) c.components.deserializedDescriptorResolver.createKotlinPackageScope(ownerDescriptor, ownerDescriptor.kotlinBinaryClasses)
} }
} }
private val packageFragment: LazyJavaPackageFragment get() = ownerDescriptor as LazyJavaPackageFragment
private val classes = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> { name -> private val classes = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> { name ->
val classId = ClassId(packageFragment.fqName, name) val classId = ClassId(ownerDescriptor.fqName, name)
val kotlinResult = c.resolveKotlinBinaryClass(c.components.kotlinClassFinder.findKotlinClass(classId)) val kotlinResult = c.resolveKotlinBinaryClass(c.components.kotlinClassFinder.findKotlinClass(classId))
when (kotlinResult) { when (kotlinResult) {
@@ -89,8 +88,8 @@ public class LazyJavaPackageScope(
is KotlinClassLookupResult.NotFound -> { is KotlinClassLookupResult.NotFound -> {
c.components.finder.findClass(classId)?.let { javaClass -> c.components.finder.findClass(classId)?.let { javaClass ->
c.javaClassResolver.resolveClass(javaClass).apply { c.javaClassResolver.resolveClass(javaClass).apply {
assert(this == null || this.containingDeclaration == packageFragment) { assert(this == null || this.containingDeclaration == ownerDescriptor) {
"Wrong package fragment for $this, expected $packageFragment" "Wrong package fragment for $this, expected $ownerDescriptor"
} }
} }
} }
@@ -51,10 +51,9 @@ import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.toReadOnlyList import org.jetbrains.kotlin.utils.toReadOnlyList
import java.util.* import java.util.*
public abstract class LazyJavaScope( public abstract class LazyJavaScope(protected val c: LazyJavaResolverContext) : MemberScopeImpl() {
protected val c: LazyJavaResolverContext, protected abstract val ownerDescriptor: DeclarationDescriptor
override val ownerDescriptor: DeclarationDescriptor
) : MemberScopeImpl() {
// this lazy value is not used at all in LazyPackageFragmentScopeForJavaPackage because we do not use caching there // this lazy value is not used at all in LazyPackageFragmentScopeForJavaPackage because we do not use caching there
// but is placed in the base class to not duplicate code // but is placed in the base class to not duplicate code
private val allDescriptors = c.storageManager.createRecursionTolerantLazyValue<Collection<DeclarationDescriptor>>( private val allDescriptors = c.storageManager.createRecursionTolerantLazyValue<Collection<DeclarationDescriptor>>(
@@ -36,8 +36,8 @@ import org.jetbrains.kotlin.types.KotlinType
public class LazyJavaStaticClassScope( public class LazyJavaStaticClassScope(
c: LazyJavaResolverContext, c: LazyJavaResolverContext,
private val jClass: JavaClass, private val jClass: JavaClass,
descriptor: LazyJavaClassDescriptor override val ownerDescriptor: LazyJavaClassDescriptor
) : LazyJavaStaticScope(c, descriptor) { ) : LazyJavaStaticScope(c) {
override fun computeMemberIndex(): MemberIndex { override fun computeMemberIndex(): MemberIndex {
val delegate = ClassMemberIndex(jClass) { it.isStatic() } val delegate = ClassMemberIndex(jClass) { it.isStatic() }
@@ -110,9 +110,6 @@ public class LazyJavaStaticClassScope(
} }
} }
override val ownerDescriptor: LazyJavaClassDescriptor
get() = super.ownerDescriptor as LazyJavaClassDescriptor
private fun getStaticFunctionsFromJavaSuperClasses(name: Name, descriptor: ClassDescriptor): Set<SimpleFunctionDescriptor> { private fun getStaticFunctionsFromJavaSuperClasses(name: Name, descriptor: ClassDescriptor): Set<SimpleFunctionDescriptor> {
val staticScope = descriptor.getParentJavaStaticClassScope() ?: return emptySet() val staticScope = descriptor.getParentJavaStaticClassScope() ?: return emptySet()
return staticScope.getContributedFunctions(name, NoLookupLocation.WHEN_GET_SUPER_MEMBERS).map { it as SimpleFunctionDescriptor }.toSet() return staticScope.getContributedFunctions(name, NoLookupLocation.WHEN_GET_SUPER_MEMBERS).map { it as SimpleFunctionDescriptor }.toSet()
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.load.java.lazy.descriptors package org.jetbrains.kotlin.load.java.lazy.descriptors
import org.jetbrains.kotlin.descriptors.ClassOrPackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
@@ -25,10 +24,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
public abstract class LazyJavaStaticScope( public abstract class LazyJavaStaticScope(c: LazyJavaResolverContext) : LazyJavaScope(c) {
c: LazyJavaResolverContext,
descriptor: ClassOrPackageFragmentDescriptor
) : LazyJavaScope(c, descriptor) {
override fun getDispatchReceiverParameter() = null override fun getDispatchReceiverParameter() = null
@@ -42,7 +42,7 @@ class BuiltInClassesAreSerializableOnJvm(
private fun createMockJavaIoSerializableType(): KotlinType { private fun createMockJavaIoSerializableType(): KotlinType {
val mockJavaIoPackageFragment = object : PackageFragmentDescriptorImpl(moduleDescriptor, FqName("java.io")) { val mockJavaIoPackageFragment = object : PackageFragmentDescriptorImpl(moduleDescriptor, FqName("java.io")) {
override fun getMemberScope() = MemberScope.empty(this) override fun getMemberScope() = MemberScope.Empty
} }
//NOTE: can't reference anyType right away, because this is sometimes called when JvmBuiltIns are initializing //NOTE: can't reference anyType right away, because this is sometimes called when JvmBuiltIns are initializing
@@ -56,7 +56,7 @@ class BuiltInClassesAreSerializableOnJvm(
mockJavaIoPackageFragment, Name.identifier("Serializable"), Modality.ABSTRACT, superTypes, SourceElement.NO_SOURCE mockJavaIoPackageFragment, Name.identifier("Serializable"), Modality.ABSTRACT, superTypes, SourceElement.NO_SOURCE
) )
mockSerializableClass.initialize(MemberScope.empty(mockSerializableClass), emptySet(), null) mockSerializableClass.initialize(MemberScope.Empty, emptySet(), null)
return mockSerializableClass.defaultType return mockSerializableClass.defaultType
} }
@@ -104,9 +104,9 @@ public final class DeserializedDescriptorResolver {
} }
} }
if (list.isEmpty()) { if (list.isEmpty()) {
return MemberScope.Companion.empty(descriptor); return MemberScope.Empty.INSTANCE;
} }
return new ChainedScope(descriptor, "Member scope for union of package parts data", list.toArray(new MemberScope[list.size()])); return new ChainedScope("Member scope for union of package parts data", list.toArray(new MemberScope[list.size()]));
} }
@Nullable @Nullable
@@ -41,9 +41,6 @@ class FunctionClassScope(
} }
} }
override val ownerDescriptor: DeclarationDescriptor
get() = functionClass
override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> { override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
if (!kindFilter.acceptsKinds(DescriptorKindFilter.CALLABLES.kindMask)) return listOf() if (!kindFilter.acceptsKinds(DescriptorKindFilter.CALLABLES.kindMask)) return listOf()
return allDescriptors() return allDescriptors()
@@ -76,7 +73,7 @@ class FunctionClassScope(
} }
override fun conflict(fromSuper: CallableMemberDescriptor, fromCurrent: CallableMemberDescriptor) { override fun conflict(fromSuper: CallableMemberDescriptor, fromCurrent: CallableMemberDescriptor) {
error("Conflict in scope of $ownerDescriptor: $fromSuper vs $fromCurrent") error("Conflict in scope of $functionClass: $fromSuper vs $fromCurrent")
} }
} }
) )
@@ -84,7 +84,6 @@ public abstract class AbstractTypeParameterDescriptor extends DeclarationDescrip
scopes.add(bound.getMemberScope()); scopes.add(bound.getMemberScope());
} }
return new ChainedScope( return new ChainedScope(
AbstractTypeParameterDescriptor.this,
"Scope for type parameter " + name.asString(), "Scope for type parameter " + name.asString(),
scopes.toArray(new MemberScope[scopes.size()]) scopes.toArray(new MemberScope[scopes.size()])
); );
@@ -257,12 +257,6 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase {
return result; return result;
} }
@NotNull
@Override
public DeclarationDescriptor getOwnerDescriptor() {
return EnumEntrySyntheticClassDescriptor.this;
}
@NotNull @NotNull
@Override @Override
public Collection<DeclarationDescriptor> getContributedDescriptors( public Collection<DeclarationDescriptor> getContributedDescriptors(
@@ -41,11 +41,11 @@ public class LazyPackageViewDescriptorImpl(
override val memberScope: MemberScope = LazyScopeAdapter(storageManager.createLazyValue { override val memberScope: MemberScope = LazyScopeAdapter(storageManager.createLazyValue {
if (fragments.isEmpty()) { if (fragments.isEmpty()) {
MemberScope.empty(this) MemberScope.Empty
} }
else { else {
val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(module, fqName) val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(module, fqName)
ChainedScope(this, "package view scope for $fqName in ${module.getName()}", *scopes.toTypedArray()) ChainedScope("package view scope for $fqName in ${module.getName()}", *scopes.toTypedArray())
} }
}) })
@@ -26,12 +26,9 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl
import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.Printer
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.sure import java.util.*
import java.util.ArrayList
public class SubpackagesScope(private val moduleDescriptor: ModuleDescriptor, private val fqName: FqName) : MemberScopeImpl() { public class SubpackagesScope(private val moduleDescriptor: ModuleDescriptor, private val fqName: FqName) : MemberScopeImpl() {
override val ownerDescriptor: DeclarationDescriptor
get() = moduleDescriptor.getPackage(fqName)
override fun getPackage(name: Name): PackageViewDescriptor? { override fun getPackage(name: Name): PackageViewDescriptor? {
if (name.isSpecial()) { if (name.isSpecial()) {
@@ -64,8 +61,6 @@ public class SubpackagesScope(private val moduleDescriptor: ModuleDescriptor, pr
p.println(javaClass.getSimpleName(), " {") p.println(javaClass.getSimpleName(), " {")
p.pushIndent() p.pushIndent()
p.println("thisDescriptor = ", ownerDescriptor)
p.popIndent() p.popIndent()
p.println("}") p.println("}")
} }
@@ -33,9 +33,6 @@ public abstract class AbstractScopeAdapter : MemberScope {
else else
workerScope workerScope
override val ownerDescriptor: DeclarationDescriptor
get() = workerScope.ownerDescriptor
override fun getContributedFunctions(name: Name, location: LookupLocation): Collection<FunctionDescriptor> { override fun getContributedFunctions(name: Name, location: LookupLocation): Collection<FunctionDescriptor> {
return workerScope.getContributedFunctions(name, location) return workerScope.getContributedFunctions(name, location)
} }
@@ -23,16 +23,12 @@ import org.jetbrains.kotlin.util.collectionUtils.getFirstMatch
import org.jetbrains.kotlin.util.collectionUtils.getFromAllScopes import org.jetbrains.kotlin.util.collectionUtils.getFromAllScopes
import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.Printer
public open class ChainedScope( public class ChainedScope(
private val descriptor: DeclarationDescriptor?/* it's nullable as a hack for TypeUtils.intersect() */,
private val debugName: String, private val debugName: String,
vararg scopes: MemberScope vararg scopes: MemberScope
) : MemberScope { ) : MemberScope {
private val scopeChain = scopes.clone() private val scopeChain = scopes.clone()
override val ownerDescriptor: DeclarationDescriptor
get() = descriptor!!
override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor?
= getFirstMatch(scopeChain) { it.getContributedClassifier(name, location) } = getFirstMatch(scopeChain) { it.getContributedClassifier(name, location) }
@@ -17,16 +17,11 @@
package org.jetbrains.kotlin.resolve.scopes package org.jetbrains.kotlin.resolve.scopes
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.Printer
public class InnerClassesScopeWrapper(val workerScope: MemberScope) : MemberScopeImpl() { public class InnerClassesScopeWrapper(val workerScope: MemberScope) : MemberScopeImpl() {
override val ownerDescriptor: DeclarationDescriptor
get() = workerScope.ownerDescriptor
override fun getContributedClassifier(name: Name, location: LookupLocation) = workerScope.getContributedClassifier(name, location) as? ClassDescriptor override fun getContributedClassifier(name: Name, location: LookupLocation) = workerScope.getContributedClassifier(name, location) as? ClassDescriptor
override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): List<ClassDescriptor> { override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): List<ClassDescriptor> {
@@ -25,8 +25,6 @@ import java.lang.reflect.Modifier
public interface MemberScope : ResolutionScope { public interface MemberScope : ResolutionScope {
val ownerDescriptor: DeclarationDescriptor
public override fun getContributedVariables(name: Name, location: LookupLocation): Collection<PropertyDescriptor> public override fun getContributedVariables(name: Name, location: LookupLocation): Collection<PropertyDescriptor>
@Deprecated("Should be removed soon") @Deprecated("Should be removed soon")
@@ -37,19 +35,13 @@ public interface MemberScope : ResolutionScope {
*/ */
public fun printScopeStructure(p: Printer) public fun printScopeStructure(p: Printer)
companion object { object Empty : MemberScopeImpl() {
public fun empty(ownerDescriptor: DeclarationDescriptor): MemberScope { override fun printScopeStructure(p: Printer) {
return object : MemberScopeImpl() { p.println("Empty member scope")
override val ownerDescriptor = ownerDescriptor
override fun toString() = "Empty scope with owner: $ownerDescriptor"
override fun printScopeStructure(p: Printer) {
p.println(toString())
}
}
} }
}
companion object {
public val ALL_NAME_FILTER: (Name) -> Boolean = { true } public val ALL_NAME_FILTER: (Name) -> Boolean = { true }
} }
} }
@@ -57,9 +57,6 @@ public class StaticScopeForKotlinClass(
override fun getContributedFunctions(name: Name, location: LookupLocation) = functions.filterTo(ArrayList<FunctionDescriptor>(2)) { it.getName() == name } override fun getContributedFunctions(name: Name, location: LookupLocation) = functions.filterTo(ArrayList<FunctionDescriptor>(2)) { it.getName() == name }
override val ownerDescriptor: DeclarationDescriptor
get() = containingClass
override fun printScopeStructure(p: Printer) { override fun printScopeStructure(p: Printer) {
p.println("Static scope for $containingClass") p.println("Static scope for $containingClass")
} }
@@ -67,9 +67,6 @@ public class SubstitutingScope(private val workerScope: MemberScope, private val
override fun getPackage(name: Name) = workerScope.getPackage(name) override fun getPackage(name: Name) = workerScope.getPackage(name)
override val ownerDescriptor: DeclarationDescriptor
get() = workerScope.ownerDescriptor
override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, override fun getContributedDescriptors(kindFilter: DescriptorKindFilter,
nameFilter: (Name) -> Boolean) = _allDescriptors nameFilter: (Name) -> Boolean) = _allDescriptors
@@ -191,12 +191,6 @@ public class ErrorUtils {
return Collections.<FunctionDescriptor>singleton(createErrorFunction(this)); return Collections.<FunctionDescriptor>singleton(createErrorFunction(this));
} }
@NotNull
@Override
public DeclarationDescriptor getOwnerDescriptor() {
return ERROR_MODULE;
}
@NotNull @NotNull
@Override @Override
public Collection<DeclarationDescriptor> getContributedDescriptors( public Collection<DeclarationDescriptor> getContributedDescriptors(
@@ -248,12 +242,6 @@ public class ErrorUtils {
throw new IllegalStateException(); throw new IllegalStateException();
} }
@NotNull
@Override
public DeclarationDescriptor getOwnerDescriptor() {
return ERROR_MODULE;
}
@NotNull @NotNull
@Override @Override
public Collection<DeclarationDescriptor> getContributedDescriptors( public Collection<DeclarationDescriptor> getContributedDescriptors(
@@ -116,9 +116,6 @@ public abstract class DeserializedMemberScope protected constructor(
protected abstract fun addClassDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) protected abstract fun addClassDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean)
override val ownerDescriptor: DeclarationDescriptor
get() = c.containingDeclaration
protected fun computeDescriptors( protected fun computeDescriptors(
kindFilter: DescriptorKindFilter, kindFilter: DescriptorKindFilter,
nameFilter: (Name) -> Boolean, nameFilter: (Name) -> Boolean,
@@ -180,13 +177,13 @@ public abstract class DeserializedMemberScope protected constructor(
p.println(javaClass.simpleName, " {") p.println(javaClass.simpleName, " {")
p.pushIndent() p.pushIndent()
p.println("containingDeclaration = " + ownerDescriptor) p.println("containingDeclaration = " + c.containingDeclaration)
p.popIndent() p.popIndent()
p.println("}") p.println("}")
} }
private fun recordLookup(name: Name, from: LookupLocation) { private fun recordLookup(name: Name, from: LookupLocation) {
c.components.lookupTracker.record(from, ownerDescriptor, this, name) c.components.lookupTracker.record(from, c.containingDeclaration, this, name)
} }
} }
@@ -40,7 +40,7 @@ private class PackageFragmentWithMissingDependencies(override val fqName: FqName
} }
} }
private class ScopeWithMissingDependencies(val fqName: FqName, override val ownerDescriptor: DeclarationDescriptor) : MemberScopeImpl() { private class ScopeWithMissingDependencies(val fqName: FqName, val ownerDescriptor: DeclarationDescriptor) : MemberScopeImpl() {
override fun printScopeStructure(p: Printer) { override fun printScopeStructure(p: Printer) {
p.println("Special scope for decompiler, containing class with any name") p.println("Special scope for decompiler, containing class with any name")
@@ -71,7 +71,7 @@ private class MissingDependencyErrorClassDescriptor(
val emptyConstructor = ConstructorDescriptorImpl.create(this, Annotations.EMPTY, true, SourceElement.NO_SOURCE) val emptyConstructor = ConstructorDescriptorImpl.create(this, Annotations.EMPTY, true, SourceElement.NO_SOURCE)
emptyConstructor.initialize(listOf(), listOf(), Visibilities.DEFAULT_VISIBILITY) emptyConstructor.initialize(listOf(), listOf(), Visibilities.DEFAULT_VISIBILITY)
emptyConstructor.setReturnType(createErrorType("<ERROR RETURN TYPE>")) emptyConstructor.setReturnType(createErrorType("<ERROR RETURN TYPE>"))
initialize(MemberScope.empty(this), setOf(emptyConstructor), emptyConstructor) initialize(MemberScope.Empty, setOf(emptyConstructor), emptyConstructor)
} }
override fun substitute(substitutor: TypeSubstitutor) = this override fun substitute(substitutor: TypeSubstitutor) = this