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();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public <D extends CallableDescriptor> JetType completeNestedCallsInference(
|
||||
public <D extends CallableDescriptor> void completeNestedCallsInference(
|
||||
@NotNull CallCandidateResolutionContext<D> context
|
||||
) {
|
||||
if (context.call.getCallType() == Call.CallType.INVOKE) return;
|
||||
ResolvedCallImpl<D> resolvedCall = context.candidateCall;
|
||||
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : resolvedCall.getValueArguments().entrySet()) {
|
||||
ValueParameterDescriptor parameterDescriptor = entry.getKey();
|
||||
@@ -335,7 +335,6 @@ public class CandidateResolver {
|
||||
}
|
||||
}
|
||||
recordReferenceForInvokeFunction(context);
|
||||
return resolvedCall.getResultingDescriptor().getReturnType();
|
||||
}
|
||||
|
||||
private <D extends CallableDescriptor> void completeInferenceForArgument(
|
||||
@@ -371,7 +370,8 @@ public class CandidateResolver {
|
||||
type = completeTypeInferenceDependentOnExpectedTypeForCall(contextForArgument, true);
|
||||
}
|
||||
else {
|
||||
type = completeNestedCallsInference(contextForArgument);
|
||||
completeNestedCallsInference(contextForArgument);
|
||||
type = contextForArgument.candidateCall.getResultingDescriptor().getReturnType();
|
||||
checkValueArgumentTypes(contextForArgument);
|
||||
}
|
||||
JetType result = BindingContextUtils.updateRecordedType(
|
||||
@@ -387,6 +387,7 @@ public class CandidateResolver {
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
@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")
|
||||
|
||||
Reference in New Issue
Block a user