Record type arguments when they are inferred.
This commit is contained in:
@@ -73,9 +73,6 @@ public class CallResolverUtil {
|
|||||||
if (constraintSystem != null) {
|
if (constraintSystem != null) {
|
||||||
copy.setConstraintSystem(constraintSystem.copy());
|
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()) {
|
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : call.getValueArguments().entrySet()) {
|
||||||
copy.recordValueArgument(entry.getKey(), entry.getValue());
|
copy.recordValueArgument(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,11 +159,6 @@ public class CandidateResolver {
|
|||||||
TypeSubstitutor substitutor = TypeSubstitutor.create(substitutionContext);
|
TypeSubstitutor substitutor = TypeSubstitutor.create(substitutionContext);
|
||||||
candidateCall.setResultingSubstitutor(substitutor);
|
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);
|
candidateCall.addStatus(checkAllValueArguments(context, SKIP_FUNCTION_ARGUMENTS).status);
|
||||||
}
|
}
|
||||||
else {
|
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.calls.tasks.TracingStrategy;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
|
import org.jetbrains.jet.lang.types.TypeProjection;
|
||||||
import org.jetbrains.jet.lang.types.TypeSubstitutor;
|
import org.jetbrains.jet.lang.types.TypeSubstitutor;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -144,6 +145,13 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements ResolvedC
|
|||||||
resultingDescriptor = (D) candidateDescriptor.substitute(substitutor);
|
resultingDescriptor = (D) candidateDescriptor.substitute(substitutor);
|
||||||
assert resultingDescriptor != null : candidateDescriptor;
|
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();
|
Map<ValueParameterDescriptor, ValueParameterDescriptor> parameterMap = Maps.newHashMap();
|
||||||
for (ValueParameterDescriptor valueParameterDescriptor : resultingDescriptor.getValueParameters()) {
|
for (ValueParameterDescriptor valueParameterDescriptor : resultingDescriptor.getValueParameters()) {
|
||||||
parameterMap.put(valueParameterDescriptor.getOriginal(), valueParameterDescriptor);
|
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) {
|
public void setConstraintSystem(@NotNull ConstraintSystem constraintSystem) {
|
||||||
this.constraintSystem = constraintSystem;
|
this.constraintSystem = constraintSystem;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user