diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt index f170d52f44b..589229bc29d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt @@ -35,12 +35,8 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.DelegationToTraitImpl import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature import org.jetbrains.kotlin.resolve.scopes.KtScope -import org.jetbrains.org.objectweb.asm.AnnotationVisitor -import org.jetbrains.org.objectweb.asm.FieldVisitor import org.jetbrains.org.objectweb.asm.MethodVisitor -import org.jetbrains.org.objectweb.asm.Opcodes.ACC_FINAL -import org.jetbrains.org.objectweb.asm.Opcodes.ACC_PUBLIC -import org.jetbrains.org.objectweb.asm.Opcodes.V1_6 +import org.jetbrains.org.objectweb.asm.Opcodes.* import java.util.* public class InterfaceImplBodyCodegen( @@ -69,7 +65,7 @@ public class InterfaceImplBodyCodegen( descriptor, Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME), Modality.FINAL, Collections.emptyList(), SourceElement.NO_SOURCE) - classDescriptorImpl.initialize(KtScope.Empty, emptySet(), null) + classDescriptorImpl.initialize(KtScope.empty(classDescriptorImpl), emptySet(), null) return classDescriptorImpl } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java index 361815e5220..e01eca518ca 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MutableClassDescriptor.java @@ -161,13 +161,13 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class @Override @NotNull public KtScope getUnsubstitutedMemberScope() { - return KtScope.Empty.INSTANCE$; // used for getDefaultType + return KtScope.Companion.empty(this); // used for getDefaultType } @NotNull @Override public KtScope getStaticScope() { - return KtScope.Empty.INSTANCE$; + return KtScope.Companion.empty(this); } @Override diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java index fbfa08c7c58..073fc22fa32 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java @@ -101,7 +101,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid { supertypes, KotlinSourceElementKt.toSourceElement(element) ); - classDescriptor.initialize(KtScope.Empty.INSTANCE$, Collections.emptySet(), null); + classDescriptor.initialize(KtScope.Companion.empty(classDescriptor), Collections.emptySet(), null); bindingTrace.record(CLASS_FOR_CALLABLE, callableDescriptor, classDescriptor); return classDescriptor; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java index 48e5974ff2a..505922490f8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenBinding.java @@ -212,7 +212,7 @@ public class CodegenBinding { new ClassDescriptorImpl(descriptor, Name.special(""), Modality.FINAL, Collections.singleton(DescriptorUtilsKt.getBuiltIns(descriptor).getAnyType()), KotlinSourceElementKt.toSourceElement(script)); - classDescriptor.initialize(KtScope.Empty.INSTANCE$, Collections.emptySet(), null); + classDescriptor.initialize(KtScope.Companion.empty(classDescriptor), Collections.emptySet(), null); recordClosure(trace, classDescriptor, null, asmType, fileClassesManager); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt index cffb3e17f3d..cbed27bd7a0 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -99,7 +99,7 @@ public class IncrementalPackageFragmentProvider( val memberScope: NotNullLazyValue = storageManager.createLazyValue { if (fqName !in fqNamesToLoad) { - KtScope.Empty + KtScope.empty(this) } else { val moduleMapping = incrementalCache.getModuleMappingData()?.let { ModuleMapping.create(it) } @@ -128,7 +128,7 @@ public class IncrementalPackageFragmentProvider( } if (scopes.isEmpty()) { - KtScope.Empty + KtScope.empty(this) } else { ChainedScope(this, "Member scope for incremental compilation: union of package parts data", *scopes.toTypedArray()) @@ -151,7 +151,7 @@ public class IncrementalPackageFragmentProvider( val memberScope = storageManager.createLazyValue { val partsData = partsNames.map { incrementalCache.getPackagePartData(it) }.filterNotNull() if (partsData.isEmpty()) - KtScope.Empty + KtScope.empty(this) else { val scopes = partsData.map { IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(it.data, it.strings)) } ChainedScope(this, diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/PropagationHeuristics.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/PropagationHeuristics.java index adefddbbef4..86c5713744f 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/PropagationHeuristics.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/PropagationHeuristics.java @@ -67,7 +67,7 @@ class PropagationHeuristics { arrayTypeFromSuper.getConstructor(), arrayTypeFromSuper.isMarkedNullable(), Arrays.asList(new TypeProjectionImpl(Variance.OUT_VARIANCE, elementTypeInSuper)), - KtScope.Empty.INSTANCE$); + KtScope.Companion.empty(elementType.getMemberScope().getContainingDeclaration())); data.reportError("Return type is not a subtype of overridden method. " + "To fix it, add annotation with Kotlin signature to super method with type " diff --git a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/MutablePackageFragmentDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/MutablePackageFragmentDescriptor.java index a3980d1b827..e647825dcba 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/MutablePackageFragmentDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/MutablePackageFragmentDescriptor.java @@ -27,7 +27,7 @@ public class MutablePackageFragmentDescriptor extends PackageFragmentDescriptorI public MutablePackageFragmentDescriptor(@NotNull ModuleDescriptor module, @NotNull FqName fqName) { super(module, fqName); - scope = new SimpleKtScope(this, "Members of " + fqName + " in " + module); + scope = KtScope.Companion.empty(module); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt index 49bf83b93ff..8ebc7b2814b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemImpl.kt @@ -165,7 +165,7 @@ public class ConstraintSystemImpl : ConstraintSystem { val TypeParameterDescriptor.correspondingType: KotlinType get() = cachedTypeForVariable.getOrPut(this) { - KotlinTypeImpl.create(Annotations.EMPTY, this.getTypeConstructor(), false, listOf(), KtScope.Empty) + KotlinTypeImpl.create(Annotations.EMPTY, this.getTypeConstructor(), false, listOf(), KtScope.empty(this)) } fun KotlinType.isProper() = !TypeUtils.containsSpecialType(this) { @@ -573,7 +573,7 @@ public fun createTypeSubstitutor(conversion: (TypeParameterDescriptor) -> TypePa if (descriptor !is TypeParameterDescriptor) return null val typeParameterDescriptor = conversion(descriptor) ?: return null - val type = KotlinTypeImpl.create(Annotations.EMPTY, typeParameterDescriptor.getTypeConstructor(), false, listOf(), KtScope.Empty) + val type = KotlinTypeImpl.create(Annotations.EMPTY, typeParameterDescriptor.getTypeConstructor(), false, listOf(), KtScope.empty(typeParameterDescriptor)) return TypeProjectionImpl(type) } }) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt index 6d310709afd..191946d3f12 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt @@ -104,7 +104,7 @@ class ClassifierQualifier( override val scope: KtScope get() { if (classifier !is ClassDescriptor) { - return KtScope.Empty + return KtScope.empty(classifier) } val scopes = ArrayList(3) @@ -125,7 +125,7 @@ class ClassifierQualifier( override fun getNestedClassesAndPackageMembersScope(): KtScope { if (classifier !is ClassDescriptor) { - return KtScope.Empty + return KtScope.empty(classifier) } val scopes = ArrayList(2) diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt index b707058044e..84222d078d6 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt @@ -46,6 +46,7 @@ import org.jetbrains.kotlin.test.util.DescriptorValidator.ValidationVisitor.erro import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator.Configuration import org.jetbrains.kotlin.types.TypeSubstitutor +import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.sure import java.io.File import java.net.URLClassLoader @@ -210,8 +211,11 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi get() = throw UnsupportedOperationException() } - private class ScopeWithClassifiers(classifiers: List, ownerDescriptor: DeclarationDescriptor) - : SimpleKtScope(ownerDescriptor, "runtime descriptor loader test") { + private class ScopeWithClassifiers( + classifiers: List, + val ownerDescriptor: DeclarationDescriptor + ) : KtScopeImpl() { + override fun getContainingDeclaration() = ownerDescriptor private val classifierMap = HashMap() val redeclarationHandler = RedeclarationHandler.THROW_EXCEPTION @@ -227,6 +231,10 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi override fun getClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? = classifierMap[name] override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection = classifierMap.values + + override fun printScopeStructure(p: Printer) { + p.println("runtime descriptor loader test") + } } } diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/ConstraintSystemTestData.kt b/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/ConstraintSystemTestData.kt index 17adb7ef131..c2f75ab8571 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/ConstraintSystemTestData.kt +++ b/compiler/tests/org/jetbrains/kotlin/resolve/constraintSystem/ConstraintSystemTestData.kt @@ -66,7 +66,7 @@ public class ConstraintSystemTestData( val number = matcher.group(1)!! return KotlinTypeImpl.create( Annotations.EMPTY, IntegerValueTypeConstructor(number.toLong(), functionFoo.builtIns), false, listOf(), - KtScope.Empty + KtScope.empty(functionFoo) ) } return typeResolver.resolveType( diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt index 0afb0fd0edb..36f5c92e44e 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt @@ -71,7 +71,7 @@ public class LazyJavaPackageScope( c.components.deserializedDescriptorResolver.readData(binaryClass, DeserializedDescriptorResolver.KOTLIN_PACKAGE_FACADE) } - KtScope.Empty + KtScope.empty(packageFragment) } else { c.components.deserializedDescriptorResolver.createKotlinPackageScope(packageFragment, containingDeclaration.kotlinBinaryClasses) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt index 0e1b68b8e78..2b1239010b8 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/BuiltInClassesAreSerializableOnJvm.kt @@ -42,7 +42,7 @@ class BuiltInClassesAreSerializableOnJvm( private fun createMockJavaIoSerializableType(): KotlinType { val mockJavaIoPackageFragment = object : PackageFragmentDescriptorImpl(moduleDescriptor, FqName("java.io")) { - override fun getMemberScope() = KtScope.Empty + override fun getMemberScope() = KtScope.empty(this) } //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 ) - mockSerializableClass.initialize(KtScope.Empty, emptySet(), null) + mockSerializableClass.initialize(KtScope.empty(mockSerializableClass), emptySet(), null) return mockSerializableClass.defaultType } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java index a411909c803..97eced65a13 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java @@ -104,7 +104,7 @@ public final class DeserializedDescriptorResolver { } } if (list.isEmpty()) { - return KtScope.Empty.INSTANCE$; + return KtScope.Companion.empty(descriptor); } return new ChainedScope(descriptor, "Member scope for union of package parts data", list.toArray(new KtScope[list.size()])); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt index 67456a09efb..4f044f8db8d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt @@ -41,7 +41,7 @@ public class LazyPackageViewDescriptorImpl( override val memberScope: KtScope = LazyScopeAdapter(storageManager.createLazyValue { if (fragments.isEmpty()) { - KtScope.Empty + KtScope.empty(this) } else { val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(module, fqName) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScope.kt index b647c679db1..52bbbbb3ec5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScope.kt @@ -50,19 +50,19 @@ public interface KtScope { */ public fun printScopeStructure(p: Printer) - public object Empty : KtScopeImpl() { - override fun getContainingDeclaration(): DeclarationDescriptor { - throw UnsupportedOperationException("Don't take containing declaration of the Empty scope") - } - - override fun toString() = "Empty" - - override fun printScopeStructure(p: Printer) { - p.println("Empty") - } - } - companion object { + public fun empty(ownerDescriptor: DeclarationDescriptor): KtScope { + return object : KtScopeImpl() { + override fun getContainingDeclaration() = ownerDescriptor + + override fun toString() = "Empty scope with owner: $ownerDescriptor" + + override fun printScopeStructure(p: Printer) { + p.println(toString()) + } + } + } + public val ALL_NAME_FILTER: (Name) -> Boolean = { true } } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScopeImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScopeImpl.kt index c7c95d38227..9364ebb5f09 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScopeImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/KtScopeImpl.kt @@ -35,12 +35,4 @@ abstract class KtScopeImpl : KtScope { // This method should not be implemented here by default: every scope class has its unique structure pattern abstract override fun printScopeStructure(p: Printer) -} - -open class SimpleKtScope(val ownerDescriptor: DeclarationDescriptor, val debugName: String): KtScopeImpl() { - override fun printScopeStructure(p: Printer) { - p.println(javaClass.getSimpleName(), ": ", debugName, " for ", ownerDescriptor, " {") - } - - override fun getContainingDeclaration() = ownerDescriptor } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/missingDependencies.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/missingDependencies.kt index 3e8a3a7d962..a3f18e073f1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/missingDependencies.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/missingDependencies.kt @@ -74,7 +74,7 @@ private class MissingDependencyErrorClassDescriptor( val emptyConstructor = ConstructorDescriptorImpl.create(this, Annotations.EMPTY, true, SourceElement.NO_SOURCE) emptyConstructor.initialize(listOf(), listOf(), Visibilities.DEFAULT_VISIBILITY) emptyConstructor.setReturnType(createErrorType("")) - initialize(KtScope.Empty, setOf(emptyConstructor), emptyConstructor) + initialize(KtScope.empty(this), setOf(emptyConstructor), emptyConstructor) } override fun substitute(substitutor: TypeSubstitutor) = this