From 227864c6ec4f6d9c4d95459363e1f2c8c73c96d6 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Tue, 4 Oct 2022 11:17:32 +0200 Subject: [PATCH] [JS IR] Add a compiler option for generating name entries in sourcemaps --- .../cli/common/arguments/DefaultValues.kt | 18 +++++++++++ .../common/arguments/K2JSCompilerArguments.kt | 11 +++++++ .../arguments/K2JsArgumentConstants.java | 4 +++ .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 27 +++++++++++++++-- .../kotlin/ir/backend/js/SourceMapsInfo.kt | 3 ++ compiler/testData/cli/js/jsHelp.out | 2 ++ .../arguments/GenerateGradleCompilerTypes.kt | 1 + .../generators/arguments/jsTypesGenerators.kt | 30 +++++++++++++++++++ .../kotlin/js/config/JSConfigurationKeys.java | 3 ++ .../kotlin/js/config/SourceMapNamesPolicy.kt | 30 +++++++++++++++++++ .../kotlin-gradle-plugin-api.txt | 19 ++++++++++++ .../gradle/dsl/JsSourceMapNamesPolicy.kt | 19 ++++++++++++ .../gradle/dsl/KotlinJsCompilerOptions.kt | 9 ++++++ .../kotlin/gradle/dsl/KotlinJsOptions.kt | 13 ++++++++ .../dsl/KotlinJsCompilerOptionsDefault.kt | 5 ++++ 15 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 js/js.frontend/src/org/jetbrains/kotlin/js/config/SourceMapNamesPolicy.kt create mode 100644 libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy.kt diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/DefaultValues.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/DefaultValues.kt index 459242aa6cc..107e48ce028 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/DefaultValues.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/DefaultValues.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.gradle.dsl.JsMainFunctionExecutionMode import org.jetbrains.kotlin.gradle.dsl.JsModuleKind import org.jetbrains.kotlin.gradle.dsl.JsSourceMapEmbedMode +import org.jetbrains.kotlin.gradle.dsl.JsSourceMapNamesPolicy import org.jetbrains.kotlin.gradle.dsl.KotlinVersion as KotlinVersionDsl import org.jetbrains.kotlin.gradle.dsl.JvmTarget as JvmTargetDsl import kotlin.reflect.KType @@ -118,6 +119,23 @@ open class DefaultValues( """.trimIndent() ) + object JsSourceMapNamesPolicies : DefaultValues( + "null", + typeOf(), + typeOf(), + possibleValues = listOf( + K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_NO, + K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_SIMPLE_NAMES, + K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_FQ_NAMES, + ).map { "\"$it\"" }, + fromKotlinOptionConverterProp = """ + this?.let { ${typeOf()}.fromPolicy(it) } + """.trimIndent(), + toKotlinOptionConverterProp = """ + this?.policy + """.trimIndent() + ) + object JsMain : DefaultValues( "${typeOf()}.${JsMainFunctionExecutionMode.CALL.name}", typeOf(), diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt index 4ba6299f4a9..cf6a26d0d93 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.kt @@ -96,6 +96,17 @@ class K2JSCompilerArguments : CommonCompilerArguments() { ) var sourceMapEmbedSources: String? by NullableStringFreezableVar(null) + @GradleOption( + value = DefaultValues.JsSourceMapNamesPolicies::class, + gradleInputType = GradleInputTypes.INPUT + ) + @Argument( + value = "-source-map-names-policy", + valueDescription = "{no|simple-names|fully-qualified-names}", + description = "How to map generated names to original names (IR backend only)" + ) + var sourceMapNamesPolicy: String? by NullableStringFreezableVar(null) + @GradleOption( value = DefaultValues.BooleanTrueDefault::class, gradleInputType = GradleInputTypes.INPUT diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JsArgumentConstants.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JsArgumentConstants.java index bbaae233691..376a33f5a4d 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JsArgumentConstants.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JsArgumentConstants.java @@ -30,6 +30,10 @@ public interface K2JsArgumentConstants { String SOURCE_MAP_SOURCE_CONTENT_NEVER = "never"; String SOURCE_MAP_SOURCE_CONTENT_INLINING = "inlining"; + String SOURCE_MAP_NAMES_POLICY_NO = "no"; + String SOURCE_MAP_NAMES_POLICY_SIMPLE_NAMES = "simple-names"; + String SOURCE_MAP_NAMES_POLICY_FQ_NAMES = "fully-qualified-names"; + String RUNTIME_DIAGNOSTIC_LOG = "log"; String RUNTIME_DIAGNOSTIC_EXCEPTION = "exception"; } diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index f26bd255bdd..0dd9ca60ed8 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -576,9 +576,10 @@ class K2JsIrCompiler : CLICompiler() { else SourceMapSourceEmbedding.INLINING if (sourceMapContentEmbedding == null) { - val message = "Unknown source map source embedding mode: " + sourceMapEmbedContentString + ". Valid values are: " + - StringUtil.join(sourceMapContentEmbeddingMap.keys, ", ") - messageCollector.report(ERROR, message, null) + messageCollector.report( + ERROR, + "Unknown source map source embedding mode: $sourceMapEmbedContentString. Valid values are: ${sourceMapContentEmbeddingMap.keys.joinToString()}" + ) sourceMapContentEmbedding = SourceMapSourceEmbedding.INLINING } configuration.put(JSConfigurationKeys.SOURCE_MAP_EMBED_SOURCES, sourceMapContentEmbedding) @@ -587,6 +588,20 @@ class K2JsIrCompiler : CLICompiler() { messageCollector.report(WARNING, "source-map-embed-sources argument has no effect without source map", null) } + val sourceMapNamesPolicyString = arguments.sourceMapNamesPolicy + var sourceMapNamesPolicy: SourceMapNamesPolicy? = if (sourceMapNamesPolicyString != null) + sourceMapNamesPolicyMap[sourceMapNamesPolicyString] + else + SourceMapNamesPolicy.SIMPLE_NAMES + if (sourceMapNamesPolicy == null) { + messageCollector.report( + ERROR, + "Unknown source map names policy: $sourceMapNamesPolicyString. Valid values are: ${sourceMapNamesPolicyMap.keys.joinToString()}" + ) + sourceMapNamesPolicy = SourceMapNamesPolicy.SIMPLE_NAMES + } + configuration.put(JSConfigurationKeys.SOURCEMAP_NAMES_POLICY, sourceMapNamesPolicy) + configuration.put(JSConfigurationKeys.PRINT_REACHABILITY_INFO, arguments.irDcePrintReachabilityInfo) configuration.put(JSConfigurationKeys.FAKE_OVERRIDE_VALIDATOR, arguments.fakeOverrideValidator) } @@ -615,6 +630,12 @@ class K2JsIrCompiler : CLICompiler() { K2JsArgumentConstants.SOURCE_MAP_SOURCE_CONTENT_INLINING to SourceMapSourceEmbedding.INLINING ) + private val sourceMapNamesPolicyMap = mapOf( + K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_NO to SourceMapNamesPolicy.NO, + K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_SIMPLE_NAMES to SourceMapNamesPolicy.SIMPLE_NAMES, + K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_FQ_NAMES to SourceMapNamesPolicy.FULLY_QUALIFIED_NAMES + ) + @JvmStatic fun main(args: Array) { doMain(K2JsIrCompiler(), args) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/SourceMapsInfo.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/SourceMapsInfo.kt index ccb623cf797..ae38a2d77e3 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/SourceMapsInfo.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/SourceMapsInfo.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.js.config.JSConfigurationKeys +import org.jetbrains.kotlin.js.config.SourceMapNamesPolicy import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding import java.io.File @@ -15,6 +16,7 @@ data class SourceMapsInfo( val sourceRoots: List, val outputDir: File?, val sourceMapContentEmbedding: SourceMapSourceEmbedding, + val namesPolicy: SourceMapNamesPolicy, ) { companion object { fun from(configuration: CompilerConfiguration): SourceMapsInfo? = @@ -24,6 +26,7 @@ data class SourceMapsInfo( configuration.get(JSConfigurationKeys.SOURCE_MAP_SOURCE_ROOTS, emptyList()), configuration.get(JSConfigurationKeys.OUTPUT_DIR), configuration.get(JSConfigurationKeys.SOURCE_MAP_EMBED_SOURCES, SourceMapSourceEmbedding.INLINING), + configuration.get(JSConfigurationKeys.SOURCEMAP_NAMES_POLICY, SourceMapNamesPolicy.SIMPLE_NAMES) ) } else { null diff --git a/compiler/testData/cli/js/jsHelp.out b/compiler/testData/cli/js/jsHelp.out index 0343885b6af..9f4925ea95b 100644 --- a/compiler/testData/cli/js/jsHelp.out +++ b/compiler/testData/cli/js/jsHelp.out @@ -13,6 +13,8 @@ where possible options include: -source-map-base-dirs Base directories for calculating relative paths to source files in source map -source-map-embed-sources {always|never|inlining} Embed source files into source map + -source-map-names-policy {no|simple-names|fully-qualified-names} + How to map generated names to original names (IR backend only) -source-map-prefix Add the specified prefix to paths in the source map -target { v5 } Generate JS files for specific ECMA version -Werror Report an error if there are any warnings diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleCompilerTypes.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleCompilerTypes.kt index 0468800966e..daf7f0076f6 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleCompilerTypes.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleCompilerTypes.kt @@ -22,6 +22,7 @@ fun generateGradleCompilerTypes(withPrinterToFile: (targetFile: File, Printer.() generateJsMainFunctionExecutionMode(destDir, withPrinterToFile) generateJsModuleKind(destDir, withPrinterToFile) generateJsSourceMapEmbedMode(destDir, withPrinterToFile) + generateJsSourceMapNamesPolicy(destDir, withPrinterToFile) generateJsDiagnosticMode(destDir, withPrinterToFile) } diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/jsTypesGenerators.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/jsTypesGenerators.kt index 972e06aacc0..2213c5e38df 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/jsTypesGenerators.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/jsTypesGenerators.kt @@ -101,6 +101,36 @@ internal fun generateJsSourceMapEmbedMode( } } +internal fun generateJsSourceMapNamesPolicy( + apiDir: File, + filePrinter: (targetFile: File, Printer.() -> Unit) -> Unit +) { + val jsSourceMapNamesPolicyFqName = FqName("org.jetbrains.kotlin.gradle.dsl.JsSourceMapNamesPolicy") + filePrinter(fileFromFqName(apiDir, jsSourceMapNamesPolicyFqName)) { + generateDeclaration("enum class", jsSourceMapNamesPolicyFqName, afterType = "(val policy: String)") { + val modes = hashMapOf( + K2JsArgumentConstants::SOURCE_MAP_NAMES_POLICY_NO.name to K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_NO, + K2JsArgumentConstants::SOURCE_MAP_NAMES_POLICY_SIMPLE_NAMES.name to K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_SIMPLE_NAMES, + K2JsArgumentConstants::SOURCE_MAP_NAMES_POLICY_FQ_NAMES.name to K2JsArgumentConstants.SOURCE_MAP_NAMES_POLICY_FQ_NAMES, + ) + + for ((key, value) in modes) { + println("$key(\"$value\"),") + } + println(";") + + println() + println("companion object {") + withIndent { + println("fun fromPolicy(policy: String): JsSourceMapNamesPolicy =") + println(" JsSourceMapNamesPolicy.values().firstOrNull { it.policy == policy }") + println(" ?: throw IllegalArgumentException(\"Unknown JS source map names policy: ${'$'}policy\")") + } + println("}") + } + } +} + internal fun generateJsDiagnosticMode( apiDir: File, filePrinter: (targetFile: File, Printer.() -> Unit) -> Unit diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java index 8364d399ff6..8434f47e2b5 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JSConfigurationKeys.java @@ -38,6 +38,9 @@ public class JSConfigurationKeys { public static final CompilerConfigurationKey SOURCE_MAP_EMBED_SOURCES = CompilerConfigurationKey.create("embed source files into source map"); + public static final CompilerConfigurationKey SOURCEMAP_NAMES_POLICY = CompilerConfigurationKey.create( + "a policy to generate a mapping from generated identifiers to their corresponding original names"); + public static final CompilerConfigurationKey META_INFO = CompilerConfigurationKey.create("generate .meta.js and .kjsm files"); diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/SourceMapNamesPolicy.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/config/SourceMapNamesPolicy.kt new file mode 100644 index 00000000000..1118bce4cce --- /dev/null +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/SourceMapNamesPolicy.kt @@ -0,0 +1,30 @@ +/* + * 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.config + +/** + * A policy to generate name mappings in sourcemaps. + * + * Sourcemaps can map names from the generated JavaScript code to the names of the corresponding entities in the Kotlin source code. + */ +enum class SourceMapNamesPolicy { + /** + * Don't generate name mappings + */ + NO, + + /** + * Generate name mappings. For functions and methods, map to their simple names instead of fully-qualified names. + * + * This is the default. + */ + SIMPLE_NAMES, + + /** + * Generate name mappings. For functions and methods, map to their fully-qualified names. + */ + FULLY_QUALIFIED_NAMES, +} \ No newline at end of file diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt index fdea00704c2..7b170500c6f 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-gradle-plugin-api.txt @@ -64,6 +64,20 @@ public final class org/jetbrains/kotlin/gradle/dsl/JsSourceMapEmbedMode$Companio public final fun fromMode (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapEmbedMode; } +public final class org/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy : java/lang/Enum { + public static final field Companion Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy$Companion; + public static final field SOURCE_MAP_NAMES_POLICY_FQ_NAMES Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy; + public static final field SOURCE_MAP_NAMES_POLICY_NO Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy; + public static final field SOURCE_MAP_NAMES_POLICY_SIMPLE_NAMES Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy; + public final fun getPolicy ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy; + public static fun values ()[Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy; +} + +public final class org/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy$Companion { + public final fun fromPolicy (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy; +} + public final class org/jetbrains/kotlin/gradle/dsl/JvmTarget : java/lang/Enum { public static final field Companion Lorg/jetbrains/kotlin/gradle/dsl/JvmTarget$Companion; public static final field JVM_10 Lorg/jetbrains/kotlin/gradle/dsl/JvmTarget; @@ -233,6 +247,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinJsCompiler public abstract fun getOutputFile ()Lorg/gradle/api/provider/Property; public abstract fun getSourceMap ()Lorg/gradle/api/provider/Property; public abstract fun getSourceMapEmbedSources ()Lorg/gradle/api/provider/Property; + public abstract fun getSourceMapNamesPolicy ()Lorg/gradle/api/provider/Property; public abstract fun getSourceMapPrefix ()Lorg/gradle/api/provider/Property; public abstract fun getTarget ()Lorg/gradle/api/provider/Property; public abstract fun getTypedArrays ()Lorg/gradle/api/provider/Property; @@ -277,6 +292,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions public abstract fun getOutputFile ()Ljava/lang/String; public abstract fun getSourceMap ()Z public abstract fun getSourceMapEmbedSources ()Ljava/lang/String; + public abstract fun getSourceMapNamesPolicy ()Ljava/lang/String; public abstract fun getSourceMapPrefix ()Ljava/lang/String; public abstract fun getTarget ()Ljava/lang/String; public abstract fun getTypedArrays ()Z @@ -289,6 +305,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions public abstract fun setOutputFile (Ljava/lang/String;)V public abstract fun setSourceMap (Z)V public abstract fun setSourceMapEmbedSources (Ljava/lang/String;)V + public abstract fun setSourceMapNamesPolicy (Ljava/lang/String;)V public abstract fun setSourceMapPrefix (Ljava/lang/String;)V public abstract fun setTarget (Ljava/lang/String;)V public abstract fun setTypedArrays (Z)V @@ -308,6 +325,7 @@ public final class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions$DefaultImpls public static fun getOutputFile (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Ljava/lang/String; public static fun getSourceMap (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Z public static fun getSourceMapEmbedSources (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Ljava/lang/String; + public static fun getSourceMapNamesPolicy (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Ljava/lang/String; public static fun getSourceMapPrefix (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Ljava/lang/String; public static fun getSuppressWarnings (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Z public static fun getTarget (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Ljava/lang/String; @@ -327,6 +345,7 @@ public final class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions$DefaultImpls public static fun setOutputFile (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Ljava/lang/String;)V public static fun setSourceMap (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V public static fun setSourceMapEmbedSources (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Ljava/lang/String;)V + public static fun setSourceMapNamesPolicy (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Ljava/lang/String;)V public static fun setSourceMapPrefix (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Ljava/lang/String;)V public static fun setSuppressWarnings (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V public static fun setTarget (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Ljava/lang/String;)V diff --git a/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy.kt b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy.kt new file mode 100644 index 00000000000..0b8241669cb --- /dev/null +++ b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapNamesPolicy.kt @@ -0,0 +1,19 @@ +// DO NOT EDIT MANUALLY! +// Generated by org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +// To regenerate run 'generateGradleOptions' task +@file:Suppress("RemoveRedundantQualifierName", "Deprecation", "DuplicatedCode") + +package org.jetbrains.kotlin.gradle.dsl + +enum class JsSourceMapNamesPolicy(val policy: String) { + SOURCE_MAP_NAMES_POLICY_FQ_NAMES("fully-qualified-names"), + SOURCE_MAP_NAMES_POLICY_SIMPLE_NAMES("simple-names"), + SOURCE_MAP_NAMES_POLICY_NO("no"), + ; + + companion object { + fun fromPolicy(policy: String): JsSourceMapNamesPolicy = + JsSourceMapNamesPolicy.values().firstOrNull { it.policy == policy } + ?: throw IllegalArgumentException("Unknown JS source map names policy: $policy") + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptions.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptions.kt index 3979e89f3d3..ab69ec703d5 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptions.kt @@ -76,6 +76,15 @@ interface KotlinJsCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommon @get:org.gradle.api.tasks.Input val sourceMapEmbedSources: org.gradle.api.provider.Property + /** + * How to map generated names to original names (IR backend only) + * Possible values: "no", "simple-names", "fully-qualified-names" + * Default value: null + */ + @get:org.gradle.api.tasks.Optional + @get:org.gradle.api.tasks.Input + val sourceMapNamesPolicy: org.gradle.api.provider.Property + /** * Add the specified prefix to paths in the source map * Default value: null diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt index 652138798c8..3c39d2ec9ff 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions.kt @@ -97,6 +97,19 @@ interface KotlinJsOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions get() = options.sourceMapEmbedSources.orNull.sourceMapEmbedSourcesKotlinOption set(value) = options.sourceMapEmbedSources.set(value.sourceMapEmbedSourcesCompilerOption) + private val kotlin.String?.sourceMapNamesPolicyCompilerOption get() = this?.let { org.jetbrains.kotlin.gradle.dsl.JsSourceMapNamesPolicy.fromPolicy(it) } + + private val org.jetbrains.kotlin.gradle.dsl.JsSourceMapNamesPolicy?.sourceMapNamesPolicyKotlinOption get() = this?.policy + + /** + * How to map generated names to original names (IR backend only) + * Possible values: "no", "simple-names", "fully-qualified-names" + * Default value: null + */ + var sourceMapNamesPolicy: kotlin.String? + get() = options.sourceMapNamesPolicy.orNull.sourceMapNamesPolicyKotlinOption + set(value) = options.sourceMapNamesPolicy.set(value.sourceMapNamesPolicyCompilerOption) + /** * Add the specified prefix to paths in the source map * Default value: null diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptionsDefault.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptionsDefault.kt index 507367635f3..010dfd69353 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptionsDefault.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJsCompilerOptionsDefault.kt @@ -37,6 +37,9 @@ internal abstract class KotlinJsCompilerOptionsDefault @javax.inject.Inject cons override val sourceMapEmbedSources: org.gradle.api.provider.Property = objectFactory.property(org.jetbrains.kotlin.gradle.dsl.JsSourceMapEmbedMode::class.java) + override val sourceMapNamesPolicy: org.gradle.api.provider.Property = + objectFactory.property(org.jetbrains.kotlin.gradle.dsl.JsSourceMapNamesPolicy::class.java) + override val sourceMapPrefix: org.gradle.api.provider.Property = objectFactory.property(kotlin.String::class.java) @@ -57,6 +60,7 @@ internal abstract class KotlinJsCompilerOptionsDefault @javax.inject.Inject cons args.outputFile = outputFile.orNull args.sourceMap = sourceMap.get() args.sourceMapEmbedSources = sourceMapEmbedSources.orNull?.mode + args.sourceMapNamesPolicy = sourceMapNamesPolicy.orNull?.policy args.sourceMapPrefix = sourceMapPrefix.orNull args.target = target.get() args.typedArrays = typedArrays.get() @@ -73,6 +77,7 @@ internal abstract class KotlinJsCompilerOptionsDefault @javax.inject.Inject cons args.outputFile = null args.sourceMap = false args.sourceMapEmbedSources = null + args.sourceMapNamesPolicy = null args.sourceMapPrefix = null args.target = "v5" args.typedArrays = true