From d8759fcbcc81793604681d7be32425b2484246c3 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 13 Sep 2016 22:22:50 +0300 Subject: [PATCH] Optimizations --- .../kotlin/resolve/calls/ArgumentTypeResolver.java | 10 +++++----- .../jetbrains/kotlin/resolve/calls/CallResolver.java | 5 +---- .../calls/inference/ConstraintSystemBuilderImpl.kt | 4 +--- .../resolve/calls/util/functionTypeResolveUtils.kt | 9 ++++++--- .../org/jetbrains/kotlin/types/KotlinTypeFactory.kt | 12 ++++++++++-- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ArgumentTypeResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ArgumentTypeResolver.java index fc5d1ddcec3..c44e4668931 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ArgumentTypeResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ArgumentTypeResolver.java @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.resolve.calls; -import com.google.common.collect.Lists; import kotlin.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -52,6 +51,7 @@ import org.jetbrains.kotlin.types.expressions.*; import org.jetbrains.kotlin.types.expressions.typeInfoFactory.TypeInfoFactoryKt; import javax.inject.Inject; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -272,7 +272,7 @@ public class ArgumentTypeResolver { } return FunctionTypeResolveUtilsKt.createFunctionType( - builtIns, Annotations.Companion.getEMPTY(), null, Collections.emptyList(), Collections.emptyList(), TypeUtils.DONT_CARE + builtIns, Annotations.Companion.getEMPTY(), null, Collections.emptyList(), null, TypeUtils.DONT_CARE ); } @@ -303,14 +303,14 @@ public class ArgumentTypeResolver { ? functionPlaceholders .createFunctionPlaceholderType(Collections.emptyList(), /* hasDeclaredArguments = */ false) : FunctionTypeResolveUtilsKt.createFunctionType( - builtIns, Annotations.Companion.getEMPTY(), null, Collections.emptyList(), Collections.emptyList(), DONT_CARE + builtIns, Annotations.Companion.getEMPTY(), null, Collections.emptyList(), null, DONT_CARE ); } List valueParameters = function.getValueParameters(); TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create( trace, "trace to resolve function literal parameter types"); - List parameterTypes = Lists.newArrayList(); - List parameterNames = Lists.newArrayList(); + List parameterTypes = new ArrayList(valueParameters.size()); + List parameterNames = new ArrayList(valueParameters.size()); for (KtParameter parameter : valueParameters) { parameterTypes.add(resolveTypeRefWithDefault(parameter.getTypeReference(), scope, temporaryTrace, DONT_CARE)); Name name = parameter.getNameAsName(); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java index 837460de7d8..b23586de025 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.name.Name; -import org.jetbrains.kotlin.name.SpecialNames; import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.*; @@ -291,13 +290,11 @@ public class CallResolver { if (calleeExpression instanceof KtLambdaExpression) { int parameterNumber = ((KtLambdaExpression) calleeExpression).getValueParameters().size(); List parameterTypes = new ArrayList(parameterNumber); - List parameterNames = new ArrayList(parameterNumber); for (int i = 0; i < parameterNumber; i++) { parameterTypes.add(NO_EXPECTED_TYPE); - parameterNames.add(SpecialNames.NO_NAME_PROVIDED); } expectedType = FunctionTypeResolveUtilsKt.createFunctionType( - builtIns, Annotations.Companion.getEMPTY(), null, parameterTypes, parameterNames, context.expectedType + builtIns, Annotations.Companion.getEMPTY(), null, parameterTypes, null, context.expectedType ); } KotlinType calleeType = expressionTypingServices.safeGetType( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemBuilderImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemBuilderImpl.kt index db8ee4ce113..b99ee6c21d5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemBuilderImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/inference/ConstraintSystemBuilderImpl.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.resolve.calls.inference import org.jetbrains.kotlin.builtins.isExtensionFunctionType import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilderImpl.ConstraintKind.EQUAL import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilderImpl.ConstraintKind.SUB_TYPE import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.Bound @@ -449,6 +448,5 @@ internal fun createTypeForFunctionPlaceholder( functionPlaceholderTypeConstructor.argumentTypes } val receiverType = if (isExtension) DONT_CARE else null - val parameterNames = newArgumentTypes.map { SpecialNames.NO_NAME_PROVIDED } - return createFunctionType(functionPlaceholder.builtIns, Annotations.EMPTY, receiverType, newArgumentTypes, parameterNames, DONT_CARE) + return createFunctionType(functionPlaceholder.builtIns, Annotations.EMPTY, receiverType, newArgumentTypes, null, DONT_CARE) } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt index 17298f068b1..6ebdd98882c 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt @@ -28,7 +28,10 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.KotlinTypeFactory +import org.jetbrains.kotlin.types.SimpleType +import org.jetbrains.kotlin.types.TypeProjection fun createValueParametersForInvokeInFunctionType( functionDescriptor: FunctionDescriptor, parameterTypes: List @@ -51,9 +54,9 @@ fun createFunctionType( annotations: Annotations, receiverType: KotlinType?, parameterTypes: List, - parameterNames: List, + parameterNames: List?, returnType: KotlinType -): FunctionType { +): SimpleType { val arguments = getFunctionTypeArgumentProjections(receiverType, parameterTypes, returnType) val size = parameterTypes.size val classDescriptor = builtIns.getFunction(if (receiverType == null) size else size + 1) diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt index aa10c2c1fd0..3306428fafa 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt @@ -56,8 +56,16 @@ object KotlinTypeFactory { annotations: Annotations, descriptor: ClassDescriptor, arguments: List, - parameterNames: List - ): FunctionType = FunctionType(simpleNotNullType(annotations, descriptor, arguments), parameterNames) + parameterNames: List? + ): SimpleType { + val simpleType = simpleNotNullType(annotations, descriptor, arguments) + if (parameterNames == null || parameterNames.all { it.isSpecial }) { + return simpleType + } + else { + return FunctionType(simpleType, parameterNames) + } + } @JvmStatic fun simpleType(