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 e0559fcc0f4..a9457946b99 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -30,6 +30,7 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl; +import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap; import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver; import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache; @@ -89,6 +90,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final JavaBridgeConfiguration javaBridgeConfiguration; private final JavaDescriptorResolver javaDescriptorResolver; private final PsiClassFinderImpl psiClassFinder; + private final JavaToKotlinClassMap javaToKotlinClassMap; private final JavaClassFinderImpl javaClassFinder; private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver; private final TraceBasedJavaResolverCache traceBasedJavaResolverCache; @@ -149,6 +151,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.javaBridgeConfiguration = new JavaBridgeConfiguration(); this.javaDescriptorResolver = new JavaDescriptorResolver(); this.psiClassFinder = new PsiClassFinderImpl(); + this.javaToKotlinClassMap = org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap.getInstance(); this.javaClassFinder = new JavaClassFinderImpl(); this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver(); this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache(); @@ -268,6 +271,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly expressionTypingServices.setCallExpressionResolver(callExpressionResolver); expressionTypingServices.setCallResolver(callResolver); expressionTypingServices.setDescriptorResolver(descriptorResolver); + expressionTypingServices.setPlatformToKotlinClassMap(javaToKotlinClassMap); expressionTypingServices.setProject(project); expressionTypingServices.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java index a1c9dad9af3..98c70de2a1e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.di; import org.jetbrains.jet.lang.resolve.BodyResolver; import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension; +import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import com.intellij.openapi.project.Project; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.BindingTrace; @@ -44,6 +45,7 @@ public class InjectorForBodyResolve { private final BodyResolver bodyResolver; private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension; + private final PlatformToKotlinClassMap platformToKotlinClassMap; private final Project project; private final TopDownAnalysisParameters topDownAnalysisParameters; private final BindingTrace bindingTrace; @@ -72,6 +74,7 @@ public class InjectorForBodyResolve { ) { this.bodyResolver = new BodyResolver(); this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension(); + this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap(); this.project = project; this.topDownAnalysisParameters = topDownAnalysisParameters; this.bindingTrace = bindingTrace; @@ -117,6 +120,7 @@ public class InjectorForBodyResolve { expressionTypingServices.setCallExpressionResolver(callExpressionResolver); expressionTypingServices.setCallResolver(callResolver); expressionTypingServices.setDescriptorResolver(descriptorResolver); + expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap); expressionTypingServices.setProject(project); expressionTypingServices.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java index cb82b4a5cfc..ce18b152825 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java @@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension; +import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; @@ -48,6 +49,7 @@ public class InjectorForLazyResolve { private final QualifiedExpressionResolver qualifiedExpressionResolver; private final JetImportsFactory jetImportsFactory; private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension; + private final PlatformToKotlinClassMap platformToKotlinClassMap; private final CallExpressionResolver callExpressionResolver; private final CallResolver callResolver; private final ArgumentTypeResolver argumentTypeResolver; @@ -69,6 +71,7 @@ public class InjectorForLazyResolve { this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.jetImportsFactory = new JetImportsFactory(); this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension(); + this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap(); this.callExpressionResolver = new CallExpressionResolver(); this.callResolver = new CallResolver(); this.argumentTypeResolver = new ArgumentTypeResolver(); @@ -81,6 +84,7 @@ public class InjectorForLazyResolve { this.expressionTypingServices.setCallExpressionResolver(callExpressionResolver); this.expressionTypingServices.setCallResolver(callResolver); this.expressionTypingServices.setDescriptorResolver(descriptorResolver); + this.expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap); this.expressionTypingServices.setProject(project); this.expressionTypingServices.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java index 7028b35c9de..e12e8c0cbc7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.di; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension; +import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import com.intellij.openapi.project.Project; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; @@ -36,6 +37,7 @@ public class InjectorForMacros { private final ExpressionTypingServices expressionTypingServices; private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension; + private final PlatformToKotlinClassMap platformToKotlinClassMap; private final Project project; private final ModuleDescriptor moduleDescriptor; private final CallExpressionResolver callExpressionResolver; @@ -53,6 +55,7 @@ public class InjectorForMacros { ) { this.expressionTypingServices = new ExpressionTypingServices(); this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension(); + this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap(); this.project = project; this.moduleDescriptor = moduleDescriptor; this.callExpressionResolver = new CallExpressionResolver(); @@ -67,6 +70,7 @@ public class InjectorForMacros { this.expressionTypingServices.setCallExpressionResolver(callExpressionResolver); this.expressionTypingServices.setCallResolver(callResolver); this.expressionTypingServices.setDescriptorResolver(descriptorResolver); + this.expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap); this.expressionTypingServices.setProject(project); this.expressionTypingServices.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index a13e5a56562..164bcc9e9e5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl; import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl; +import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.resolve.DeclarationResolver; import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver; @@ -64,6 +65,7 @@ public class InjectorForTopDownAnalyzerBasic { private final ModuleDescriptorImpl moduleDescriptor; private final DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy; private final NamespaceFactoryImpl namespaceFactory; + private final PlatformToKotlinClassMap platformToKotlinClassMap; private final DeclarationResolver declarationResolver; private final AnnotationResolver annotationResolver; private final CallResolver callResolver; @@ -85,7 +87,8 @@ public class InjectorForTopDownAnalyzerBasic { @NotNull Project project, @NotNull TopDownAnalysisParameters topDownAnalysisParameters, @NotNull BindingTrace bindingTrace, - @NotNull ModuleDescriptorImpl moduleDescriptor + @NotNull ModuleDescriptorImpl moduleDescriptor, + @NotNull PlatformToKotlinClassMap platformToKotlinClassMap ) { this.topDownAnalyzer = new TopDownAnalyzer(); this.topDownAnalysisContext = new TopDownAnalysisContext(); @@ -100,6 +103,7 @@ public class InjectorForTopDownAnalyzerBasic { this.moduleDescriptor = moduleDescriptor; this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl(); this.namespaceFactory = new NamespaceFactoryImpl(); + this.platformToKotlinClassMap = platformToKotlinClassMap; this.declarationResolver = new DeclarationResolver(); this.annotationResolver = new AnnotationResolver(); this.callResolver = new CallResolver(); @@ -175,6 +179,7 @@ public class InjectorForTopDownAnalyzerBasic { expressionTypingServices.setCallExpressionResolver(callExpressionResolver); expressionTypingServices.setCallResolver(callResolver); expressionTypingServices.setDescriptorResolver(descriptorResolver); + expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap); expressionTypingServices.setProject(project); expressionTypingServices.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index 943aced7d5b..c1d391ce1d3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -163,7 +163,7 @@ public class TopDownAnalyzer { Predicates.alwaysFalse(), true, false, Collections.emptyList()); InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic( project, topDownAnalysisParameters, new ObservableBindingTrace(trace), - KotlinBuiltIns.getInstance().getBuiltInsModule()); + KotlinBuiltIns.getInstance().getBuiltInsModule(), PlatformToKotlinClassMap.EMPTY); injector.getTopDownAnalyzer().doProcessStandardLibraryNamespace(outerScope, standardLibraryNamespace, files); } @@ -196,7 +196,8 @@ public class TopDownAnalyzer { false, true, Collections.emptyList()); InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic( - object.getProject(), topDownAnalysisParameters, new ObservableBindingTrace(context.trace), moduleDescriptor); + object.getProject(), topDownAnalysisParameters, new ObservableBindingTrace(context.trace), + moduleDescriptor, context.expressionTypingServices.getPlatformToKotlinClassMap()); injector.getTopDownAnalysisContext().setOuterDataFlowInfo(context.dataFlowInfo); 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 9f90bbce94d..c589d7689ad 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 @@ -23,6 +23,7 @@ import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; +import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.impl.FunctionDescriptorUtil; @@ -75,8 +76,12 @@ import static org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils.*; @SuppressWarnings("SuspiciousMethodCalls") public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { - protected BasicExpressionTypingVisitor(@NotNull ExpressionTypingInternals facade) { + + private final PlatformToKotlinClassMap platformToKotlinClassMap; + + protected BasicExpressionTypingVisitor(@NotNull ExpressionTypingInternals facade, @NotNull PlatformToKotlinClassMap platformToKotlinClassMap) { super(facade); + this.platformToKotlinClassMap = platformToKotlinClassMap; } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java index 589fe88d41b..3b3f7de898a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java @@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.ScriptDescriptor; @@ -54,8 +55,8 @@ import static org.jetbrains.jet.lang.types.expressions.CoercionStrategy.COERCION public class ExpressionTypingServices { - private final ExpressionTypingFacade expressionTypingFacade = ExpressionTypingVisitorDispatcher.create(); - + @NotNull + private ExpressionTypingFacade expressionTypingFacade; @NotNull private Project project; @NotNull @@ -66,8 +67,8 @@ public class ExpressionTypingServices { private DescriptorResolver descriptorResolver; @NotNull private TypeResolver typeResolver; - - + @NotNull + private PlatformToKotlinClassMap platformToKotlinClassMap; @NotNull public Project getProject() { @@ -119,6 +120,17 @@ public class ExpressionTypingServices { this.typeResolver = typeResolver; } + @Inject + public void setPlatformToKotlinClassMap(@NotNull PlatformToKotlinClassMap platformToKotlinClassMap) { + this.platformToKotlinClassMap = platformToKotlinClassMap; + this.expressionTypingFacade = ExpressionTypingVisitorDispatcher.create(platformToKotlinClassMap); + } + + @NotNull + public PlatformToKotlinClassMap getPlatformToKotlinClassMap() { + return platformToKotlinClassMap; + } + @NotNull public JetType safeGetType(@NotNull JetScope scope, @NotNull JetExpression expression, @NotNull JetType expectedType, @NotNull DataFlowInfo dataFlowInfo, @NotNull BindingTrace trace) { JetType type = getType(scope, expression, expectedType, dataFlowInfo, trace); @@ -247,7 +259,7 @@ public class ExpressionTypingServices { return JetTypeInfo.create(KotlinBuiltIns.getInstance().getUnitType(), context.dataFlowInfo); } - ExpressionTypingInternals blockLevelVisitor = ExpressionTypingVisitorDispatcher.createForBlock(scope); + ExpressionTypingInternals blockLevelVisitor = ExpressionTypingVisitorDispatcher.createForBlock(platformToKotlinClassMap, scope); ExpressionTypingContext newContext = createContext(context, trace, scope, context.dataFlowInfo, NO_EXPECTED_TYPE); JetTypeInfo result = JetTypeInfo.create(null, context.dataFlowInfo); @@ -271,7 +283,7 @@ public class ExpressionTypingServices { if (newDataFlowInfo != context.dataFlowInfo) { newContext = newContext.replaceDataFlowInfo(newDataFlowInfo); } - blockLevelVisitor = ExpressionTypingVisitorDispatcher.createForBlock(scope); + blockLevelVisitor = ExpressionTypingVisitorDispatcher.createForBlock(platformToKotlinClassMap, scope); } return result; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorDispatcher.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorDispatcher.java index 0edb86b04a5..0c9a22f237e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorDispatcher.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorDispatcher.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.types.expressions; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; @@ -38,13 +39,16 @@ public class ExpressionTypingVisitorDispatcher extends JetVisitor