Record type arguments when they are inferred.
This commit is contained in:
@@ -73,9 +73,6 @@ public class CallResolverUtil {
|
||||
if (constraintSystem != null) {
|
||||
copy.setConstraintSystem(constraintSystem.copy());
|
||||
}
|
||||
for (Map.Entry<TypeParameterDescriptor, JetType> entry : call.getTypeArguments().entrySet()) {
|
||||
copy.recordTypeArgument(entry.getKey(), entry.getValue());
|
||||
}
|
||||
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : call.getValueArguments().entrySet()) {
|
||||
copy.recordValueArgument(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
@@ -159,11 +159,6 @@ public class CandidateResolver {
|
||||
TypeSubstitutor substitutor = TypeSubstitutor.create(substitutionContext);
|
||||
candidateCall.setResultingSubstitutor(substitutor);
|
||||
|
||||
List<TypeParameterDescriptor> 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 {
|
||||
|
||||
+8
-5
@@ -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<D extends CallableDescriptor> 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<ValueParameterDescriptor, ValueParameterDescriptor> parameterMap = Maps.newHashMap();
|
||||
for (ValueParameterDescriptor valueParameterDescriptor : resultingDescriptor.getValueParameters()) {
|
||||
parameterMap.put(valueParameterDescriptor.getOriginal(), valueParameterDescriptor);
|
||||
@@ -158,11 +166,6 @@ public class ResolvedCallImpl<D extends CallableDescriptor> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user