[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.
This commit is contained in:
Zalim Bashorov
2022-12-05 16:12:35 +01:00
committed by Space Team
parent 9f82c43b1b
commit e34d3d09bc
5 changed files with 24 additions and 15 deletions
@@ -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())
}
@@ -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
@@ -10,8 +10,6 @@ import java.io.File;
public interface SourceMapBuilder extends SourceMapMappingConsumer {
void skipLinesAtBeginning(int count);
void addLink();
File getOutFile();
String build();
@@ -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")
}
@@ -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)