From ed6f8453775d4247589f6e4ed1af452333854ad2 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sun, 25 Oct 2015 12:34:07 +0300 Subject: [PATCH] Added utility functions for synthetic extensions in scope --- .../synthetic/JavaSyntheticPropertiesScope.kt | 4 +-- .../kotlin/resolve/scopes/utils/ScopeUtils.kt | 32 ++++++++++++------- .../codeInsight/ReferenceVariantsHelper.kt | 7 ++-- .../ConflictingExtensionPropertyInspection.kt | 7 ++-- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt index 49dd374c68b..cd37a212577 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt @@ -30,7 +30,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.ImportingScope import org.jetbrains.kotlin.resolve.scopes.LexicalScope -import org.jetbrains.kotlin.resolve.scopes.utils.collectAllFromImportingScopes +import org.jetbrains.kotlin.resolve.scopes.utils.collectSyntheticExtensionProperties import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf @@ -56,7 +56,7 @@ interface SyntheticJavaPropertyDescriptor : PropertyDescriptor { val owner = getterOrSetter.getContainingDeclaration() as? ClassDescriptor ?: return null val originalGetterOrSetter = getterOrSetter.original - return resolutionScope.collectAllFromImportingScopes { it.getContributedSyntheticExtensionProperties(listOf(owner.defaultType)) } + return resolutionScope.collectSyntheticExtensionProperties(listOf(owner.defaultType)) .filterIsInstance() .firstOrNull { originalGetterOrSetter == it.getMethod || originalGetterOrSetter == it.setMethod } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt index ffe6b3473dc..4b499b1d384 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt @@ -117,6 +117,18 @@ public fun LexicalScope.findFunction(name: Name, location: LookupLocation, predi return null } +public fun LexicalScope.collectSyntheticExtensionProperties(receiverTypes: Collection, name: Name, location: LookupLocation) + = collectAllFromImportingScopes { it.getContributedSyntheticExtensionProperties(receiverTypes, name, location) } + +public fun LexicalScope.collectSyntheticExtensionFunctions(receiverTypes: Collection, name: Name, location: LookupLocation) + = collectAllFromImportingScopes { it.getContributedSyntheticExtensionFunctions(receiverTypes, name, location) } + +public fun LexicalScope.collectSyntheticExtensionProperties(receiverTypes: Collection) + = collectAllFromImportingScopes { it.getContributedSyntheticExtensionProperties(receiverTypes) } + +public fun LexicalScope.collectSyntheticExtensionFunctions(receiverTypes: Collection) + = collectAllFromImportingScopes { it.getContributedSyntheticExtensionFunctions(receiverTypes) } + public fun LexicalScope.takeSnapshot(): LexicalScope = if (this is LexicalWritableScope) takeSnapshot() else this public fun LexicalScope.asKtScope(): KtScope { @@ -153,21 +165,17 @@ private class LexicalToKtScopeAdapter(lexicalScope: LexicalScope): KtScope { override fun getLocalVariable(name: Name) = lexicalScope.findLocalVariable(name) - override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name, location: LookupLocation): Collection { - return lexicalScope.collectAllFromImportingScopes { it.getContributedSyntheticExtensionProperties(receiverTypes, name, location) } - } + override fun getSyntheticExtensionProperties(receiverTypes: Collection, name: Name, location: LookupLocation) + = lexicalScope.collectSyntheticExtensionProperties(receiverTypes, name, location) - override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name, location: LookupLocation): Collection { - return lexicalScope.collectAllFromImportingScopes { it.getContributedSyntheticExtensionFunctions(receiverTypes, name, location) } - } + override fun getSyntheticExtensionFunctions(receiverTypes: Collection, name: Name, location: LookupLocation) + = lexicalScope.collectSyntheticExtensionFunctions(receiverTypes, name, location) - override fun getSyntheticExtensionProperties(receiverTypes: Collection): Collection { - return lexicalScope.collectAllFromImportingScopes { it.getContributedSyntheticExtensionProperties(receiverTypes) } - } + override fun getSyntheticExtensionProperties(receiverTypes: Collection) + = lexicalScope.collectSyntheticExtensionProperties(receiverTypes) - override fun getSyntheticExtensionFunctions(receiverTypes: Collection): Collection { - return lexicalScope.collectAllFromImportingScopes { it.getContributedSyntheticExtensionFunctions(receiverTypes) } - } + override fun getSyntheticExtensionFunctions(receiverTypes: Collection) + = lexicalScope.collectSyntheticExtensionFunctions(receiverTypes) override fun getContainingDeclaration() = lexicalScope.ownerDescriptor diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt index dac057257da..ce17fe33259 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt @@ -37,8 +37,9 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver -import org.jetbrains.kotlin.resolve.scopes.utils.collectAllFromImportingScopes import org.jetbrains.kotlin.resolve.scopes.utils.collectDescriptorsFiltered +import org.jetbrains.kotlin.resolve.scopes.utils.collectSyntheticExtensionFunctions +import org.jetbrains.kotlin.resolve.scopes.utils.collectSyntheticExtensionProperties import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor import org.jetbrains.kotlin.types.KotlinType @@ -307,13 +308,13 @@ public class ReferenceVariantsHelper( } if (kindFilter.acceptsKinds(DescriptorKindFilter.VARIABLES_MASK)) { - for (extension in resolutionScope.collectAllFromImportingScopes { it.getContributedSyntheticExtensionProperties(receiverTypes) }) { + for (extension in resolutionScope.collectSyntheticExtensionProperties(receiverTypes)) { process(extension) } } if (kindFilter.acceptsKinds(DescriptorKindFilter.FUNCTIONS_MASK)) { - for (extension in resolutionScope.collectAllFromImportingScopes { it.getContributedSyntheticExtensionFunctions(receiverTypes) }) { + for (extension in resolutionScope.collectSyntheticExtensionFunctions(receiverTypes)) { process(extension) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt index e892dd03584..9d669f8cfff 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt @@ -50,7 +50,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess import org.jetbrains.kotlin.resolve.isAnnotatedAsHidden import org.jetbrains.kotlin.resolve.scopes.ImportingScope -import org.jetbrains.kotlin.resolve.scopes.utils.collectAllFromImportingScopes +import org.jetbrains.kotlin.resolve.scopes.utils.collectSyntheticExtensionProperties import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull @@ -89,9 +89,8 @@ public class ConflictingExtensionPropertyInspection : AbstractKotlinInspection() private fun conflictingSyntheticExtension(descriptor: PropertyDescriptor, importingScope: ImportingScope): SyntheticJavaPropertyDescriptor? { val extensionReceiverType = descriptor.extensionReceiverParameter?.type ?: return null - return importingScope.collectAllFromImportingScopes { - it.getContributedSyntheticExtensionProperties(listOf(extensionReceiverType), descriptor.name, NoLookupLocation.FROM_IDE) - }.firstIsInstanceOrNull() + return importingScope.collectSyntheticExtensionProperties(listOf(extensionReceiverType), descriptor.name, NoLookupLocation.FROM_IDE) + .firstIsInstanceOrNull() } private fun isSameAsSynthetic(declaration: KtProperty, syntheticProperty: SyntheticJavaPropertyDescriptor): Boolean {