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.ExplicitReceiverKind;
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.ResolutionCandidate;
|
import org.jetbrains.kotlin.resolve.calls.tasks.ResolutionCandidate;
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy;
|
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.resolve.scopes.receivers.*;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
import org.jetbrains.kotlin.types.TypeProjection;
|
import org.jetbrains.kotlin.types.TypeProjection;
|
||||||
@@ -197,7 +198,10 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements MutableRe
|
|||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void setResultingSubstitutor(@NotNull TypeSubstitutor substitutor) {
|
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
|
//noinspection ConstantConditions
|
||||||
if (resultingDescriptor == null) {
|
if (resultingDescriptor == null) {
|
||||||
throw new AssertionError(
|
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.isInlineClass
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.TypeProjection
|
|
||||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
|
||||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||||
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
|
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
|
||||||
import org.jetbrains.kotlin.types.checker.REFINER_CAPABILITY
|
import org.jetbrains.kotlin.types.checker.REFINER_CAPABILITY
|
||||||
@@ -426,3 +423,9 @@ fun ModuleDescriptor.isTypeRefinementEnabled(): Boolean = getCapability(REFINER_
|
|||||||
|
|
||||||
val VariableDescriptor.isUnderscoreNamed
|
val VariableDescriptor.isUnderscoreNamed
|
||||||
get() = !name.isSpecial && name.identifier == "_"
|
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