Use resulting descriptor for old callable references to substitute stub type variables
This commit is contained in:
+5
-1
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus;
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind;
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.ResolutionCandidate;
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy;
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.*;
|
||||
import org.jetbrains.kotlin.types.KotlinType;
|
||||
import org.jetbrains.kotlin.types.TypeProjection;
|
||||
@@ -197,7 +198,10 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements MutableRe
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void setResultingSubstitutor(@NotNull TypeSubstitutor substitutor) {
|
||||
resultingDescriptor = (D) candidateDescriptor.substitute(substitutor);
|
||||
D descriptorToSubstitute = resultingDescriptor != null && DescriptorUtilsKt.shouldBeUsedToSubstitute(resultingDescriptor)
|
||||
? resultingDescriptor
|
||||
: candidateDescriptor;
|
||||
resultingDescriptor = (D) descriptorToSubstitute.substitute(substitutor);
|
||||
//noinspection ConstantConditions
|
||||
if (resultingDescriptor == null) {
|
||||
throw new AssertionError(
|
||||
|
||||
@@ -27,10 +27,7 @@ import org.jetbrains.kotlin.resolve.constants.EnumValue
|
||||
import org.jetbrains.kotlin.resolve.isInlineClass
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeProjection
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
|
||||
import org.jetbrains.kotlin.types.checker.REFINER_CAPABILITY
|
||||
@@ -426,3 +423,9 @@ fun ModuleDescriptor.isTypeRefinementEnabled(): Boolean = getCapability(REFINER_
|
||||
|
||||
val VariableDescriptor.isUnderscoreNamed
|
||||
get() = !name.isSpecial && name.identifier == "_"
|
||||
|
||||
fun <D : CallableDescriptor> D.shouldBeUsedToSubstitute() =
|
||||
valueParameters.none { it.type.isError }
|
||||
&& returnType?.isError != true
|
||||
&& dispatchReceiverParameter?.type?.isError != true
|
||||
&& extensionReceiverParameter?.type?.isError != true
|
||||
|
||||
Reference in New Issue
Block a user