Use ReflectionTypes instead of KotlinBuiltIns in type checker
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<JetType>,
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -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()),
|
||||
|
||||
+7
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -673,44 +673,7 @@ public class KotlinBuiltIns {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JetType getKFunctionType(
|
||||
@NotNull Annotations annotations,
|
||||
@Nullable JetType receiverType,
|
||||
@NotNull List<JetType> parameterTypes,
|
||||
@NotNull JetType returnType,
|
||||
boolean extensionFunction
|
||||
) {
|
||||
List<TypeProjection> 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<TypeProjection> getFunctionTypeArgumentProjections(
|
||||
public static List<TypeProjection> getFunctionTypeArgumentProjections(
|
||||
@Nullable JetType receiverType,
|
||||
@NotNull List<JetType> parameterTypes,
|
||||
@NotNull JetType returnType
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user