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
) {
if (!kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) {
resolutionScope.getDescriptorsFiltered(kindFilter, nameFilter)
.stream()
.filterIsInstance(javaClass<CallableDescriptor>())
.filterTo(this) { it.isExtensionCallable(receiver, isInfixCall, context, dataFlowInfo) }
resolutionScope.getDescriptorsFiltered(kindFilter.exclude(DescriptorKindExclude.NonExtensions), nameFilter)
.filterTo(this) { (it as CallableDescriptor).isExtensionCallable(receiver, isInfixCall, context, dataFlowInfo) }
}
}
@@ -49,6 +49,8 @@ public fun CallableDescriptor.isExtensionCallable(
bindingContext: BindingContext,
dataFlowInfo: DataFlowInfo
): Boolean {
assert(getExtensionReceiverParameter() != null)
if (isInfixCall && (this !is SimpleFunctionDescriptor || getValueParameters().size() != 1)) {
return false
}