From 65ef7525ce78d9a8107360a74462322dbcbb229a Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Wed, 3 Dec 2014 14:42:26 +0300 Subject: [PATCH] Allow to use dynamic types for JS projects in IDEA. --- .../jet/di/InjectorForLazyBodyResolve.java | 9 ++++---- .../jet/di/InjectorForLazyResolve.java | 9 ++++---- .../AbstractDescriptorRendererTest.kt | 3 ++- .../generators/injectors/GenerateInjectors.kt | 2 ++ .../plugin/caches/resolve/JsAnalyzerFacade.kt | 4 +++- .../caches/resolve/KotlinResolveCache.kt | 4 +++- .../navigation/JetSourceNavigationHelper.java | 6 ++++-- .../jet/plugin/project/TargetPlatform.java | 9 ++++++-- .../plugin/project/TargetPlatformImpl.java | 21 +++++++++++++------ idea/testData/checker/js/dynamic.kt | 12 +++++++++++ .../checkers/JetJsCheckerTestGenerated.java | 6 ++++++ 11 files changed, 64 insertions(+), 21 deletions(-) create mode 100644 idea/testData/checker/js/dynamic.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyBodyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyBodyResolve.java index 8c3a808aebf..c334a269399 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyBodyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyBodyResolve.java @@ -22,6 +22,7 @@ import org.jetbrains.jet.storage.StorageManager; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider; +import org.jetbrains.jet.lang.types.DynamicTypesSettings; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; @@ -33,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; -import org.jetbrains.jet.lang.types.DynamicTypesSettings; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; import org.jetbrains.jet.lang.reflect.ReflectionTypes; @@ -77,6 +77,7 @@ public class InjectorForLazyBodyResolve { private final KotlinCodeAnalyzer analyzer; private final BindingTrace bindingTrace; private final AdditionalCheckerProvider additionalCheckerProvider; + private final DynamicTypesSettings dynamicTypesSettings; private final ModuleDescriptor moduleDescriptor; private final KotlinBuiltIns kotlinBuiltIns; private final PlatformToKotlinClassMap platformToKotlinClassMap; @@ -88,7 +89,6 @@ public class InjectorForLazyBodyResolve { private final ExpressionTypingServices expressionTypingServices; private final ExpressionTypingComponents expressionTypingComponents; private final ControlStructureTypingUtils controlStructureTypingUtils; - private final DynamicTypesSettings dynamicTypesSettings; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; private final ReflectionTypes reflectionTypes; @@ -125,7 +125,8 @@ public class InjectorForLazyBodyResolve { @NotNull GlobalContext globalContext, @NotNull KotlinCodeAnalyzer analyzer, @NotNull BindingTrace bindingTrace, - @NotNull AdditionalCheckerProvider additionalCheckerProvider + @NotNull AdditionalCheckerProvider additionalCheckerProvider, + @NotNull DynamicTypesSettings dynamicTypesSettings ) { this.project = project; this.globalContext = globalContext; @@ -133,6 +134,7 @@ public class InjectorForLazyBodyResolve { this.analyzer = analyzer; this.bindingTrace = bindingTrace; this.additionalCheckerProvider = additionalCheckerProvider; + this.dynamicTypesSettings = dynamicTypesSettings; this.moduleDescriptor = analyzer.getModuleDescriptor(); this.kotlinBuiltIns = moduleDescriptor.getBuiltIns(); this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap(); @@ -144,7 +146,6 @@ public class InjectorForLazyBodyResolve { this.expressionTypingComponents = new ExpressionTypingComponents(); this.expressionTypingServices = new ExpressionTypingServices(expressionTypingComponents); this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); - this.dynamicTypesSettings = new DynamicTypesSettings(); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver, kotlinBuiltIns); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); this.reflectionTypes = new ReflectionTypes(moduleDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java index d1559ba1f8d..8570cdd9e4a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider; +import org.jetbrains.jet.lang.types.DynamicTypesSettings; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.context.LazyResolveToken; import org.jetbrains.jet.lang.resolve.AnnotationResolver; @@ -33,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; -import org.jetbrains.jet.lang.types.DynamicTypesSettings; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; import org.jetbrains.jet.lang.reflect.ReflectionTypes; @@ -68,6 +68,7 @@ public class InjectorForLazyResolve { private final DeclarationProviderFactory declarationProviderFactory; private final BindingTrace bindingTrace; private final AdditionalCheckerProvider additionalCheckerProvider; + private final DynamicTypesSettings dynamicTypesSettings; private final ResolveSession resolveSession; private final LazyResolveToken lazyResolveToken; private final AnnotationResolver annotationResolver; @@ -76,7 +77,6 @@ public class InjectorForLazyResolve { private final ExpressionTypingServices expressionTypingServices; private final ExpressionTypingComponents expressionTypingComponents; private final ControlStructureTypingUtils controlStructureTypingUtils; - private final DynamicTypesSettings dynamicTypesSettings; private final ExpressionTypingUtils expressionTypingUtils; private final ForLoopConventionsChecker forLoopConventionsChecker; private final ReflectionTypes reflectionTypes; @@ -102,7 +102,8 @@ public class InjectorForLazyResolve { @NotNull ModuleDescriptorImpl moduleDescriptor, @NotNull DeclarationProviderFactory declarationProviderFactory, @NotNull BindingTrace bindingTrace, - @NotNull AdditionalCheckerProvider additionalCheckerProvider + @NotNull AdditionalCheckerProvider additionalCheckerProvider, + @NotNull DynamicTypesSettings dynamicTypesSettings ) { this.project = project; this.globalContext = globalContext; @@ -113,6 +114,7 @@ public class InjectorForLazyResolve { this.declarationProviderFactory = declarationProviderFactory; this.bindingTrace = bindingTrace; this.additionalCheckerProvider = additionalCheckerProvider; + this.dynamicTypesSettings = dynamicTypesSettings; this.resolveSession = new ResolveSession(project, globalContext, moduleDescriptor, declarationProviderFactory, bindingTrace); this.lazyResolveToken = new LazyResolveToken(); this.annotationResolver = new AnnotationResolver(); @@ -121,7 +123,6 @@ public class InjectorForLazyResolve { this.expressionTypingComponents = new ExpressionTypingComponents(); this.expressionTypingServices = new ExpressionTypingServices(expressionTypingComponents); this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices); - this.dynamicTypesSettings = new DynamicTypesSettings(); this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver, kotlinBuiltIns); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); this.reflectionTypes = new ReflectionTypes(moduleDescriptor); diff --git a/compiler/tests/org/jetbrains/jet/renderer/AbstractDescriptorRendererTest.kt b/compiler/tests/org/jetbrains/jet/renderer/AbstractDescriptorRendererTest.kt index 0f68de9e3c1..03fa7d71b93 100644 --- a/compiler/tests/org/jetbrains/jet/renderer/AbstractDescriptorRendererTest.kt +++ b/compiler/tests/org/jetbrains/jet/renderer/AbstractDescriptorRendererTest.kt @@ -49,6 +49,7 @@ import org.jetbrains.jet.lang.psi.JetClassInitializer import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment import com.intellij.openapi.util.io.FileUtil import org.jetbrains.jet.lang.psi.JetPsiFactory +import org.jetbrains.jet.lang.types.DynamicTypesSettings public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment() { protected open fun getDescriptor(declaration: JetDeclaration, resolveSession: ResolveSession): DeclarationDescriptor { @@ -66,7 +67,7 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment getProject(), globalContext, lazyModule, FileBasedDeclarationProviderFactory(globalContext.storageManager, listOf(psiFile)), CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), - JavaDeclarationCheckerProvider).getResolveSession() + JavaDeclarationCheckerProvider, DynamicTypesSettings()).getResolveSession() lazyModule.initialize(resolveSession.getPackageFragmentProvider()) diff --git a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt index b7a0cf80733..3b3d7b55284 100644 --- a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt +++ b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.kt @@ -113,6 +113,7 @@ private fun generatorForLazyBodyResolve() = parameter(name = "analyzer") parameter() parameter() + parameter() field(init = GivenExpression("analyzer.getModuleDescriptor()"), useAsContext = true) @@ -253,6 +254,7 @@ private fun generatorForLazyResolve() = parameter() parameter() parameter() + parameter() publicField() diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/JsAnalyzerFacade.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/JsAnalyzerFacade.kt index d2d04a7a66b..831742d619c 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/JsAnalyzerFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/JsAnalyzerFacade.kt @@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.jet.analyzer.ModuleInfo import org.jetbrains.jet.analyzer.ModuleContent import org.jetbrains.k2js.resolve.KotlinJsDeclarationCheckerProvider +import org.jetbrains.jet.lang.types.DynamicTypesAllowed public class JsResolverForModule( override val lazyResolveSession: ResolveSession @@ -53,7 +54,8 @@ public object JsAnalyzerFacade : AnalyzerFacade