Allow to use dynamic types for JS projects in IDEA.

This commit is contained in:
Zalim Bashorov
2014-12-03 14:42:26 +03:00
parent f08c9d9815
commit 65ef7525ce
11 changed files with 64 additions and 21 deletions
@@ -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<JsResolverForModule, PlatformAna
project, globalContext.storageManager, syntheticFiles, moduleContentScope
)
val injector = InjectorForLazyResolve(project, globalContext, moduleDescriptor, declarationProviderFactory, BindingTraceContext(), KotlinJsDeclarationCheckerProvider)
val injector = InjectorForLazyResolve(project, globalContext, moduleDescriptor, declarationProviderFactory, BindingTraceContext(),
KotlinJsDeclarationCheckerProvider, DynamicTypesAllowed())
val resolveSession = injector.getResolveSession()!!
moduleDescriptor.initialize(resolveSession.getPackageFragmentProvider())
return JsResolverForModule(resolveSession)
@@ -239,12 +239,14 @@ private object KotlinResolveDataProvider {
val trace = DelegatingBindingTrace(resolveSession.getBindingContext(), "Trace for resolution of " + analyzableElement)
val targetPlatform = TargetPlatformDetector.getPlatform(analyzableElement.getContainingJetFile())
val lazyTopDownAnalyzer = InjectorForLazyBodyResolve(
project,
SimpleGlobalContext(resolveSession.getStorageManager(), resolveSession.getExceptionTracker()),
resolveSession,
trace,
TargetPlatformDetector.getPlatform(analyzableElement.getContainingJetFile()).getAdditionalCheckerProvider()
targetPlatform.getAdditionalCheckerProvider(),
targetPlatform.getDynamicTypesSettings()
).getLazyTopDownAnalyzer()!!
lazyTopDownAnalyzer.analyzeDeclarations(
@@ -49,8 +49,8 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
@@ -58,6 +58,7 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProv
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.DynamicTypesSettings;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.stubindex.JetFullClassNameIndex;
@@ -259,7 +260,8 @@ public class JetSourceNavigationHelper {
moduleDescriptor,
providerFactory,
new BindingTraceContext(),
AdditionalCheckerProvider.Empty.INSTANCE$).getResolveSession();
AdditionalCheckerProvider.Empty.INSTANCE$,
new DynamicTypesSettings()).getResolveSession();
moduleDescriptor.initialize(resolveSession.getPackageFragmentProvider());
return resolveSession;
@@ -19,12 +19,17 @@ package org.jetbrains.jet.plugin.project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
import org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider;
import org.jetbrains.jet.lang.types.DynamicTypesAllowed;
import org.jetbrains.jet.lang.types.DynamicTypesSettings;
import org.jetbrains.k2js.resolve.KotlinJsDeclarationCheckerProvider;
public interface TargetPlatform {
@NotNull
AdditionalCheckerProvider getAdditionalCheckerProvider();
TargetPlatform JVM = new TargetPlatformImpl("JVM", JavaDeclarationCheckerProvider.INSTANCE$);
TargetPlatform JS = new TargetPlatformImpl("JS", KotlinJsDeclarationCheckerProvider.INSTANCE$);
@NotNull
DynamicTypesSettings getDynamicTypesSettings();
TargetPlatform JVM = new TargetPlatformImpl("JVM", JavaDeclarationCheckerProvider.INSTANCE$, new DynamicTypesSettings());
TargetPlatform JS = new TargetPlatformImpl("JS", KotlinJsDeclarationCheckerProvider.INSTANCE$, new DynamicTypesAllowed());
}
@@ -18,18 +18,21 @@ package org.jetbrains.jet.plugin.project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
import org.jetbrains.jet.lang.types.DynamicTypesSettings;
public class TargetPlatformImpl implements TargetPlatform {
@NotNull private final String platformName;
@NotNull private final AdditionalCheckerProvider additionalCheckerProvider;
@NotNull private final DynamicTypesSettings dynamicTypesSettings;
public TargetPlatformImpl(@NotNull String platformName) {
this(platformName, AdditionalCheckerProvider.Empty.INSTANCE$);
}
public TargetPlatformImpl(@NotNull String platformName, @NotNull AdditionalCheckerProvider additionalCheckerProvider) {
this.additionalCheckerProvider = additionalCheckerProvider;
public TargetPlatformImpl(
@NotNull String platformName,
@NotNull AdditionalCheckerProvider additionalCheckerProvider,
@NotNull DynamicTypesSettings dynamicTypesSettings
) {
this.platformName = platformName;
this.additionalCheckerProvider = additionalCheckerProvider;
this.dynamicTypesSettings = dynamicTypesSettings;
}
@NotNull
@@ -38,6 +41,12 @@ public class TargetPlatformImpl implements TargetPlatform {
return additionalCheckerProvider;
}
@NotNull
@Override
public DynamicTypesSettings getDynamicTypesSettings() {
return dynamicTypesSettings;
}
@Override
public String toString() {
return platformName;