Introduce services to pass data between IC and JS compiler

This commit is contained in:
Alexey Tsvetkov
2017-07-28 16:56:24 +03:00
parent 8ffd141d17
commit f5e77c740d
9 changed files with 182 additions and 87 deletions
@@ -56,6 +56,10 @@ import org.jetbrains.kotlin.js.facade.K2JSTranslator;
import org.jetbrains.kotlin.js.facade.MainCallParameters;
import org.jetbrains.kotlin.js.facade.TranslationResult;
import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver;
import org.jetbrains.kotlin.js.facade.TranslationUnit;
import org.jetbrains.kotlin.js.facade.exceptions.TranslationException;
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider;
import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer;
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.serialization.js.ModuleKind;
@@ -99,6 +103,30 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
return new K2JSCompilerArguments();
}
@NotNull
protected TranslationResult translate(
@NotNull JsConfig.Reporter reporter,
@NotNull List<KtFile> allKotlinFiles,
@NotNull JsAnalysisResult jsAnalysisResult,
@NotNull MainCallParameters mainCallParameters,
@NotNull JsConfig config
) throws TranslationException {
K2JSTranslator translator = new K2JSTranslator(config);
IncrementalDataProvider incrementalDataProvider = config.getConfiguration().get(JSConfigurationKeys.INCREMENTAL_DATA_PROVIDER);
if (incrementalDataProvider != null) {
List<TranslationUnit> translationUnits = new ArrayList<>();
for (KtFile ktFile : allKotlinFiles) {
translationUnits.add(new TranslationUnit.SourceFile(ktFile));
}
for (byte[] binaryTree : incrementalDataProvider.getBinaryTrees()) {
translationUnits.add(new TranslationUnit.BinaryAst(binaryTree));
}
return translator.translateUnits(reporter, translationUnits, mainCallParameters, jsAnalysisResult);
}
return translator.translate(reporter, allKotlinFiles, mainCallParameters, jsAnalysisResult);
}
@NotNull
@Override
protected ExitCode doExecute(
@@ -205,10 +233,9 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
MainCallParameters mainCallParameters = createMainCallParameters(arguments.getMain());
TranslationResult translationResult;
K2JSTranslator translator = new K2JSTranslator(config);
try {
//noinspection unchecked
translationResult = translator.translate(reporter, sourcesFiles, mainCallParameters, jsAnalysisResult);
translationResult = translate(reporter, sourcesFiles, jsAnalysisResult, mainCallParameters, config);
}
catch (Exception e) {
throw ExceptionUtilsKt.rethrow(e);
@@ -344,6 +371,16 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
}
configuration.put(JSConfigurationKeys.MODULE_KIND, moduleKind);
IncrementalDataProvider incrementalDataProvider = services.get(IncrementalDataProvider.class);
if (incrementalDataProvider != null) {
configuration.put(JSConfigurationKeys.INCREMENTAL_DATA_PROVIDER, incrementalDataProvider);
}
IncrementalResultsConsumer incrementalResultsConsumer = services.get(IncrementalResultsConsumer.class);
if (incrementalResultsConsumer != null) {
configuration.put(JSConfigurationKeys.INCREMENTAL_RESULTS_CONSUMER, incrementalResultsConsumer);
}
String sourceMapEmbedContentString = arguments.getSourceMapEmbedSources();
SourceMapSourceEmbedding sourceMapContentEmbedding = sourceMapEmbedContentString != null ?
sourceMapContentEmbeddingMap.get(sourceMapEmbedContentString) :