From e34d3d09bc4901644d93c7378927fd3ff08a878a Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 5 Dec 2022 16:12:35 +0100 Subject: [PATCH] [Sourcemap] Extract addLink from SourceMap3Builder as a addSourceMappingURL The general goal is remove dependency on TextOutput and make it simpler to use for wasm backend. --- .../kotlin/js/dce/DeadCodeElimination.kt | 10 ++++++---- .../kotlin/js/sourceMap/SourceMap3Builder.kt | 7 ------- .../kotlin/js/sourceMap/SourceMapBuilder.java | 2 -- .../org/jetbrains/kotlin/js/sourceMap/utils.kt | 15 +++++++++++++++ .../kotlin/js/facade/TranslationResult.kt | 5 +++-- 5 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/utils.kt diff --git a/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt b/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt index 984fbc3354f..536f517ec4c 100644 --- a/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt +++ b/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapParser import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapSuccess import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder +import org.jetbrains.kotlin.js.sourceMap.addSourceMappingURL import org.jetbrains.kotlin.js.util.TextOutputImpl import java.io.File import java.io.InputStreamReader @@ -115,18 +116,19 @@ class DeadCodeElimination( for ((file, block) in inputFiles.zip(blocks)) { val sourceMapFile = File(file.outputPath + ".map") val textOutput = TextOutputImpl() - val sourceMapBuilder = SourceMap3Builder(File(file.outputPath), textOutput, "") + val outputFile = File(file.outputPath) + val sourceMapBuilder = SourceMap3Builder(outputFile, textOutput, "") val inputFile = File(file.resource.name) val sourceBaseDir = if (inputFile.exists()) inputFile.parentFile else File(".") - val sourcePathResolver = SourceFilePathResolver(emptyList(), File(file.outputPath).parentFile) + val sourcePathResolver = SourceFilePathResolver(emptyList(), outputFile.parentFile) val consumer = SourceMapBuilderConsumer(sourceBaseDir, sourceMapBuilder, sourcePathResolver, true, true) block.accept(JsToStringGenerationVisitor(textOutput, consumer)) val sourceMapContent = sourceMapBuilder.build() - sourceMapBuilder.addLink() + textOutput.addSourceMappingURL(outputFile) - with(File(file.outputPath)) { + with(outputFile) { parentFile.mkdirs() writeText(textOutput.toString()) } diff --git a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt index 34a832fd595..d7984f35ce5 100644 --- a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt +++ b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.js.sourceMap import gnu.trove.TObjectIntHashMap import org.jetbrains.kotlin.js.parser.sourcemaps.* -import org.jetbrains.kotlin.js.util.TextOutput import java.io.File import java.io.IOException import java.io.Reader @@ -192,12 +191,6 @@ class SourceMap3Builder( } } - override fun addLink() { - textOutput.print("\n//# sourceMappingURL=") - textOutput.print(generatedFile!!.name) - textOutput.print(".map\n") - } - private object Base64VLQ { // A Base64 VLQ digit can represent 5 bits, so it is base-32. private const val VLQ_BASE_SHIFT = 5 diff --git a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMapBuilder.java b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMapBuilder.java index f0a7ea73ef9..e48c02296f9 100644 --- a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMapBuilder.java +++ b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMapBuilder.java @@ -10,8 +10,6 @@ import java.io.File; public interface SourceMapBuilder extends SourceMapMappingConsumer { void skipLinesAtBeginning(int count); - void addLink(); - File getOutFile(); String build(); diff --git a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/utils.kt b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/utils.kt new file mode 100644 index 00000000000..61fe319e1b5 --- /dev/null +++ b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/utils.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.js.sourceMap + +import org.jetbrains.kotlin.js.util.TextOutput +import java.io.File + +fun TextOutput.addSourceMappingURL(outputJsFile: File) { + print("\n//# sourceMappingURL=") + print(outputJsFile.name) + print(".map\n") +} diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt b/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt index 9dbd8a7c1d6..39c2a2d65ff 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilderConsumer +import org.jetbrains.kotlin.js.sourceMap.addSourceMappingURL import org.jetbrains.kotlin.js.util.TextOutput import org.jetbrains.kotlin.js.util.TextOutputImpl import org.jetbrains.kotlin.name.FqName @@ -134,7 +135,7 @@ abstract class TranslationResult protected constructor(val diagnostics: Diagnost getCode(output, sourceMapBuilderConsumer) if (sourceMapBuilderConsumer != null) { - sourceMapBuilder.addLink() + output.addSourceMappingURL(outputFile) } val code = output.toString() @@ -150,7 +151,7 @@ abstract class TranslationResult protected constructor(val diagnostics: Diagnost sourceMapBuilder.skipLinesAtBeginning(StringUtil.getLineBreakCount(prefix)) val sourceMapFile = SimpleOutputFile(sourceFiles, sourceMapBuilder.outFile.name, sourceMapBuilder.build()) outputFiles.add(sourceMapFile) - sourceMapBuilder.addLink() + output.addSourceMappingURL(outputFile) } return SimpleOutputFileCollection(outputFiles)