JS backend: reuse analysisResult from K2JSCompiler in translator
This commit is contained in:
@@ -49,6 +49,7 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys;
|
|||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.Services;
|
import org.jetbrains.kotlin.config.Services;
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
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.Config;
|
||||||
import org.jetbrains.kotlin.js.config.EcmaVersion;
|
import org.jetbrains.kotlin.js.config.EcmaVersion;
|
||||||
import org.jetbrains.kotlin.js.config.LibrarySourcesConfig;
|
import org.jetbrains.kotlin.js.config.LibrarySourcesConfig;
|
||||||
@@ -128,10 +129,15 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
return COMPILATION_ERROR;
|
return COMPILATION_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (analyzeAndReportErrors(messageCollector, sourcesFiles, config)) {
|
AnalyzerWithCompilerReport analyzerWithCompilerReport = analyzeAndReportErrors(messageCollector, sourcesFiles, config);
|
||||||
|
if (analyzerWithCompilerReport.hasErrors()) {
|
||||||
return COMPILATION_ERROR;
|
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;
|
File outputPrefixFile = null;
|
||||||
if (arguments.outputPrefix != null) {
|
if (arguments.outputPrefix != null) {
|
||||||
outputPrefixFile = new File(arguments.outputPrefix);
|
outputPrefixFile = new File(arguments.outputPrefix);
|
||||||
@@ -160,7 +166,7 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
K2JSTranslator translator = new K2JSTranslator(config);
|
K2JSTranslator translator = new K2JSTranslator(config);
|
||||||
try {
|
try {
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
translationResult = translator.translate(sourcesFiles, mainCallParameters);
|
translationResult = translator.translate(sourcesFiles, mainCallParameters, jsAnalysisResult);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@@ -204,7 +210,7 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
CompilerMessageLocation.NO_LOCATION);
|
CompilerMessageLocation.NO_LOCATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean analyzeAndReportErrors(@NotNull MessageCollector messageCollector,
|
private static AnalyzerWithCompilerReport analyzeAndReportErrors(@NotNull MessageCollector messageCollector,
|
||||||
@NotNull final List<JetFile> sources, @NotNull final Config config) {
|
@NotNull final List<JetFile> sources, @NotNull final Config config) {
|
||||||
AnalyzerWithCompilerReport analyzerWithCompilerReport = new AnalyzerWithCompilerReport(messageCollector);
|
AnalyzerWithCompilerReport analyzerWithCompilerReport = new AnalyzerWithCompilerReport(messageCollector);
|
||||||
analyzerWithCompilerReport.analyzeAndReport(sources, new Function0<AnalysisResult>() {
|
analyzerWithCompilerReport.analyzeAndReport(sources, new Function0<AnalysisResult>() {
|
||||||
@@ -213,7 +219,7 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
return TopDownAnalyzerFacadeForJS.analyzeFiles(sources, config);
|
return TopDownAnalyzerFacadeForJS.analyzeFiles(sources, config);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return analyzerWithCompilerReport.hasErrors();
|
return analyzerWithCompilerReport;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -16,46 +16,24 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.js.facade;
|
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.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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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.descriptors.ModuleDescriptor;
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
||||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
||||||
import org.jetbrains.kotlin.js.config.Config;
|
import org.jetbrains.kotlin.js.config.Config;
|
||||||
import org.jetbrains.kotlin.js.facade.exceptions.TranslationException;
|
import org.jetbrains.kotlin.js.facade.exceptions.TranslationException;
|
||||||
import org.jetbrains.kotlin.js.inline.JsInliner;
|
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.context.TranslationContext;
|
||||||
import org.jetbrains.kotlin.js.translate.general.Translation;
|
import org.jetbrains.kotlin.js.translate.general.Translation;
|
||||||
import org.jetbrains.kotlin.psi.JetFile;
|
import org.jetbrains.kotlin.psi.JetFile;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics;
|
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 java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.diagnostics.DiagnosticUtils.hasError;
|
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.
|
* An entry point of translator.
|
||||||
@@ -77,7 +55,19 @@ public final class K2JSTranslator {
|
|||||||
@NotNull List<JetFile> files,
|
@NotNull List<JetFile> files,
|
||||||
@NotNull MainCallParameters mainCallParameters
|
@NotNull MainCallParameters mainCallParameters
|
||||||
) throws TranslationException {
|
) throws TranslationException {
|
||||||
JsAnalysisResult analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(files, config);
|
return translate(files, mainCallParameters, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public TranslationResult translate(
|
||||||
|
@NotNull List<JetFile> files,
|
||||||
|
@NotNull MainCallParameters mainCallParameters,
|
||||||
|
@Nullable JsAnalysisResult analysisResult
|
||||||
|
) throws TranslationException {
|
||||||
|
if (analysisResult == null) {
|
||||||
|
analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(files, config);
|
||||||
|
}
|
||||||
|
|
||||||
BindingTrace bindingTrace = analysisResult.getBindingTrace();
|
BindingTrace bindingTrace = analysisResult.getBindingTrace();
|
||||||
TopDownAnalyzerFacadeForJS.checkForErrors(Config.withJsLibAdded(files, config), bindingTrace.getBindingContext());
|
TopDownAnalyzerFacadeForJS.checkForErrors(Config.withJsLibAdded(files, config), bindingTrace.getBindingContext());
|
||||||
ModuleDescriptor moduleDescriptor = analysisResult.getModuleDescriptor();
|
ModuleDescriptor moduleDescriptor = analysisResult.getModuleDescriptor();
|
||||||
|
|||||||
Reference in New Issue
Block a user