From 99bfd6d477a91cd661b5729edb8dbfa1f964a787 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 11 Jul 2013 14:35:19 +0400 Subject: [PATCH] Record type arguments when they are inferred. --- .../jet/lang/resolve/calls/CallResolverUtil.java | 3 --- .../jet/lang/resolve/calls/CandidateResolver.java | 5 ----- .../lang/resolve/calls/model/ResolvedCallImpl.java | 13 ++++++++----- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java index fedaced4525..f91fe310f89 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java @@ -73,9 +73,6 @@ public class CallResolverUtil { if (constraintSystem != null) { copy.setConstraintSystem(constraintSystem.copy()); } - for (Map.Entry entry : call.getTypeArguments().entrySet()) { - copy.recordTypeArgument(entry.getKey(), entry.getValue()); - } for (Map.Entry entry : call.getValueArguments().entrySet()) { copy.recordValueArgument(entry.getKey(), entry.getValue()); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 46f664a140c..35732765d40 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -159,11 +159,6 @@ public class CandidateResolver { TypeSubstitutor substitutor = TypeSubstitutor.create(substitutionContext); candidateCall.setResultingSubstitutor(substitutor); - List typeParameters = candidateCall.getCandidateDescriptor().getTypeParameters(); - for (int i = 0; i < typeParameters.size(); i++) { - TypeParameterDescriptor typeParameterDescriptor = typeParameters.get(i); - candidateCall.recordTypeArgument(typeParameterDescriptor, typeArguments.get(i)); - } candidateCall.addStatus(checkAllValueArguments(context, SKIP_FUNCTION_ARGUMENTS).status); } else { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java index 5ad4e201d5b..24b04fc79d4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/model/ResolvedCallImpl.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintSystem; import org.jetbrains.jet.lang.resolve.calls.tasks.TracingStrategy; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.TypeSubstitutor; import java.util.*; @@ -144,6 +145,13 @@ public class ResolvedCallImpl implements ResolvedC resultingDescriptor = (D) candidateDescriptor.substitute(substitutor); assert resultingDescriptor != null : candidateDescriptor; + for (TypeParameterDescriptor typeParameter : candidateDescriptor.getTypeParameters()) { + TypeProjection typeArgumentProjection = substitutor.getSubstitution().get(typeParameter.getTypeConstructor()); + if (typeArgumentProjection != null) { + typeArguments.put(typeParameter, typeArgumentProjection.getType()); + } + } + Map parameterMap = Maps.newHashMap(); for (ValueParameterDescriptor valueParameterDescriptor : resultingDescriptor.getValueParameters()) { parameterMap.put(valueParameterDescriptor.getOriginal(), valueParameterDescriptor); @@ -158,11 +166,6 @@ public class ResolvedCallImpl implements ResolvedC } } - public void recordTypeArgument(@NotNull TypeParameterDescriptor typeParameter, @NotNull JetType typeArgument) { - assert !typeArguments.containsKey(typeParameter) : typeParameter + " -> " + typeArgument; - typeArguments.put(typeParameter, typeArgument); - } - public void setConstraintSystem(@NotNull ConstraintSystem constraintSystem) { this.constraintSystem = constraintSystem; }