KT-4204 ConstraintSystem erased after resolution completion
#KT-4204 Fixed
This commit is contained in:
@@ -321,10 +321,10 @@ public class CandidateResolver {
|
|||||||
return resolvedCall.getResultingDescriptor().getReturnType();
|
return resolvedCall.getResultingDescriptor().getReturnType();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
public <D extends CallableDescriptor> void completeNestedCallsInference(
|
||||||
public <D extends CallableDescriptor> JetType completeNestedCallsInference(
|
|
||||||
@NotNull CallCandidateResolutionContext<D> context
|
@NotNull CallCandidateResolutionContext<D> context
|
||||||
) {
|
) {
|
||||||
|
if (context.call.getCallType() == Call.CallType.INVOKE) return;
|
||||||
ResolvedCallImpl<D> resolvedCall = context.candidateCall;
|
ResolvedCallImpl<D> resolvedCall = context.candidateCall;
|
||||||
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : resolvedCall.getValueArguments().entrySet()) {
|
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : resolvedCall.getValueArguments().entrySet()) {
|
||||||
ValueParameterDescriptor parameterDescriptor = entry.getKey();
|
ValueParameterDescriptor parameterDescriptor = entry.getKey();
|
||||||
@@ -335,7 +335,6 @@ public class CandidateResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
recordReferenceForInvokeFunction(context);
|
recordReferenceForInvokeFunction(context);
|
||||||
return resolvedCall.getResultingDescriptor().getReturnType();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private <D extends CallableDescriptor> void completeInferenceForArgument(
|
private <D extends CallableDescriptor> void completeInferenceForArgument(
|
||||||
@@ -371,7 +370,8 @@ public class CandidateResolver {
|
|||||||
type = completeTypeInferenceDependentOnExpectedTypeForCall(contextForArgument, true);
|
type = completeTypeInferenceDependentOnExpectedTypeForCall(contextForArgument, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
type = completeNestedCallsInference(contextForArgument);
|
completeNestedCallsInference(contextForArgument);
|
||||||
|
type = contextForArgument.candidateCall.getResultingDescriptor().getReturnType();
|
||||||
checkValueArgumentTypes(contextForArgument);
|
checkValueArgumentTypes(contextForArgument);
|
||||||
}
|
}
|
||||||
JetType result = BindingContextUtils.updateRecordedType(
|
JetType result = BindingContextUtils.updateRecordedType(
|
||||||
@@ -387,6 +387,7 @@ public class CandidateResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext<?> context, @NotNull Collection<? extends ValueArgument> arguments) {
|
public void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext<?> context, @NotNull Collection<? extends ValueArgument> arguments) {
|
||||||
|
if (context.call.getCallType() == Call.CallType.INVOKE) return;
|
||||||
if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return;
|
if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return;
|
||||||
|
|
||||||
for (ValueArgument argument : arguments) {
|
for (ValueArgument argument : arguments) {
|
||||||
|
|||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
//KT-4204 ConstraintSystem erased after resolution completion
|
||||||
|
package c
|
||||||
|
|
||||||
|
public abstract class TestBug1() {
|
||||||
|
|
||||||
|
public fun m3(<!UNUSED_PARAMETER!>position<!>: Int) {
|
||||||
|
position(m1().second<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun m4(position: (Int)->Int) {
|
||||||
|
position(m1().second)
|
||||||
|
}
|
||||||
|
|
||||||
|
private abstract fun m1(): Pair<Int, Int>
|
||||||
|
|
||||||
|
private fun position(<!UNUSED_PARAMETER!>p<!>: Int) {}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//from library
|
||||||
|
public class Pair<out A, out B> (
|
||||||
|
public val first: A,
|
||||||
|
public val second: B
|
||||||
|
)
|
||||||
@@ -5355,6 +5355,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
|
|||||||
doTest("compiler/testData/diagnostics/tests/resolve/invoke/kt3833-invokeInsideNestedClass.kt");
|
doTest("compiler/testData/diagnostics/tests/resolve/invoke/kt3833-invokeInsideNestedClass.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt4204-completeNestedCallsForInvoke.kt")
|
||||||
|
public void testKt4204_completeNestedCallsForInvoke() throws Exception {
|
||||||
|
doTest("compiler/testData/diagnostics/tests/resolve/invoke/kt4204-completeNestedCallsForInvoke.kt");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/resolve/nestedCalls")
|
@TestMetadata("compiler/testData/diagnostics/tests/resolve/nestedCalls")
|
||||||
|
|||||||
Reference in New Issue
Block a user