More accurate filtering of extensions

This commit is contained in:
Valentin Kipyatkov
2014-11-28 13:30:05 +03:00
parent 016af0b53c
commit 122b14dd7d
2 changed files with 4 additions and 4 deletions
@@ -144,10 +144,8 @@ public class ReferenceVariantsHelper(
nameFilter: (Name) -> Boolean nameFilter: (Name) -> Boolean
) { ) {
if (!kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) { if (!kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) {
resolutionScope.getDescriptorsFiltered(kindFilter, nameFilter) resolutionScope.getDescriptorsFiltered(kindFilter.exclude(DescriptorKindExclude.NonExtensions), nameFilter)
.stream() .filterTo(this) { (it as CallableDescriptor).isExtensionCallable(receiver, isInfixCall, context, dataFlowInfo) }
.filterIsInstance(javaClass<CallableDescriptor>())
.filterTo(this) { it.isExtensionCallable(receiver, isInfixCall, context, dataFlowInfo) }
} }
} }
@@ -49,6 +49,8 @@ public fun CallableDescriptor.isExtensionCallable(
bindingContext: BindingContext, bindingContext: BindingContext,
dataFlowInfo: DataFlowInfo dataFlowInfo: DataFlowInfo
): Boolean { ): Boolean {
assert(getExtensionReceiverParameter() != null)
if (isInfixCall && (this !is SimpleFunctionDescriptor || getValueParameters().size() != 1)) { if (isInfixCall && (this !is SimpleFunctionDescriptor || getValueParameters().size() != 1)) {
return false return false
} }