From c7277250d9d78ec21d825ac5242959203ecd9034 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 6 May 2014 18:15:33 +0400 Subject: [PATCH] Use ReflectionTypes instead of KotlinBuiltIns in type checker --- .../di/InjectorForLazyResolveWithJava.java | 4 ++ .../di/InjectorForTopDownAnalyzerForJvm.java | 4 ++ .../jet/di/InjectorForBodyResolve.java | 4 ++ .../jet/di/InjectorForLazyResolve.java | 4 ++ .../jetbrains/jet/di/InjectorForMacros.java | 4 ++ .../di/InjectorForTopDownAnalyzerBasic.java | 4 ++ .../jet/lang/reflect/ReflectionTypes.kt | 30 ++++++++++++++ .../BasicExpressionTypingVisitor.java | 10 +++-- .../ExpressionTypingComponents.java | 7 ++++ .../jetbrains/jet/di/InjectorForTests.java | 4 ++ .../jet/lang/types/lang/KotlinBuiltIns.java | 39 +------------------ .../di/InjectorForTopDownAnalyzerForJs.java | 4 ++ 12 files changed, 77 insertions(+), 41 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java index b41a7628395..b6cce7f96a1 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java @@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; @@ -93,6 +94,7 @@ public class InjectorForLazyResolveWithJava { private final ControlStructureTypingUtils controlStructureTypingUtils; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final CallExpressionResolver callExpressionResolver; private final DescriptorResolver descriptorResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; @@ -147,6 +149,7 @@ public class InjectorForLazyResolveWithJava { this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(getModule()); this.callExpressionResolver = new CallExpressionResolver(); this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); @@ -212,6 +215,7 @@ public class InjectorForLazyResolveWithJava { expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); expressionTypingComponents.setGlobalContext(globalContext); expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + expressionTypingComponents.setReflectionTypes(reflectionTypes); forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices); forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index c53248b6832..3103b63f1fe 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -44,6 +44,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; @@ -105,6 +106,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final ControlStructureTypingUtils controlStructureTypingUtils; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final CallExpressionResolver callExpressionResolver; private final DescriptorResolver descriptorResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; @@ -170,6 +172,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(getModuleDescriptor()); this.callExpressionResolver = new CallExpressionResolver(); this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); @@ -262,6 +265,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); expressionTypingComponents.setGlobalContext(globalContext); expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + expressionTypingComponents.setReflectionTypes(reflectionTypes); forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices); forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java index da9770c4a9a..5f13bed034a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; @@ -64,6 +65,7 @@ public class InjectorForBodyResolve { private final ControlStructureTypingUtils controlStructureTypingUtils; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final CallExpressionResolver callExpressionResolver; private final DescriptorResolver descriptorResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; @@ -97,6 +99,7 @@ public class InjectorForBodyResolve { this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(moduleDescriptor); this.callExpressionResolver = new CallExpressionResolver(); this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); @@ -146,6 +149,7 @@ public class InjectorForBodyResolve { expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); expressionTypingComponents.setGlobalContext(globalContext); expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + expressionTypingComponents.setReflectionTypes(reflectionTypes); forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices); forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java index 77bf8b6b59b..f9d7773710a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java @@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; @@ -68,6 +69,7 @@ public class InjectorForLazyResolve { private final ControlStructureTypingUtils controlStructureTypingUtils; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final CallExpressionResolver callExpressionResolver; private final DescriptorResolver descriptorResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; @@ -104,6 +106,7 @@ public class InjectorForLazyResolve { this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(moduleDescriptor); this.callExpressionResolver = new CallExpressionResolver(); this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); @@ -152,6 +155,7 @@ public class InjectorForLazyResolve { expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); expressionTypingComponents.setGlobalContext(globalContext); expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + expressionTypingComponents.setReflectionTypes(reflectionTypes); forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices); forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java index f9dc1ce8859..206a8b21aa4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java @@ -34,6 +34,7 @@ import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.annotations.NotNull; @@ -61,6 +62,7 @@ public class InjectorForMacros { private final ControlStructureTypingUtils controlStructureTypingUtils; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final ArgumentTypeResolver argumentTypeResolver; private final CandidateResolver candidateResolver; @@ -86,6 +88,7 @@ public class InjectorForMacros { this.controlStructureTypingUtils = new ControlStructureTypingUtils(getExpressionTypingServices()); this.expressionTypingUtils = new ExpressionTypingUtils(getExpressionTypingServices(), getCallResolver()); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(moduleDescriptor); this.argumentTypeResolver = new ArgumentTypeResolver(); this.candidateResolver = new CandidateResolver(); @@ -104,6 +107,7 @@ public class InjectorForMacros { this.expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); this.expressionTypingComponents.setGlobalContext(globalContext); this.expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + this.expressionTypingComponents.setReflectionTypes(reflectionTypes); this.callResolver.setArgumentTypeResolver(argumentTypeResolver); this.callResolver.setCandidateResolver(candidateResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index d28d8652566..d70201046e1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; @@ -80,6 +81,7 @@ public class InjectorForTopDownAnalyzerBasic { private final ControlStructureTypingUtils controlStructureTypingUtils; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final CallExpressionResolver callExpressionResolver; private final DescriptorResolver descriptorResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; @@ -125,6 +127,7 @@ public class InjectorForTopDownAnalyzerBasic { this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(getModuleDescriptor()); this.callExpressionResolver = new CallExpressionResolver(); this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); @@ -200,6 +203,7 @@ public class InjectorForTopDownAnalyzerBasic { expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); expressionTypingComponents.setGlobalContext(globalContext); expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + expressionTypingComponents.setReflectionTypes(reflectionTypes); forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices); forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/reflect/ReflectionTypes.kt b/compiler/frontend/src/org/jetbrains/jet/lang/reflect/ReflectionTypes.kt index 29896a904b4..169e192f071 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/reflect/ReflectionTypes.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/reflect/ReflectionTypes.kt @@ -22,10 +22,40 @@ import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.lang.resolve.scopes.JetScope import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns +import org.jetbrains.jet.lang.descriptors.annotations.Annotations +import org.jetbrains.jet.lang.types.JetType +import org.jetbrains.jet.lang.types.JetTypeImpl public class ReflectionTypes(private val module: ModuleDescriptor) { // TODO: use module instead of built-ins public fun getKFunction(n: Int): ClassDescriptor = KotlinBuiltIns.getInstance().getKFunction(n) public fun getKExtensionFunction(n: Int): ClassDescriptor = KotlinBuiltIns.getInstance().getKExtensionFunction(n) public fun getKMemberFunction(n: Int): ClassDescriptor = KotlinBuiltIns.getInstance().getKMemberFunction(n) + + public fun getKFunctionType( + annotations: Annotations, + receiverType: JetType?, + parameterTypes: List, + returnType: JetType, + extensionFunction: Boolean + ): JetType { + val arguments = KotlinBuiltIns.getFunctionTypeArgumentProjections(receiverType, parameterTypes, returnType) + val classDescriptor = correspondingKFunctionClass(receiverType, extensionFunction, parameterTypes.size) + + return JetTypeImpl(annotations, classDescriptor.getTypeConstructor(), false, arguments, classDescriptor.getMemberScope(arguments)) + } + + private fun correspondingKFunctionClass( + receiverType: JetType?, + extensionFunction: Boolean, + numberOfParameters: Int + ): ClassDescriptor { + if (extensionFunction) { + return getKExtensionFunction(numberOfParameters) + } + if (receiverType != null) { + return getKMemberFunction(numberOfParameters) + } + return getKFunction(numberOfParameters) + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 206730f3cc6..8a13f327825 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -39,7 +39,10 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.Nullability; import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext; import org.jetbrains.jet.lang.resolve.calls.context.CheckValueArgumentsMode; import org.jetbrains.jet.lang.resolve.calls.context.TemporaryTraceAndCache; -import org.jetbrains.jet.lang.resolve.calls.model.*; +import org.jetbrains.jet.lang.resolve.calls.model.DataFlowInfoForArgumentsImpl; +import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; +import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl; +import org.jetbrains.jet.lang.resolve.calls.model.VariableAsFunctionResolvedCall; import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResults; import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResultsImpl; import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResultsUtil; @@ -74,7 +77,8 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.*; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getStaticNestedClassesScope; import static org.jetbrains.jet.lang.resolve.calls.context.ContextDependency.INDEPENDENT; import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER; -import static org.jetbrains.jet.lang.types.TypeUtils.*; +import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; +import static org.jetbrains.jet.lang.types.TypeUtils.noExpectedType; import static org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils.createCallForSpecialConstruction; import static org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils.*; import static org.jetbrains.jet.lang.types.expressions.TypeReconstructionUtil.reconstructBareType; @@ -491,7 +495,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { } //noinspection ConstantConditions - JetType type = KotlinBuiltIns.getInstance().getKFunctionType( + JetType type = components.reflectionTypes.getKFunctionType( Annotations.EMPTY, receiverType, DescriptorUtils.getValueParametersTypes(descriptor.getValueParameters()), diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingComponents.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingComponents.java index 508b8415f25..747e2bca89c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingComponents.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingComponents.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.types.expressions; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.context.GlobalContext; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallResolver; import javax.inject.Inject; @@ -31,6 +32,7 @@ public class ExpressionTypingComponents { /*package*/ ExpressionTypingUtils expressionTypingUtils; /*package*/ ControlStructureTypingUtils controlStructureTypingUtils; /*package*/ ForLoopConventionsChecker forLoopConventionsChecker; + /*package*/ ReflectionTypes reflectionTypes; @Inject public void setGlobalContext(@NotNull GlobalContext globalContext) { @@ -67,6 +69,11 @@ public class ExpressionTypingComponents { this.forLoopConventionsChecker = forLoopConventionsChecker; } + @Inject + public void setReflectionTypes(@NotNull ReflectionTypes reflectionTypes) { + this.reflectionTypes = reflectionTypes; + } + @NotNull public ForLoopConventionsChecker getForLoopConventionsChecker() { return forLoopConventionsChecker; diff --git a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java index 3a495f107a6..424e90c175e 100644 --- a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java +++ b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java @@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; @@ -60,6 +61,7 @@ public class InjectorForTests { private final ExpressionTypingComponents expressionTypingComponents; private final ControlStructureTypingUtils controlStructureTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final CallExpressionResolver callExpressionResolver; private final CallResolverExtensionProvider callResolverExtensionProvider; private final QualifiedExpressionResolver qualifiedExpressionResolver; @@ -85,6 +87,7 @@ public class InjectorForTests { this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.controlStructureTypingUtils = new ControlStructureTypingUtils(getExpressionTypingServices()); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(moduleDescriptor); this.callExpressionResolver = new CallExpressionResolver(); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); @@ -131,6 +134,7 @@ public class InjectorForTests { expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); expressionTypingComponents.setGlobalContext(globalContext); expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + expressionTypingComponents.setReflectionTypes(reflectionTypes); forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices); forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index 2239c21fc9a..16367f57392 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -673,44 +673,7 @@ public class KotlinBuiltIns { } @NotNull - public JetType getKFunctionType( - @NotNull Annotations annotations, - @Nullable JetType receiverType, - @NotNull List parameterTypes, - @NotNull JetType returnType, - boolean extensionFunction - ) { - List arguments = getFunctionTypeArgumentProjections(receiverType, parameterTypes, returnType); - ClassDescriptor classDescriptor = getCorrespondingKFunctionClass(receiverType, extensionFunction, parameterTypes.size()); - - return new JetTypeImpl( - annotations, - classDescriptor.getTypeConstructor(), - false, - arguments, - classDescriptor.getMemberScope(arguments) - ); - } - - @NotNull - private ClassDescriptor getCorrespondingKFunctionClass( - @Nullable JetType receiverType, - boolean extensionFunction, - int numberOfParameters - ) { - if (receiverType == null) { - return getKFunction(numberOfParameters); - } - else if (extensionFunction) { - return getKExtensionFunction(numberOfParameters); - } - else { - return getKMemberFunction(numberOfParameters); - } - } - - @NotNull - private static List getFunctionTypeArgumentProjections( + public static List getFunctionTypeArgumentProjections( @Nullable JetType receiverType, @NotNull List parameterTypes, @NotNull JetType returnType diff --git a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java index e6d5fca0264..5c7d6961076 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; +import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; @@ -80,6 +81,7 @@ public class InjectorForTopDownAnalyzerForJs { private final ControlStructureTypingUtils controlStructureTypingUtils; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; + private final ReflectionTypes reflectionTypes; private final CallExpressionResolver callExpressionResolver; private final DescriptorResolver descriptorResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; @@ -125,6 +127,7 @@ public class InjectorForTopDownAnalyzerForJs { this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); + this.reflectionTypes = new ReflectionTypes(getModuleDescriptor()); this.callExpressionResolver = new CallExpressionResolver(); this.descriptorResolver = new DescriptorResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); @@ -200,6 +203,7 @@ public class InjectorForTopDownAnalyzerForJs { expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker); expressionTypingComponents.setGlobalContext(globalContext); expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap); + expressionTypingComponents.setReflectionTypes(reflectionTypes); forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices); forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils);