[K/JS] Move ES modules logic to a new transformer with IC
This commit is contained in:
@@ -1329,31 +1329,47 @@ public class JsToStringGenerationVisitor extends JsVisitor {
|
||||
|
||||
@Override
|
||||
public void visitImport(@NotNull JsImport jsImport) {
|
||||
p.print("import {");
|
||||
boolean isMultiline = jsImport.getElements().size() > 1;
|
||||
p.indentIn();
|
||||
if (isMultiline)
|
||||
newlineOpt();
|
||||
else
|
||||
space();
|
||||
JsImport.Target target = jsImport.getTarget();
|
||||
|
||||
for (JsImport.Element element : jsImport.getElements()) {
|
||||
nameDef(element.getName());
|
||||
JsName alias = element.getAlias();
|
||||
if (alias != null) {
|
||||
p.print(" as ");
|
||||
nameDef(alias);
|
||||
}
|
||||
p.print("import ");
|
||||
|
||||
if (isMultiline) {
|
||||
p.print(',');
|
||||
if (target instanceof JsImport.Target.Default) {
|
||||
nameDef(((JsImport.Target.Default) target).getName());
|
||||
} else if (target instanceof JsImport.Target.All) {
|
||||
p.print("* as ");
|
||||
nameDef(((JsImport.Target.All) target).getAlias());
|
||||
} else if (target instanceof JsImport.Target.Elements) {
|
||||
List<JsImport.Element> elements = ((JsImport.Target.Elements) target).getElements();
|
||||
|
||||
p.print("{");
|
||||
boolean isMultiline = elements.size() > 1;
|
||||
p.indentIn();
|
||||
if (isMultiline)
|
||||
newlineOpt();
|
||||
} else {
|
||||
else
|
||||
space();
|
||||
|
||||
for (JsImport.Element element : elements) {
|
||||
nameDef(element.getName());
|
||||
JsName alias = element.getAlias();
|
||||
if (alias != null) {
|
||||
p.print(" as ");
|
||||
nameDef(alias);
|
||||
}
|
||||
|
||||
if (isMultiline) {
|
||||
p.print(',');
|
||||
newlineOpt();
|
||||
}
|
||||
else {
|
||||
space();
|
||||
}
|
||||
}
|
||||
p.indentOut();
|
||||
p.print("}");
|
||||
}
|
||||
p.indentOut();
|
||||
p.print("} from ");
|
||||
|
||||
p.print(" from ");
|
||||
p.print(javaScriptString(jsImport.getModule()));
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,23 @@ package org.jetbrains.kotlin.js.backend.ast
|
||||
|
||||
class JsImport(
|
||||
val module: String,
|
||||
val elements: MutableList<Element> = mutableListOf(),
|
||||
val target: Target,
|
||||
) : SourceInfoAwareJsNode(), JsStatement {
|
||||
constructor(module: String, elements: MutableList<Element> = mutableListOf()) : this(module, Target.Elements(elements))
|
||||
|
||||
val elements: MutableList<Element>
|
||||
get() = (target as Target.Elements).elements
|
||||
|
||||
sealed class Target {
|
||||
class Elements(val elements: MutableList<Element>) : Target()
|
||||
class Default(val name: JsName) : Target() {
|
||||
constructor(name: String) : this(JsName(name, false))
|
||||
}
|
||||
|
||||
class All(val alias: JsName) : Target() {
|
||||
constructor(alias: String) : this(JsName(alias, false))
|
||||
}
|
||||
}
|
||||
|
||||
class Element(
|
||||
val name: JsName,
|
||||
@@ -25,7 +40,7 @@ class JsImport(
|
||||
}
|
||||
|
||||
override fun deepCopy(): JsStatement =
|
||||
JsImport(module, elements.map { it }.toMutableList())
|
||||
JsImport(module, target)
|
||||
|
||||
override fun traverse(v: JsVisitorWithContext, ctx: JsContext<*>) {
|
||||
v.visit(this, ctx)
|
||||
|
||||
Reference in New Issue
Block a user