Add minor memory optimization

Get rid of 'unsubstitutedValueArguments' in resolved call
This commit is contained in:
Denis Zharkov
2016-02-08 14:00:22 +03:00
parent a08b8f43b2
commit de3f507744
4 changed files with 8 additions and 22 deletions
@@ -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();
@@ -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() {
@@ -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++
} }