Fixed transpilation of attr components.
This commit is contained in:
parent
5ada84dfed
commit
715691d93c
1
web-view-components-compiler/.gitignore
vendored
1
web-view-components-compiler/.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
bin
|
bin
|
||||||
groovyc-out
|
groovyc-out
|
||||||
groovy-wvc-out
|
groovy-wvc-out
|
||||||
|
dump*
|
||||||
|
@ -6,5 +6,6 @@ import org.codehaus.groovy.ast.stmt.Statement;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ComponentTranspiler {
|
public interface ComponentTranspiler {
|
||||||
|
List<Statement> createComponentStatements(ComponentNode componentNode, TranspilerState state, boolean isAttrComponent);
|
||||||
List<Statement> createComponentStatements(ComponentNode componentNode, TranspilerState state);
|
List<Statement> createComponentStatements(ComponentNode componentNode, TranspilerState state);
|
||||||
}
|
}
|
||||||
|
@ -467,32 +467,43 @@ public class DefaultComponentTranspiler implements ComponentTranspiler {
|
|||||||
/* MAIN */
|
/* MAIN */
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Statement> createComponentStatements(ComponentNode componentNode, TranspilerState state) {
|
public List<Statement> createComponentStatements(
|
||||||
|
ComponentNode componentNode,
|
||||||
|
TranspilerState state,
|
||||||
|
boolean isAttrComponent
|
||||||
|
) {
|
||||||
if (componentNode instanceof TypedComponentNode typedComponentNode) {
|
if (componentNode instanceof TypedComponentNode typedComponentNode) {
|
||||||
|
final List<Statement> allStatements = new ArrayList<>();
|
||||||
|
|
||||||
// Resolve
|
// Resolve
|
||||||
final List<Statement> resolveStatements = this.getResolveStatements(typedComponentNode, state);
|
final List<Statement> resolveStatements = this.getResolveStatements(typedComponentNode, state);
|
||||||
|
allStatements.addAll(resolveStatements);
|
||||||
// Create
|
// Create
|
||||||
final List<Statement> createStatements = this.getTypedCreateStatements(typedComponentNode, state);
|
final List<Statement> createStatements = this.getTypedCreateStatements(typedComponentNode, state);
|
||||||
// Append/Add
|
allStatements.addAll(createStatements);
|
||||||
final Statement leftShift = this.leftShiftFactory.create(state, state.getCurrentComponent());
|
// return OR leftShift
|
||||||
|
if (isAttrComponent) {
|
||||||
|
final ReturnStatement returnStatement = new ReturnStatement(state.getCurrentComponent());
|
||||||
|
allStatements.add(returnStatement);
|
||||||
|
} else {
|
||||||
|
final Statement leftShift = this.leftShiftFactory.create(state, state.getCurrentComponent());
|
||||||
|
allStatements.add(leftShift);
|
||||||
|
}
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
state.popResolved();
|
state.popResolved();
|
||||||
state.popComponent();
|
state.popComponent();
|
||||||
|
|
||||||
final List<Statement> allStatements = new ArrayList<>();
|
|
||||||
allStatements.addAll(resolveStatements);
|
|
||||||
allStatements.addAll(createStatements);
|
|
||||||
allStatements.add(leftShift);
|
|
||||||
|
|
||||||
return allStatements;
|
return allStatements;
|
||||||
} else if (componentNode instanceof FragmentComponentNode fragmentComponentNode) {
|
} else if (componentNode instanceof FragmentComponentNode fragmentComponentNode) {
|
||||||
// Create and add all at once
|
final Expression fragmentCreate = this.getFragmentCreateExpression(fragmentComponentNode, state);
|
||||||
final Statement leftShift = this.leftShiftFactory.create(
|
if (isAttrComponent) {
|
||||||
state,
|
final ReturnStatement returnStatement = new ReturnStatement(fragmentCreate);
|
||||||
this.getFragmentCreateExpression(fragmentComponentNode, state)
|
return List.of(returnStatement);
|
||||||
);
|
} else {
|
||||||
return List.of(leftShift);
|
final Statement leftShift = this.leftShiftFactory.create(state, fragmentCreate);
|
||||||
|
return List.of(leftShift);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new WebViewComponentBugError(new IllegalArgumentException(
|
throw new WebViewComponentBugError(new IllegalArgumentException(
|
||||||
"Cannot handle a ComponentNode not of type TypedComponentNode or FragmentComponentNode."
|
"Cannot handle a ComponentNode not of type TypedComponentNode or FragmentComponentNode."
|
||||||
@ -500,4 +511,9 @@ public class DefaultComponentTranspiler implements ComponentTranspiler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Statement> createComponentStatements(ComponentNode componentNode, TranspilerState state) {
|
||||||
|
return this.createComponentStatements(componentNode, state, false);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,8 @@ public class DefaultValueNodeTranspiler implements ValueNodeTranspiler {
|
|||||||
Parameter.EMPTY_ARRAY,
|
Parameter.EMPTY_ARRAY,
|
||||||
new BlockStatement(this.componentTranspiler.createComponentStatements(
|
new BlockStatement(this.componentTranspiler.createComponentStatements(
|
||||||
componentValueNode.getComponentNode(),
|
componentValueNode.getComponentNode(),
|
||||||
state
|
state,
|
||||||
|
true
|
||||||
), state.getCurrentScope())
|
), state.getCurrentScope())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user