diff --git a/ant/src/org/jetbrains/kotlin/ant/Kotlin2JsTask.kt b/ant/src/org/jetbrains/kotlin/ant/Kotlin2JsTask.kt index 942e7493806..a97d60f6cfc 100644 --- a/ant/src/org/jetbrains/kotlin/ant/Kotlin2JsTask.kt +++ b/ant/src/org/jetbrains/kotlin/ant/Kotlin2JsTask.kt @@ -26,7 +26,7 @@ public class Kotlin2JsTask : KotlinCompilerBaseTask() { public var outputPrefix: File? = null public var outputPostfix: File? = null public var sourceMap: Boolean = false - public var metaInfo: File? = null + public var metaInfo: Boolean = false /** * {@link K2JsArgumentConstants.CALL} (default) if need generate a main function call (main function will be auto detected) @@ -72,10 +72,6 @@ public class Kotlin2JsTask : KotlinCompilerBaseTask() { if (noStdlib) args.add("-no-stdlib") if (sourceMap) args.add("-source-map") - - metaInfo?.let { - args.add("-meta-info") - args.add(it.canonicalPath) - } + if (metaInfo) args.add("-meta-info") } } diff --git a/build.xml b/build.xml index b5bebd99efa..eefafafe456 100644 --- a/build.xml +++ b/build.xml @@ -259,7 +259,6 @@ - @@ -287,7 +286,6 @@ - @@ -300,13 +298,13 @@ - + - + diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.java index a168e6b5f2b..d89d5e8968d 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JSCompilerArguments.java @@ -38,9 +38,8 @@ public class K2JSCompilerArguments extends CommonCompilerArguments { @Argument(value = "source-map", description = "Generate source map") public boolean sourceMap; - @Argument(value = "meta-info", description = "Generate meta information and save to the given file") - @ValueDescription("") - public String metaInfo; + @Argument(value = "meta-info", description = "Generate metadata") + public boolean metaInfo; @Argument(value = "target", description = "Generate JS files for specific ECMA version (only ECMA 5 is supported)") @ValueDescription("") diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java index b9598f565a0..e46ad6a7fce 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java @@ -244,7 +244,7 @@ public class K2JSCompiler extends CLICompiler { .ecmaVersion(ecmaVersion) .sourceMap(arguments.sourceMap) .inlineEnabled(inlineEnabled) - .metaFileOutputPath(arguments.metaInfo) + .metaInfo(arguments.metaInfo) .build(); } diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt index 2049bec8145..0c145c13999 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/KotlinJavascriptMetadataUtils.kt @@ -39,6 +39,8 @@ public object KotlinJavascriptMetadataUtils { private val METADATA_PATTERN = "(?m)\\w+\\.$KOTLIN_JAVASCRIPT_METHOD_NAME\\((\\d+),\\s*(['\"])([^'\"]*)\\2,\\s*(['\"])([^'\"]*)\\4\\)".toRegex() private val ABI_VERSION = 2 + public fun replaceSuffix(filePath: String): String = filePath.substringBeforeLast(JS_EXT) + META_JS_SUFFIX + platformStatic public fun hasMetadata(text: String): Boolean = METADATA_PATTERN.matcher(text).find() diff --git a/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java b/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java index ea95389879c..887f515087a 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java +++ b/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java @@ -72,11 +72,10 @@ public class KotlinCompilerRunner { @NotNull OutputItemsCollector collector, @NotNull Collection sourceFiles, @NotNull List libraryFiles, - @NotNull File outputFile, - @Nullable File metaInfoFile + @NotNull File outputFile ) { K2JSCompilerArguments arguments = mergeBeans(commonArguments, k2jsArguments); - setupK2JsArguments(outputFile, metaInfoFile, sourceFiles, libraryFiles, arguments); + setupK2JsArguments(outputFile, sourceFiles, libraryFiles, arguments); runCompiler(K2JS_COMPILER, arguments, compilerSettings.getAdditionalArguments(), messageCollector, collector, environment); } @@ -191,7 +190,6 @@ public class KotlinCompilerRunner { private static void setupK2JsArguments( @NotNull File outputFile, - @Nullable File metaInfoFile, @NotNull Collection sourceFiles, @NotNull List libraryFiles, @NotNull K2JSCompilerArguments settings @@ -204,11 +202,7 @@ public class KotlinCompilerRunner { } }); settings.outputFile = outputFile.getPath(); - - if (metaInfoFile != null) { - settings.metaInfo = metaInfoFile.getPath(); - } - + settings.metaInfo = true; settings.libraryFiles = ArrayUtil.toStringArray(libraryFiles); } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 8b294e5f8ca..cb702e2f7c1 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -400,12 +400,11 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR val moduleName = representativeTarget.getModule().getName() val outputFile = JpsJsModuleUtils.getOutputFile(outputDir, moduleName) - val metaInfoFile = JpsJsModuleUtils.getOutputMetaFile(outputDir, moduleName) val libraryFiles = JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget) val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(project) val k2JsArguments = JpsKotlinCompilerSettings.getK2JsCompilerArguments(project) - runK2JsCompiler(commonArguments, k2JsArguments, compilerSettings, messageCollector, environment, outputItemCollector, sourceFiles, libraryFiles, outputFile, metaInfoFile) + runK2JsCompiler(commonArguments, k2JsArguments, compilerSettings, messageCollector, environment, outputItemCollector, sourceFiles, libraryFiles, outputFile) return outputItemCollector } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/Config.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/Config.java index b27f020d047..05331ea05f8 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/Config.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/Config.java @@ -54,8 +54,7 @@ public abstract class Config { private final String moduleId; private final boolean sourcemap; - @Nullable - private final String metaFileOutputPath; + private final boolean metaInfo; @NotNull protected final List metadata = new SmartList(); @@ -71,23 +70,22 @@ public abstract class Config { @NotNull EcmaVersion ecmaVersion, boolean sourcemap, boolean inlineEnabled, - @Nullable String metaFileOutputPath + boolean metaInfo ) { this.project = project; this.target = ecmaVersion; this.moduleId = moduleId; this.sourcemap = sourcemap; this.inlineEnabled = inlineEnabled; - this.metaFileOutputPath = metaFileOutputPath; + this.metaInfo = metaInfo; } public boolean isSourcemap() { return sourcemap; } - @Nullable - public String getMetaInfo() { - return metaFileOutputPath; + public boolean isMetaInfo() { + return metaInfo; } public boolean isInlineEnabled() { diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/LibrarySourcesConfig.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/LibrarySourcesConfig.java index 17b800d67de..bfdab426712 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/LibrarySourcesConfig.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/LibrarySourcesConfig.java @@ -71,9 +71,9 @@ public class LibrarySourcesConfig extends Config { boolean sourceMap, boolean inlineEnabled, boolean isUnitTestConfig, - @Nullable String metaFileOutputPath + boolean metaInfo ) { - super(project, moduleId, ecmaVersion, sourceMap, inlineEnabled, metaFileOutputPath); + super(project, moduleId, ecmaVersion, sourceMap, inlineEnabled, metaInfo); this.files = files; this.isUnitTestConfig = isUnitTestConfig; } @@ -186,7 +186,7 @@ public class LibrarySourcesConfig extends Config { boolean sourceMap = false; boolean inlineEnabled = true; boolean isUnitTestConfig = false; - String metaFileOutputPath; + boolean metaInfo = false; public Builder(@NotNull Project project, @NotNull String moduleId, @NotNull List files) { this.project = project; @@ -214,13 +214,13 @@ public class LibrarySourcesConfig extends Config { return this; } - public Builder metaFileOutputPath(@Nullable String metaFileOutputPath) { - this.metaFileOutputPath = metaFileOutputPath; + public Builder metaInfo(boolean metaInfo) { + this.metaInfo = metaInfo; return this; } public Config build() { - return new LibrarySourcesConfig(project, moduleId, files, ecmaVersion, sourceMap, inlineEnabled, isUnitTestConfig, metaFileOutputPath); + return new LibrarySourcesConfig(project, moduleId, files, ecmaVersion, sourceMap, inlineEnabled, isUnitTestConfig, metaInfo); } } 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 eee7f066edf..36b3718b398 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 @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilder import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil +import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils import org.jetbrains.kotlin.utils.fileUtils.readTextOrEmpty import java.io.File import java.util.ArrayList @@ -71,11 +72,11 @@ public abstract class TranslationResult protected (public val diagnostics: Diagn val jsFile = SimpleOutputFile(sourceFiles, outputFile.getName(), prefix + code + postfix) val outputFiles = arrayListOf(jsFile) - config.getMetaInfo()?.let { - val metaFile = File(it) + if (config.isMetaInfo()) { + val metaFileName = KotlinJavascriptMetadataUtils.replaceSuffix(outputFile.getName()) val metaFileContent = KotlinJavascriptSerializationUtil.metadataAsString(config.getModuleId(), moduleDescriptor) - val sourceFilesForMetaFile = ArrayList(sourceFiles) - val jsMetaFile = SimpleOutputFile(sourceFilesForMetaFile, metaFile.getName(), metaFileContent) + val sourceFilesForMetaFile = ArrayList(sourceFiles) + val jsMetaFile = SimpleOutputFile(sourceFilesForMetaFile, metaFileName, metaFileContent) outputFiles.add(jsMetaFile) } diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java index a2c8f3f5126..99b2f53e791 100644 --- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java +++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java @@ -27,6 +27,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments; import org.jetbrains.kotlin.cli.js.K2JSCompiler; import org.jetbrains.kotlin.utils.LibraryUtils; +import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils; +import org.jetbrains.kotlin.js.JavaScript; +import kotlin.KotlinPackage; import java.io.File; import java.util.ArrayList; @@ -54,10 +57,10 @@ public class K2JSCompilerMojo extends KotlinCompileMojoBase libraries = getKotlinJavascriptLibraryFiles(); LOG.debug("libraryFiles: " + libraries); @@ -82,7 +85,8 @@ public class K2JSCompilerMojo extends KotlinCompileMojoBase