diff --git a/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt b/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt index 39324a21c23..15d1cd9baf1 100644 --- a/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt +++ b/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt @@ -102,20 +102,7 @@ public class ReferenceVariantsHelper( val receiverValue = ExpressionReceiver(receiverExpression, expressionType) val dataFlowInfo = context.getDataFlowInfo(expression) - var memberFilter = kindFilter exclude DescriptorKindExclude.Extensions - for (variant in SmartCastUtils.getSmartCastVariantsWithLessSpecificExcluded(receiverValue, context, dataFlowInfo)) { - val members = variant.getMemberScope().getDescriptorsFiltered(DescriptorKindFilter.ALL, nameFilter) // filter by kind later because of constructors - for (member in members) { - if (member is ClassDescriptor) { - if (member.isInner()) { - member.getConstructors().filterTo(descriptors) { callType.canCall(it) && memberFilter.accepts(it) } - } - } - else if (callType.canCall(member) && memberFilter.accepts(member)) { - descriptors.add(member) - } - } - } + descriptors.addMembers(receiverValue, callType, dataFlowInfo, kindFilter, nameFilter) descriptors.addCallableExtensions(resolutionScope, receiverValue, dataFlowInfo, callType, kindFilter, nameFilter) } @@ -146,6 +133,28 @@ public class ReferenceVariantsHelper( } } + private fun MutableCollection.addMembers( + receiverValue: ExpressionReceiver, + callType: CallType, + dataFlowInfo: DataFlowInfo, + kindFilter: DescriptorKindFilter, + nameFilter: (Name) -> Boolean) { + var memberFilter = kindFilter exclude DescriptorKindExclude.Extensions + for (variant in SmartCastUtils.getSmartCastVariantsWithLessSpecificExcluded(receiverValue, context, dataFlowInfo)) { + val members = variant.getMemberScope().getDescriptorsFiltered(DescriptorKindFilter.ALL, nameFilter) // filter by kind later because of constructors + for (member in members) { + if (member is ClassDescriptor) { + if (member.isInner()) { + member.getConstructors().filterTo(this) { callType.canCall(it) && memberFilter.accepts(it) } + } + } + else if (callType.canCall(member) && memberFilter.accepts(member)) { + this.add(member) + } + } + } + } + public fun getReferenceVariantsReceivers(expression: JetSimpleNameExpression): ReceiversData { val receiverData = getExplicitReceiverData(expression) if (receiverData != null) {