From a47a916437402f1208afe2493ae3059cf610946c Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Thu, 22 Mar 2018 17:08:43 +0300 Subject: [PATCH] Restore hack for avoiding tracking declarations from JS stdlib --- .../js/analyze/TopDownAnalyzerFacadeForJS.kt | 18 +++++++++---- .../jetbrains/kotlin/js/config/JsConfig.java | 25 ++++++++++++++----- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt index d9c343fb523..d8d95b248af 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt @@ -36,6 +36,19 @@ object TopDownAnalyzerFacadeForJS { files: Collection, config: JsConfig ): JsAnalysisResult { + val configuration = config.configuration + + // The hack to avoid adding lookups for builtins: + // save current lookup tracker and temporarily provide dummy version instead. + val lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) + configuration.put(CommonConfigurationKeys.LOOKUP_TRACKER, LookupTracker.DO_NOTHING) + + config.init() + + // The second part of hack to avoid adding lookups for builtins: + // restore previous lookup tracker. + lookupTracker?.let { configuration.put(CommonConfigurationKeys.LOOKUP_TRACKER, it) } + return analyzeFiles(files, config.project, config.configuration, config.moduleDescriptors, config.friendModuleDescriptors) } @@ -50,17 +63,12 @@ object TopDownAnalyzerFacadeForJS { val moduleName = configuration[CommonConfigurationKeys.MODULE_NAME]!! val context = ContextForNewModule(ProjectContext(project), Name.special("<$moduleName>"), JsPlatform.builtIns, null) - // a hack to avoid adding lookups for builtins - val lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) - configuration.put(CommonConfigurationKeys.LOOKUP_TRACKER, LookupTracker.DO_NOTHING) - context.module.setDependencies( listOf(context.module) + moduleDescriptors.map { it.data } + listOf(JsPlatform.builtIns.builtInsModule), friendModuleDescriptors.map { it.data }.toSet() ) - lookupTracker?.let { configuration.put(CommonConfigurationKeys.LOOKUP_TRACKER, it) } val moduleKind = configuration.get(JSConfigurationKeys.MODULE_KIND, ModuleKind.PLAIN) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java index ee8abd5b225..db20061a502 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.js.config; -import com.google.gwt.dev.js.ThrowExceptionOnErrorReporter; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.StandardFileSystems; import com.intellij.openapi.vfs.VirtualFile; @@ -229,9 +228,12 @@ public class JsConfig { @NotNull public List> getModuleDescriptors() { init(); - if (moduleDescriptors != null) return moduleDescriptors; + return moduleDescriptors; + } - moduleDescriptors = new SmartList<>(); + @NotNull + private List> createModuleDescriptors() { + List> moduleDescriptors = new SmartList<>(); List kotlinModuleDescriptors = new ArrayList<>(); for (KotlinJavascriptMetadata metadataEntry : metadata) { JsModuleDescriptor descriptor = createModuleDescriptor(metadataEntry); @@ -274,9 +276,12 @@ public class JsConfig { @NotNull public List> getFriendModuleDescriptors() { init(); - if (friendModuleDescriptors != null) return friendModuleDescriptors; + return friendModuleDescriptors; + } - friendModuleDescriptors = new SmartList<>(); + @NotNull + private List> createFriendModuleDescriptors() { + List> friendModuleDescriptors = new SmartList<>(); for (KotlinJavascriptMetadata metadataEntry : friends) { JsModuleDescriptor descriptor = createModuleDescriptor(metadataEntry); friendModuleDescriptors.add(descriptor); @@ -287,7 +292,7 @@ public class JsConfig { return friendModuleDescriptors; } - private void init() { + public void init() { if (!initialized) { JsConfig.Reporter reporter = new Reporter() { @Override @@ -298,6 +303,14 @@ public class JsConfig { checkLibFilesAndReportErrors(reporter); } + + if (moduleDescriptors == null) { + moduleDescriptors = createModuleDescriptors(); + } + + if (friendModuleDescriptors == null) { + friendModuleDescriptors = createFriendModuleDescriptors(); + } } private final IdentityHashMap> factoryMap = new IdentityHashMap<>();