Introduce services to pass data between IC and JS compiler
This commit is contained in:
@@ -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) :
|
||||
|
||||
Reference in New Issue
Block a user