From fd006c521f58037f75d15b7534873b7c20cc53d5 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 6 Aug 2015 04:56:06 +0300 Subject: [PATCH] Add capacities to some ArrayList instances in project The changed lists were visible in the profiler memory snapshot. It's unclear what this will save, but each of these lists was retaining at least several megabytes of memory --- .../AlternativeMethodSignatureData.java | 15 ++++++----- .../SignaturesPropagationData.java | 2 +- .../kotlin/resolve/calls/util/CallMaker.java | 3 ++- .../java/typeEnhacement/typeEnhancement.kt | 3 ++- .../kotlin/builtins/KotlinBuiltIns.java | 2 +- .../impl/FunctionDescriptorImpl.java | 26 ++++++++++--------- .../kotlin/types/CommonSupertypes.java | 7 +++-- .../org/jetbrains/kotlin/types/TypeUtils.java | 6 ++--- 8 files changed, 35 insertions(+), 29 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/AlternativeMethodSignatureData.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/AlternativeMethodSignatureData.java index 9c9bf7c4293..106df48f360 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/AlternativeMethodSignatureData.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/AlternativeMethodSignatureData.java @@ -41,7 +41,10 @@ import org.jetbrains.kotlin.types.Variance; import org.jetbrains.kotlin.types.checker.JetTypeChecker; import org.jetbrains.kotlin.types.typeUtil.TypeUtilPackage; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; import static org.jetbrains.kotlin.load.java.components.TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT; import static org.jetbrains.kotlin.load.java.components.TypeUsage.UPPER_BOUND; @@ -188,8 +191,8 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD parameterDescriptors.size(), altFunDeclaration.getValueParameters().size()); } - List altParamDescriptors = new ArrayList(); - for (int i = 0, size = parameterDescriptors.size(); i < size; i++) { + List altParamDescriptors = new ArrayList(parameterDescriptors.size()); + for (int i = 0; i < parameterDescriptors.size(); i++) { ValueParameterDescriptor originalParameterDescriptor = parameterDescriptors.get(i); JetParameter annotationValueParameter = altFunDeclaration.getValueParameters().get(i); @@ -231,7 +234,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD originalParameterDescriptor.declaresDefaultValue(), alternativeVarargElementType, SourceElement.NO_SOURCE - )); + )); } altValueParameters = altParamDescriptors; @@ -243,9 +246,9 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD typeParameters.size(), altFunDeclaration.getTypeParameters().size()); } - altTypeParameters = new ArrayList(); + altTypeParameters = new ArrayList(typeParameters.size()); - for (int i = 0, size = typeParameters.size(); i < size; i++) { + for (int i = 0; i < typeParameters.size(); i++) { TypeParameterDescriptor originalTypeParamDescriptor = typeParameters.get(i); TypeParameterDescriptorImpl altParamDescriptor = originalToAltTypeParameters.get(originalTypeParamDescriptor); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java index c9c6c6fed9e..3ed82d56375 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java @@ -216,7 +216,7 @@ public class SignaturesPropagationData { DescriptorUtils.getFqName(containingClass); JetType resultReceiverType = null; - List resultParameters = Lists.newArrayList(); + List resultParameters = new ArrayList(parameters.size()); boolean shouldBeExtension = checkIfShouldBeExtension(); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/CallMaker.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/CallMaker.java index de74eacd22f..00a864b57d6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/CallMaker.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/CallMaker.java @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi.Call.CallType; import org.jetbrains.kotlin.psi.debugText.DebugTextPackage; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -199,7 +200,7 @@ public class CallMaker { public static Call makeCallWithExpressions(@NotNull JetElement callElement, @NotNull ReceiverValue explicitReceiver, @Nullable ASTNode callOperationNode, @NotNull JetExpression calleeExpression, @NotNull List argumentExpressions, @NotNull CallType callType) { - List arguments = Lists.newArrayList(); + List arguments = new ArrayList(argumentExpressions.size()); for (JetExpression argumentExpression : argumentExpressions) { arguments.add(makeValueArgument(argumentExpression, calleeExpression)); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeEnhancement.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeEnhancement.kt index 2c426fd2844..1d82fd5d204 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeEnhancement.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeEnhancement.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.platform.JavaToKotlinClassMap import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typeUtil.createProjection +import org.jetbrains.kotlin.utils.toReadOnlyList // The index in the lambda is the position of the type component: // Example: for `A>`, indices go as follows: `0 - A<...>, 1 - B, 2 - C, 3 - D, 4 - E`, @@ -119,7 +120,7 @@ private fun JetType.enhanceInflexible(qualifiers: (Int) -> JavaTypeQualifiers, i private fun List.compositeAnnotationsOrSingle() = when (size()) { 0 -> error("At least one Annotations object expected") 1 -> single() - else -> CompositeAnnotations(this) + else -> CompositeAnnotations(this.toReadOnlyList()) } private fun TypeComponentPosition.shouldEnhance() = this != TypeComponentPosition.INFLEXIBLE diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 720ab7c77a9..17645855ad0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -739,7 +739,7 @@ public class KotlinBuiltIns { @NotNull List parameterTypes, @NotNull JetType returnType ) { - List arguments = new ArrayList(); + List arguments = new ArrayList(parameterTypes.size() + (receiverType != null ? 1 : 0) + 1); if (receiverType != null) { arguments.add(defaultProjection(receiverType)); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index 83bf9c9cb37..ea5fa338e33 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -302,23 +302,25 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo @NotNull List unsubstitutedValueParameters, @NotNull TypeSubstitutor substitutor ) { - List result = new ArrayList(); + List result = new ArrayList(unsubstitutedValueParameters.size()); for (ValueParameterDescriptor unsubstitutedValueParameter : unsubstitutedValueParameters) { // TODO : Lazy? JetType substitutedType = substitutor.substitute(unsubstitutedValueParameter.getType(), Variance.IN_VARIANCE); JetType varargElementType = unsubstitutedValueParameter.getVarargElementType(); - JetType substituteVarargElementType = varargElementType == null ? null : substitutor.substitute(varargElementType, Variance.IN_VARIANCE); + JetType substituteVarargElementType = + varargElementType == null ? null : substitutor.substitute(varargElementType, Variance.IN_VARIANCE); if (substitutedType == null) return null; - result.add(new ValueParameterDescriptorImpl( - substitutedDescriptor, - unsubstitutedValueParameter, - unsubstitutedValueParameter.getIndex(), - unsubstitutedValueParameter.getAnnotations(), - unsubstitutedValueParameter.getName(), - substitutedType, - unsubstitutedValueParameter.declaresDefaultValue(), - substituteVarargElementType, - SourceElement.NO_SOURCE + result.add( + new ValueParameterDescriptorImpl( + substitutedDescriptor, + unsubstitutedValueParameter, + unsubstitutedValueParameter.getIndex(), + unsubstitutedValueParameter.getAnnotations(), + unsubstitutedValueParameter.getName(), + substitutedType, + unsubstitutedValueParameter.declaresDefaultValue(), + substituteVarargElementType, + SourceElement.NO_SOURCE ) ); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/CommonSupertypes.java b/core/descriptors/src/org/jetbrains/kotlin/types/CommonSupertypes.java index 7460747c43c..3ee9d1a3548 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/CommonSupertypes.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/CommonSupertypes.java @@ -212,12 +212,11 @@ public class CommonSupertypes { } List parameters = constructor.getParameters(); - List newProjections = new ArrayList(); - for (int i = 0, parametersSize = parameters.size(); i < parametersSize; i++) { - TypeParameterDescriptor parameterDescriptor = parameters.get(i); + List newProjections = new ArrayList(parameters.size()); + for (TypeParameterDescriptor parameterDescriptor : parameters) { Set typeProjections = new HashSet(); for (JetType type : types) { - typeProjections.add(type.getArguments().get(i)); + typeProjections.add(type.getArguments().get(parameterDescriptor.getIndex())); } newProjections.add(computeSupertypeProjection(parameterDescriptor, typeProjections, recursionDepth, maxDepth)); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java index 87e9dc5a256..46d8a7c5a31 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java @@ -425,12 +425,12 @@ public class TypeUtils { } @NotNull - public static List getDefaultTypeProjections(List parameters) { - List result = new ArrayList(); + public static List getDefaultTypeProjections(@NotNull List parameters) { + List result = new ArrayList(parameters.size()); for (TypeParameterDescriptor parameterDescriptor : parameters) { result.add(new TypeProjectionImpl(parameterDescriptor.getDefaultType())); } - return result; + return UtilsPackage.toReadOnlyList(result); } @NotNull