From c92b43c94bd9940c3725fdd1840fa5eaade820f5 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 6 Jul 2015 19:38:25 +0300 Subject: [PATCH] Added JetScope.getSyntheticExtensionProperties() --- .../kotlin/resolve/AllUnderImportsScope.kt | 12 +++++++----- .../kotlin/resolve/SingleImportScope.kt | 3 +++ .../kotlin/resolve/lazy/LazyImportScope.kt | 6 ++++++ .../lazy/descriptors/AbstractLazyMemberScope.kt | 3 +++ .../lazy/descriptors/LazyJavaMemberScope.kt | 2 ++ .../resolve/scopes/AbstractScopeAdapter.kt | 5 +++++ .../kotlin/resolve/scopes/ChainedScope.kt | 9 +++++++-- .../resolve/scopes/ExplicitImportsScope.kt | 3 +++ .../kotlin/resolve/scopes/FilteringScope.kt | 5 ++++- .../jetbrains/kotlin/resolve/scopes/JetScope.kt | 3 +++ .../kotlin/resolve/scopes/JetScopeImpl.kt | 3 +++ .../resolve/scopes/StaticScopeForKotlinClass.kt | 7 +++++-- .../kotlin/resolve/scopes/SubstitutingScope.kt | 11 ++++++++--- .../org/jetbrains/kotlin/types/ErrorUtils.java | 16 ++++++++++++++++ .../descriptors/DeserializedMemberScope.kt | 17 +++++++++++------ 15 files changed, 86 insertions(+), 19 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt index 3b09874fa63..3e653a4432a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt @@ -18,13 +18,11 @@ package org.jetbrains.kotlin.resolve import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap -import org.jetbrains.kotlin.resolve.scopes.FilteringScope -import org.jetbrains.kotlin.resolve.scopes.JetScope -import org.jetbrains.kotlin.resolve.scopes.WritableScope -import java.util.ArrayList import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter +import org.jetbrains.kotlin.resolve.scopes.JetScope +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer +import java.util.ArrayList class AllUnderImportsScope : JetScope { private val scopes = ArrayList() @@ -55,6 +53,10 @@ class AllUnderImportsScope : JetScope { return scopes.flatMap { it.getFunctions(name) } } + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection { + return scopes.flatMap { it.getSyntheticExtensionProperties(receiverType, name) } + } + override fun getPackage(name: Name): PackageViewDescriptor? = null // packages are not imported by all under imports override fun getLocalVariable(name: Name): VariableDescriptor? = null diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/SingleImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/SingleImportScope.kt index 9f918a70b6e..0dded31f58a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/SingleImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/SingleImportScope.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.JetScope +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer class SingleImportScope(private val aliasName: Name, private val descriptors: Collection) : JetScope { @@ -35,6 +36,8 @@ class SingleImportScope(private val aliasName: Name, private val descriptors: Co override fun getFunctions(name: Name) = if (name == aliasName) descriptors.filterIsInstance() else emptyList() + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection = emptyList() + override fun getLocalVariable(name: Name): VariableDescriptor? = null override fun getContainingDeclaration(): DeclarationDescriptor = throw UnsupportedOperationException() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt index e63d88e8f73..d3a9b7fdfa3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver.LookupMode import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.util.collectionUtils.concat import org.jetbrains.kotlin.utils.Printer import java.util.LinkedHashSet @@ -254,6 +255,11 @@ class LazyImportScope( return importResolver.collectFromImports(name, LookupMode.EVERYTHING) { scope, name -> scope.getFunctions(name) } } + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection { + if (filteringKind == FilteringKind.INVISIBLE_CLASSES) return listOf() + return importResolver.collectFromImports(name, LookupMode.EVERYTHING) { scope, name -> scope.getSyntheticExtensionProperties(receiverType, name) } + } + override fun getDeclarationsByLabel(labelName: Name): Collection = listOf() override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt index 0346754dba1..fd3e126ac8a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.toReadOnlyList import java.util.LinkedHashSet @@ -110,6 +111,8 @@ protected constructor( protected abstract fun getNonDeclaredProperties(name: Name, result: MutableSet) + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name) = listOf() + override fun getLocalVariable(name: Name): VariableDescriptor? = null override fun getDeclarationsByLabel(labelName: Name) = setOf() diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaMemberScope.kt index 93e435d526c..e82897671a4 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaMemberScope.kt @@ -297,6 +297,8 @@ public abstract class LazyJavaMemberScope( override fun getProperties(name: Name): Collection = properties(name) + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name) = listOf() + override fun getLocalVariable(name: Name): VariableDescriptor? = null override fun getDeclarationsByLabel(labelName: Name) = listOf() diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt index 549bb12dfe3..98f4032841d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer /** @@ -46,6 +47,10 @@ public abstract class AbstractScopeAdapter : JetScope { return workerScope.getProperties(name) } + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection { + return workerScope.getSyntheticExtensionProperties(receiverType, name) + } + override fun getLocalVariable(name: Name): VariableDescriptor? { return workerScope.getLocalVariable(name) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedScope.kt index 62b9938c8ca..0a270366fdb 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedScope.kt @@ -18,9 +18,11 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.util.collectionUtils.concat -import java.util.* +import org.jetbrains.kotlin.utils.Printer +import java.util.ArrayList +import java.util.LinkedHashSet public open class ChainedScope( private val containingDeclaration: DeclarationDescriptor?/* it's nullable as a hack for TypeUtils.intersect() */, @@ -63,6 +65,9 @@ public open class ChainedScope( override fun getFunctions(name: Name): Collection = getFromAllScopes { it.getFunctions(name) } + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection + = getFromAllScopes { it.getSyntheticExtensionProperties(receiverType, name) } + override fun getImplicitReceiversHierarchy(): List { if (implicitReceiverHierarchy == null) { val result = ArrayList() diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt index a4338a758ca..b2e6067b031 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull @@ -32,6 +33,8 @@ public class ExplicitImportsScope(private val descriptors: Collection() + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection = listOf() + override fun getContainingDeclaration() = throw UnsupportedOperationException() override fun getDeclarationsByLabel(labelName: Name) = emptyList() diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/FilteringScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/FilteringScope.kt index bb245930cec..313181b5638 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/FilteringScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/FilteringScope.kt @@ -16,8 +16,9 @@ package org.jetbrains.kotlin.resolve.scopes -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer public class FilteringScope(private val workerScope: JetScope, private val predicate: (DeclarationDescriptor) -> Boolean) : JetScope { @@ -35,6 +36,8 @@ public class FilteringScope(private val workerScope: JetScope, private val predi override fun getProperties(name: Name) = workerScope.getProperties(name).filter(predicate) + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name) = workerScope.getSyntheticExtensionProperties(receiverType, name).filter(predicate) + override fun getLocalVariable(name: Name) = filterDescriptor(workerScope.getLocalVariable(name)) override fun getDescriptors(kindFilter: DescriptorKindFilter, diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt index 9fa86e94f1a..a6ba0850059 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.toReadOnlyList import java.lang.reflect.Modifier @@ -34,6 +35,8 @@ public trait JetScope { public fun getFunctions(name: Name): Collection + public fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection + public fun getContainingDeclaration(): DeclarationDescriptor public fun getDeclarationsByLabel(labelName: Name): Collection diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScopeImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScopeImpl.kt index 7a16104950e..3761435f6f0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScopeImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScopeImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer public abstract class JetScopeImpl : JetScope { @@ -31,6 +32,8 @@ public abstract class JetScopeImpl : JetScope { override fun getFunctions(name: Name): Collection = setOf() + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection = listOf() + override fun getDeclarationsByLabel(labelName: Name): Collection = listOf() override fun getDescriptors(kindFilter: DescriptorKindFilter, diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinClass.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinClass.kt index e088eed4f45..d53d46cf158 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinClass.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/StaticScopeForKotlinClass.kt @@ -16,12 +16,14 @@ package org.jetbrains.kotlin.resolve.scopes -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValueOfMethod +import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValuesMethod +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.utils.Printer import java.util.ArrayList import kotlin.properties.Delegates -import org.jetbrains.kotlin.resolve.DescriptorFactory.* public class StaticScopeForKotlinClass( private val containingClass: ClassDescriptor @@ -46,6 +48,7 @@ public class StaticScopeForKotlinClass( override fun getPackage(name: Name) = null override fun getProperties(name: Name) = listOf() + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name) = listOf() override fun getLocalVariable(name: Name) = null override fun getContainingDeclaration() = containingClass override fun getDeclarationsByLabel(labelName: Name) = listOf() diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt index f72257b8ae8..19bc67d6cb6 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt @@ -16,11 +16,14 @@ package org.jetbrains.kotlin.resolve.scopes -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeSubstitutor -import org.jetbrains.kotlin.utils.* -import java.util.* +import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.kotlin.utils.newHashSetWithExpectedSize +import java.util.HashMap import kotlin.properties.Delegates public class SubstitutingScope(private val workerScope: JetScope, private val substitutor: TypeSubstitutor) : JetScope { @@ -66,6 +69,8 @@ public class SubstitutingScope(private val workerScope: JetScope, private val su override fun getFunctions(name: Name) = substitute(workerScope.getFunctions(name)) + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name) = substitute(workerScope.getSyntheticExtensionProperties(receiverType, name)) + override fun getPackage(name: Name) = workerScope.getPackage(name) override fun getImplicitReceiversHierarchy(): List { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index b579ac9e289..320058f54b3 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -91,6 +91,14 @@ public class ErrorUtils { return ERROR_PROPERTY_GROUP; } + @NotNull + @Override + public Collection getSyntheticExtensionProperties( + @NotNull JetType receiverType, @NotNull Name name + ) { + return ERROR_PROPERTY_GROUP; + } + @Override public VariableDescriptor getLocalVariable(@NotNull Name name) { return ERROR_PROPERTY; @@ -193,6 +201,14 @@ public class ErrorUtils { throw new IllegalStateException(); } + @NotNull + @Override + public Collection getSyntheticExtensionProperties( + @NotNull JetType receiverType, @NotNull Name name + ) { + throw new IllegalStateException(); + } + @NotNull @Override public DeclarationDescriptor getContainingDeclaration() { diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt index 688aee37174..7ead7345cf7 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt @@ -16,17 +16,20 @@ package org.jetbrains.kotlin.serialization.deserialization.descriptors -import org.jetbrains.kotlin.serialization.Flags -import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.scopes.JetScope -import org.jetbrains.kotlin.utils.Printer -import org.jetbrains.kotlin.utils.toReadOnlyList import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter +import org.jetbrains.kotlin.resolve.scopes.JetScope +import org.jetbrains.kotlin.serialization.Flags +import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.CallableKind import org.jetbrains.kotlin.serialization.deserialization.DeserializationContext -import java.util.* +import org.jetbrains.kotlin.types.JetType +import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.kotlin.utils.toReadOnlyList +import java.util.ArrayList +import java.util.LinkedHashMap +import java.util.LinkedHashSet public abstract class DeserializedMemberScope protected constructor( protected val c: DeserializationContext, @@ -109,6 +112,8 @@ public abstract class DeserializedMemberScope protected constructor( protected abstract fun addClassDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) + override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name) = listOf() + override fun getPackage(name: Name): PackageViewDescriptor? = null override fun getLocalVariable(name: Name): VariableDescriptor? = null