diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java index 9a11a20d811..5af4668fc31 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java @@ -49,6 +49,7 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.config.Services; import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS; +import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult; import org.jetbrains.kotlin.js.config.Config; import org.jetbrains.kotlin.js.config.EcmaVersion; import org.jetbrains.kotlin.js.config.LibrarySourcesConfig; @@ -128,10 +129,15 @@ public class K2JSCompiler extends CLICompiler { return COMPILATION_ERROR; } - if (analyzeAndReportErrors(messageCollector, sourcesFiles, config)) { + AnalyzerWithCompilerReport analyzerWithCompilerReport = analyzeAndReportErrors(messageCollector, sourcesFiles, config); + if (analyzerWithCompilerReport.hasErrors()) { return COMPILATION_ERROR; } + AnalysisResult analysisResult = analyzerWithCompilerReport.getAnalysisResult(); + assert analysisResult instanceof JsAnalysisResult : "analysisResult should be instance of JsAnalysisResult, but " + analysisResult; + JsAnalysisResult jsAnalysisResult = (JsAnalysisResult) analysisResult; + File outputPrefixFile = null; if (arguments.outputPrefix != null) { outputPrefixFile = new File(arguments.outputPrefix); @@ -160,7 +166,7 @@ public class K2JSCompiler extends CLICompiler { K2JSTranslator translator = new K2JSTranslator(config); try { //noinspection unchecked - translationResult = translator.translate(sourcesFiles, mainCallParameters); + translationResult = translator.translate(sourcesFiles, mainCallParameters, jsAnalysisResult); } catch (Exception e) { throw new RuntimeException(e); } @@ -204,7 +210,7 @@ public class K2JSCompiler extends CLICompiler { CompilerMessageLocation.NO_LOCATION); } - private static boolean analyzeAndReportErrors(@NotNull MessageCollector messageCollector, + private static AnalyzerWithCompilerReport analyzeAndReportErrors(@NotNull MessageCollector messageCollector, @NotNull final List sources, @NotNull final Config config) { AnalyzerWithCompilerReport analyzerWithCompilerReport = new AnalyzerWithCompilerReport(messageCollector); analyzerWithCompilerReport.analyzeAndReport(sources, new Function0() { @@ -213,7 +219,7 @@ public class K2JSCompiler extends CLICompiler { return TopDownAnalyzerFacadeForJS.analyzeFiles(sources, config); } }); - return analyzerWithCompilerReport.hasErrors(); + return analyzerWithCompilerReport; } @NotNull diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java index f3d0fdebbc2..31070a8d462 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java @@ -16,46 +16,24 @@ package org.jetbrains.kotlin.js.facade; -import com.google.dart.compiler.backend.js.ast.JsNode; import com.google.dart.compiler.backend.js.ast.JsProgram; -import com.google.dart.compiler.util.TextOutputImpl; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VfsUtilCore; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.Consumer; -import com.intellij.util.Function; -import com.intellij.util.SmartList; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.backend.common.output.OutputFileCollection; -import org.jetbrains.kotlin.backend.common.output.SimpleOutputFile; -import org.jetbrains.kotlin.backend.common.output.SimpleOutputFileCollection; import org.jetbrains.kotlin.descriptors.ModuleDescriptor; import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS; import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult; import org.jetbrains.kotlin.js.config.Config; import org.jetbrains.kotlin.js.facade.exceptions.TranslationException; import org.jetbrains.kotlin.js.inline.JsInliner; -import org.jetbrains.kotlin.js.sourceMap.JsSourceGenerationVisitor; -import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder; -import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilder; import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.js.translate.general.Translation; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.resolve.BindingTrace; import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics; -import org.jetbrains.kotlin.utils.fileUtils.FileUtilsPackage; -import java.io.File; -import java.io.IOException; -import java.util.Collections; import java.util.List; import static org.jetbrains.kotlin.diagnostics.DiagnosticUtils.hasError; -import static org.jetbrains.kotlin.js.facade.FacadeUtils.parseString; -import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory; /** * An entry point of translator. @@ -77,7 +55,19 @@ public final class K2JSTranslator { @NotNull List files, @NotNull MainCallParameters mainCallParameters ) throws TranslationException { - JsAnalysisResult analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(files, config); + return translate(files, mainCallParameters, null); + } + + @NotNull + public TranslationResult translate( + @NotNull List files, + @NotNull MainCallParameters mainCallParameters, + @Nullable JsAnalysisResult analysisResult + ) throws TranslationException { + if (analysisResult == null) { + analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(files, config); + } + BindingTrace bindingTrace = analysisResult.getBindingTrace(); TopDownAnalyzerFacadeForJS.checkForErrors(Config.withJsLibAdded(files, config), bindingTrace.getBindingContext()); ModuleDescriptor moduleDescriptor = analysisResult.getModuleDescriptor();