From ece4d8b82f87977e496482234705486170553625 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 27 Jul 2015 19:43:02 +0300 Subject: [PATCH] Added JetScope.getSyntheticExtensionFunctions() --- .../kotlin/resolve/AllUnderImportsScope.kt | 4 ++++ .../kotlin/resolve/lazy/LazyImportScope.kt | 5 +++++ .../resolve/scopes/AbstractScopeAdapter.kt | 4 ++++ .../kotlin/resolve/scopes/ChainedScope.kt | 4 +++- .../kotlin/resolve/scopes/FilteringScope.kt | 3 +++ .../jetbrains/kotlin/resolve/scopes/JetScope.kt | 1 + .../kotlin/resolve/scopes/JetScopeImpl.kt | 17 +++++++++-------- .../kotlin/resolve/scopes/SubstitutingScope.kt | 7 ++++++- .../org/jetbrains/kotlin/types/ErrorUtils.java | 16 ++++++++++++++++ 9 files changed, 51 insertions(+), 10 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt index 93ca5cf133c..7215b54cdff 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportsScope.kt @@ -58,6 +58,10 @@ class AllUnderImportsScope : JetScope { return scopes.flatMap { it.getSyntheticExtensionProperties(receiverTypes, name) } } + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection { + return scopes.flatMap { it.getSyntheticExtensionFunctions(receiverTypes, name) } + } + override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection { return scopes.flatMap { it.getSyntheticExtensionProperties(receiverTypes) } } 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 3042f958a76..0bd22454a69 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt @@ -263,6 +263,11 @@ class LazyImportScope( return importResolver.collectFromImports(name, LookupMode.EVERYTHING) { scope, name -> scope.getSyntheticExtensionProperties(receiverTypes, name) } } + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection { + if (filteringKind == FilteringKind.INVISIBLE_CLASSES) return listOf() + return importResolver.collectFromImports(name, LookupMode.EVERYTHING) { scope, name -> scope.getSyntheticExtensionFunctions(receiverTypes, name) } + } + override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection { // we do not perform any filtering by visibility here because all descriptors from both visible/invisible filter scopes are to be added anyway if (filteringKind == FilteringKind.INVISIBLE_CLASSES) return 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 1e0391884ca..e3cc2eb6c4f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt @@ -51,6 +51,10 @@ public abstract class AbstractScopeAdapter : JetScope { return workerScope.getSyntheticExtensionProperties(receiverTypes, name) } + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection { + return workerScope.getSyntheticExtensionFunctions(receiverTypes, name) + } + override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection { return workerScope.getSyntheticExtensionProperties(receiverTypes) } 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 32e4378bd3b..25978a42d96 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedScope.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.util.collectionUtils.concat 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() */, @@ -68,6 +67,9 @@ public open class ChainedScope( override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name): Collection = getFromAllScopes { it.getSyntheticExtensionProperties(receiverTypes, name) } + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection + = getFromAllScopes { it.getSyntheticExtensionFunctions(receiverTypes, name) } + override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection = getFromAllScopes { it.getSyntheticExtensionProperties(receiverTypes) } 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 61395035cc4..7dfc19ae38f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/FilteringScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/FilteringScope.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.JetType @@ -39,6 +40,8 @@ public class FilteringScope(private val workerScope: JetScope, private val predi override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name): Collection = workerScope.getSyntheticExtensionProperties(receiverTypes, name).filter(predicate) + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection = workerScope.getSyntheticExtensionFunctions(receiverTypes, name).filter(predicate) + override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection = workerScope.getSyntheticExtensionProperties(receiverTypes).filter(predicate) override fun getLocalVariable(name: Name) = filterDescriptor(workerScope.getLocalVariable(name)) 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 fa578d78a60..2a4f6913487 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScope.kt @@ -36,6 +36,7 @@ public interface JetScope { public fun getFunctions(name: Name, location: UsageLocation = UsageLocation.NO_LOCATION): Collection public fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name): Collection + public fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection public fun getSyntheticExtensionProperties(receiverTypes: Collection): 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 1b151377372..4e3f1e68a9d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScopeImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/JetScopeImpl.kt @@ -24,26 +24,27 @@ import org.jetbrains.kotlin.utils.Printer public abstract class JetScopeImpl : JetScope { override fun getClassifier(name: Name, location: UsageLocation): ClassifierDescriptor? = null - override fun getProperties(name: Name, location: UsageLocation): Collection = setOf() + override fun getProperties(name: Name, location: UsageLocation): Collection = emptyList() override fun getLocalVariable(name: Name): VariableDescriptor? = null override fun getPackage(name: Name): PackageViewDescriptor? = null - override fun getFunctions(name: Name, location: UsageLocation): Collection = setOf() + override fun getFunctions(name: Name, location: UsageLocation): Collection = emptyList() - override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name): Collection = listOf() + override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name): Collection = emptyList() + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection = emptyList() - override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection = listOf() + override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection = emptyList() - override fun getDeclarationsByLabel(labelName: Name): Collection = listOf() + override fun getDeclarationsByLabel(labelName: Name): Collection = emptyList() override fun getDescriptors(kindFilter: DescriptorKindFilter, - nameFilter: (Name) -> Boolean): Collection = listOf() + nameFilter: (Name) -> Boolean): Collection = emptyList() - override fun getImplicitReceiversHierarchy(): List = listOf() + override fun getImplicitReceiversHierarchy(): List = emptyList() - override fun getOwnDeclaredDescriptors(): Collection = listOf() + override fun getOwnDeclaredDescriptors(): Collection = emptyList() // This method should not be implemented here by default: every scope class has its unique structure pattern abstract override fun printScopeStructure(p: Printer) 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 b5b772fb7e7..333fe60d39e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/SubstitutingScope.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.scopes import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.name.Name @@ -69,7 +70,11 @@ public class SubstitutingScope(private val workerScope: JetScope, private val su override fun getFunctions(name: Name, location: UsageLocation) = substitute(workerScope.getFunctions(name, location)) - override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name): Collection = substitute(workerScope.getSyntheticExtensionProperties(receiverTypes, name)) + override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name): Collection + = substitute(workerScope.getSyntheticExtensionProperties(receiverTypes, name)) + + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name): Collection + = substitute(workerScope.getSyntheticExtensionFunctions(receiverTypes, name)) override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection = substitute(workerScope.getSyntheticExtensionProperties(receiverTypes)) diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index fdcef1c94bb..1fa03142d07 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -101,6 +101,14 @@ public class ErrorUtils { return ERROR_PROPERTY_GROUP; } + @NotNull + @Override + public Collection getSyntheticExtensionFunctions( + @NotNull Collection receiverTypes, @NotNull Name name + ) { + return Collections.singleton(createErrorFunction(this)); + } + @NotNull @Override public Collection getSyntheticExtensionProperties(@NotNull Collection receiverTypes) { @@ -217,6 +225,14 @@ public class ErrorUtils { throw new IllegalStateException(); } + @NotNull + @Override + public Collection getSyntheticExtensionFunctions( + @NotNull Collection receiverTypes, @NotNull Name name + ) { + throw new IllegalStateException(); + } + @NotNull @Override public Collection getSyntheticExtensionProperties(@NotNull Collection receiverTypes) {