KT-4204 ConstraintSystem erased after resolution completion

#KT-4204 Fixed
This commit is contained in:
svtk
2013-11-19 19:05:31 +04:00
parent 5d95fa99bd
commit 2bd4aa97c6
3 changed files with 34 additions and 4 deletions
@@ -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) {
@@ -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")