diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/StaticMembers.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/StaticMembers.kt index 72640391e18..4a8a4a5fb80 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/StaticMembers.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/StaticMembers.kt @@ -37,16 +37,16 @@ import java.util.* // adds java static members, enum members and members from companion object class StaticMembers( - private val bindingContext: BindingContext, - private val lookupElementFactory: LookupElementFactory, - private val resolutionFacade: ResolutionFacade, - private val moduleDescriptor: ModuleDescriptor + private val bindingContext: BindingContext, + private val lookupElementFactory: LookupElementFactory, + private val resolutionFacade: ResolutionFacade, + private val moduleDescriptor: ModuleDescriptor ) { fun addToCollection( - collection: MutableCollection, - expectedInfos: Collection, - context: KtSimpleNameExpression, - enumEntriesToSkip: Set + collection: MutableCollection, + expectedInfos: Collection, + context: KtSimpleNameExpression, + enumEntriesToSkip: Set ) { val expectedInfosByClass = HashMap>() for (expectedInfo in expectedInfos) { @@ -56,41 +56,62 @@ class StaticMembers( } if (expectedInfo.additionalData is PropertyDelegateAdditionalData) { - val delegatesClass = resolutionFacade.resolveImportReference(moduleDescriptor, FqName("kotlin.properties.Delegates")).singleOrNull() + val delegatesClass = + resolutionFacade.resolveImportReference(moduleDescriptor, FqName("kotlin.properties.Delegates")).singleOrNull() if (delegatesClass is ClassDescriptor) { - addToCollection(collection, delegatesClass, listOf(expectedInfo), context, enumEntriesToSkip, SmartCompletionItemPriority.DELEGATES_STATIC_MEMBER) + addToCollection( + collection, + delegatesClass, + listOf(expectedInfo), + context, + enumEntriesToSkip, + SmartCompletionItemPriority.DELEGATES_STATIC_MEMBER + ) } } } for ((classDescriptor, expectedInfosForClass) in expectedInfosByClass) { if (!classDescriptor.name.isSpecial) { - addToCollection(collection, classDescriptor, expectedInfosForClass, context, enumEntriesToSkip, SmartCompletionItemPriority.STATIC_MEMBER) + addToCollection( + collection, + classDescriptor, + expectedInfosForClass, + context, + enumEntriesToSkip, + SmartCompletionItemPriority.STATIC_MEMBER + ) } } } private fun addToCollection( - collection: MutableCollection, - classDescriptor: ClassDescriptor, - expectedInfos: Collection, - context: KtSimpleNameExpression, - enumEntriesToSkip: Set, - priority: SmartCompletionItemPriority + collection: MutableCollection, + classDescriptor: ClassDescriptor, + expectedInfos: Collection, + context: KtSimpleNameExpression, + enumEntriesToSkip: Set, + priority: SmartCompletionItemPriority ) { fun processMember(descriptor: DeclarationDescriptor) { - if (descriptor is DeclarationDescriptorWithVisibility && !descriptor.isVisible(context, null, bindingContext, resolutionFacade)) return + if (descriptor is DeclarationDescriptorWithVisibility && !descriptor.isVisible( + context, + null, + bindingContext, + resolutionFacade + ) + ) return - val matcher: (ExpectedInfo) -> ExpectedInfoMatch - if (descriptor is CallableDescriptor) { - val returnType = descriptor.fuzzyReturnType() ?: return - matcher = { expectedInfo -> returnType.matchExpectedInfo(expectedInfo) } - } - else if (DescriptorUtils.isEnumEntry(descriptor) && !enumEntriesToSkip.contains(descriptor)) { - matcher = { ExpectedInfoMatch.match(TypeSubstitutor.EMPTY) } /* we do not need to check type of enum entry because it's taken from proper enum */ - } - else { - return + val matcher: (ExpectedInfo) -> ExpectedInfoMatch = when { + descriptor is CallableDescriptor -> { + val returnType = descriptor.fuzzyReturnType() ?: return + { expectedInfo -> returnType.matchExpectedInfo(expectedInfo) } + } + DescriptorUtils.isEnumEntry(descriptor) && !enumEntriesToSkip.contains(descriptor) -> { + /* we do not need to check type of enum entry because it's taken from proper enum */ + { ExpectedInfoMatch.match(TypeSubstitutor.EMPTY) } + } + else -> return } collection.addLookupElements(descriptor, expectedInfos, matcher) { createLookupElements(it, priority) } @@ -101,8 +122,8 @@ class StaticMembers( val companionObject = classDescriptor.companionObjectDescriptor if (companionObject != null) { companionObject.defaultType.memberScope.getContributedDescriptors() - .filter { !it.isExtension } - .forEach(::processMember) + .filter { !it.isExtension } + .forEach(::processMember) } val members = classDescriptor.defaultType.memberScope.getContributedDescriptors().filter { member -> @@ -115,11 +136,14 @@ class StaticMembers( members.forEach(::processMember) } - private fun createLookupElements(memberDescriptor: DeclarationDescriptor, priority: SmartCompletionItemPriority): Collection { + private fun createLookupElements( + memberDescriptor: DeclarationDescriptor, + priority: SmartCompletionItemPriority + ): Collection { return lookupElementFactory.createStandardLookupElementsForDescriptor(memberDescriptor, useReceiverTypes = false) - .map { - it.decorateAsStaticMember(memberDescriptor, classNameAsLookupString = true)!! - .assignSmartCompletionPriority(priority) - } + .map { + it.decorateAsStaticMember(memberDescriptor, classNameAsLookupString = true)!! + .assignSmartCompletionPriority(priority) + } } }