Add minor memory optimization
Get rid of 'unsubstitutedValueArguments' in resolved call
This commit is contained in:
-6
@@ -87,12 +87,6 @@ public abstract class DelegatingResolvedCall<D extends CallableDescriptor> imple
|
|||||||
return resolvedCall.getValueArguments();
|
return resolvedCall.getValueArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public Map<ValueParameterDescriptor, ResolvedValueArgument> getUnsubstitutedValueArguments() {
|
|
||||||
return resolvedCall.getUnsubstitutedValueArguments();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public ArgumentMapping getArgumentMapping(@NotNull ValueArgument valueArgument) {
|
public ArgumentMapping getArgumentMapping(@NotNull ValueArgument valueArgument) {
|
||||||
|
|||||||
@@ -64,10 +64,6 @@ public interface ResolvedCall<D extends CallableDescriptor> {
|
|||||||
@NotNull
|
@NotNull
|
||||||
Map<ValueParameterDescriptor, ResolvedValueArgument> getValueArguments();
|
Map<ValueParameterDescriptor, ResolvedValueArgument> getValueArguments();
|
||||||
|
|
||||||
/** Values (arguments) for value parameters, no type parameter substitution */
|
|
||||||
@NotNull
|
|
||||||
Map<ValueParameterDescriptor, ResolvedValueArgument> getUnsubstitutedValueArguments();
|
|
||||||
|
|
||||||
/** Values (arguments) for value parameters indexed by parameter index */
|
/** Values (arguments) for value parameters indexed by parameter index */
|
||||||
@Nullable
|
@Nullable
|
||||||
List<ResolvedValueArgument> getValueArgumentsByIndex();
|
List<ResolvedValueArgument> getValueArgumentsByIndex();
|
||||||
|
|||||||
+7
-11
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve.calls.model;
|
|||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
|
import com.intellij.util.SmartList;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
||||||
@@ -41,6 +42,7 @@ import org.jetbrains.kotlin.types.TypeProjection;
|
|||||||
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -84,7 +86,6 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements MutableRe
|
|||||||
|
|
||||||
private final Map<TypeParameterDescriptor, KotlinType> typeArguments = Maps.newLinkedHashMap();
|
private final Map<TypeParameterDescriptor, KotlinType> typeArguments = Maps.newLinkedHashMap();
|
||||||
private final Map<ValueParameterDescriptor, ResolvedValueArgument> valueArguments = Maps.newLinkedHashMap();
|
private final Map<ValueParameterDescriptor, ResolvedValueArgument> valueArguments = Maps.newLinkedHashMap();
|
||||||
private Map<ValueParameterDescriptor, ResolvedValueArgument> valueArgumentsBeforeSubstitution;
|
|
||||||
private final MutableDataFlowInfoForArguments dataFlowInfoForArguments;
|
private final MutableDataFlowInfoForArguments dataFlowInfoForArguments;
|
||||||
private final Map<ValueArgument, ArgumentMatchImpl> argumentToParameterMap = Maps.newHashMap();
|
private final Map<ValueArgument, ArgumentMatchImpl> argumentToParameterMap = Maps.newHashMap();
|
||||||
|
|
||||||
@@ -201,9 +202,12 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements MutableRe
|
|||||||
substitutedParametersMap.put(valueParameterDescriptor.getOriginal(), valueParameterDescriptor);
|
substitutedParametersMap.put(valueParameterDescriptor.getOriginal(), valueParameterDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
valueArgumentsBeforeSubstitution = Maps.newLinkedHashMap(valueArguments);
|
Collection<Map.Entry<ValueParameterDescriptor, ResolvedValueArgument>> valueArgumentsBeforeSubstitution =
|
||||||
|
new SmartList<Map.Entry<ValueParameterDescriptor, ResolvedValueArgument>>(valueArguments.entrySet());
|
||||||
|
|
||||||
valueArguments.clear();
|
valueArguments.clear();
|
||||||
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : valueArgumentsBeforeSubstitution.entrySet()) {
|
|
||||||
|
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : valueArgumentsBeforeSubstitution) {
|
||||||
ValueParameterDescriptor substitutedVersion = substitutedParametersMap.get(entry.getKey().getOriginal());
|
ValueParameterDescriptor substitutedVersion = substitutedParametersMap.get(entry.getKey().getOriginal());
|
||||||
assert substitutedVersion != null : entry.getKey();
|
assert substitutedVersion != null : entry.getKey();
|
||||||
valueArguments.put(substitutedVersion, entry.getValue());
|
valueArguments.put(substitutedVersion, entry.getValue());
|
||||||
@@ -265,14 +269,6 @@ public class ResolvedCallImpl<D extends CallableDescriptor> implements MutableRe
|
|||||||
return valueArguments;
|
return valueArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public Map<ValueParameterDescriptor, ResolvedValueArgument> getUnsubstitutedValueArguments() {
|
|
||||||
// TODO We need unsubstituted value arguments to compare signatures for specificity when explicit type arguments are provided.
|
|
||||||
// Current implementation is questionable (mostly due to lack of well-defined contract for MutableResolvedCall).
|
|
||||||
return valueArgumentsBeforeSubstitution != null ? valueArgumentsBeforeSubstitution : valueArguments;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public List<ResolvedValueArgument> getValueArgumentsByIndex() {
|
public List<ResolvedValueArgument> getValueArgumentsByIndex() {
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ class CandidateCallWithArgumentMapping<D : CallableDescriptor, K> private constr
|
|||||||
var parametersWithDefaultValuesCount = 0
|
var parametersWithDefaultValuesCount = 0
|
||||||
|
|
||||||
val unsubstitutedValueParameters = call.candidateDescriptor.original.valueParameters
|
val unsubstitutedValueParameters = call.candidateDescriptor.original.valueParameters
|
||||||
for ((valueParameterDescriptor, resolvedValueArgument) in call.unsubstitutedValueArguments.entries) {
|
for ((valueParameterDescriptor, resolvedValueArgument) in call.valueArguments.entries) {
|
||||||
if (resolvedValueArgument is DefaultValueArgument) {
|
if (resolvedValueArgument is DefaultValueArgument) {
|
||||||
parametersWithDefaultValuesCount++
|
parametersWithDefaultValuesCount++
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user