KT-3008 Change the way how modules are referenced in JS

This commit is contained in:
Alexey Andreev
2016-04-11 16:20:25 +03:00
parent 2909533522
commit 95b78e18df
24 changed files with 169 additions and 136 deletions
@@ -48,6 +48,10 @@ public class K2JSCompilerArguments extends CommonCompilerArguments {
@ValueDescription("<version>")
public String target;
@Argument(value = "module-kind", description = "Kind of a module generated by compiler. Supported values are: plain (by default), " +
"amd, commonjs.")
public String moduleKind;
@Nullable
@Argument(value = "main", description = "Whether a main function should be called; default '" + CALL + "' (main function will be auto detected)")
@ValueDescription("{" + CALL + "," + NO_CALL + "}")
@@ -58,6 +58,7 @@ import org.jetbrains.kotlin.js.facade.TranslationResult;
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
import org.jetbrains.kotlin.serialization.js.ModuleKind;
import org.jetbrains.kotlin.utils.PathUtil;
import java.io.File;
@@ -243,8 +244,11 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
@Override
protected void setupPlatformSpecificArgumentsAndServices(
@NotNull CompilerConfiguration configuration, @NotNull K2JSCompilerArguments arguments, @NotNull Services services
@NotNull CompilerConfiguration configuration, @NotNull K2JSCompilerArguments arguments,
@NotNull Services services
) {
MessageCollector messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY);
if (arguments.target != null) {
assert arguments.target == "v5" : "Unsupported ECMA version: " + arguments.target;
}
@@ -270,6 +274,27 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
}
configuration.put(JSConfigurationKeys.LIBRARY_FILES, libraryFiles);
String moduleKindName = arguments.moduleKind;
ModuleKind moduleKind = ModuleKind.PLAIN;
if (moduleKindName != null) {
moduleKindName = moduleKindName.toLowerCase();
if (moduleKindName.equals("plain")) {
moduleKind = ModuleKind.PLAIN;
}
else if (moduleKindName.equals("amd")) {
moduleKind = ModuleKind.AMD;
}
else if (moduleKindName.equals("commonjs")) {
moduleKind = ModuleKind.COMMON_JS;
}
else {
messageCollector.report(CompilerMessageSeverity.ERROR, "Unknown module kind: " + moduleKindName + ". " +
"valid values are: plain, amd, commonjs",
CompilerMessageLocation.NO_LOCATION);
}
}
configuration.put(JSConfigurationKeys.MODULE_KIND, moduleKind);
}
private static MainCallParameters createMainCallParameters(String main) {