Component closure value attr now reduce to simple expressions if possible.

This commit is contained in:
JesseBrault0709 2024-05-30 10:53:15 +02:00
parent 44fdd712cf
commit 9534d7b26e
2 changed files with 14 additions and 3 deletions

View File

@ -8,7 +8,6 @@ import org.codehaus.groovy.ast.expr.*;
import org.codehaus.groovy.ast.stmt.BlockStatement; import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.EmptyStatement; import org.codehaus.groovy.ast.stmt.EmptyStatement;
import org.codehaus.groovy.ast.stmt.ExpressionStatement; import org.codehaus.groovy.ast.stmt.ExpressionStatement;
import org.codehaus.groovy.ast.stmt.Statement;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import static groowt.view.component.web.transpile.TranspilerUtil.getStringLiteral; import static groowt.view.component.web.transpile.TranspilerUtil.getStringLiteral;
@ -33,8 +32,9 @@ public class DefaultValueNodeTranspiler implements ValueNodeTranspiler {
); );
convertedClosure.visit(positionVisitor); convertedClosure.visit(positionVisitor);
final Statement closureCode = convertedClosure.getCode(); final BlockStatement closureCode = (BlockStatement) convertedClosure.getCode();
if (closureCode instanceof ExpressionStatement expressionStatement) { if (!closureCode.isEmpty()
&& closureCode.getStatements().getFirst() instanceof ExpressionStatement expressionStatement) {
final Expression expression = expressionStatement.getExpression(); final Expression expression = expressionStatement.getExpression();
return switch (expression) { return switch (expression) {
case ConstantExpression ignored -> expression; case ConstantExpression ignored -> expression;

View File

@ -45,4 +45,15 @@ class BaseWebViewComponentTests extends AbstractWebViewComponentTests {
this.doTest('<BaseWebViewComponentTests.UsingGreeter />', 'Hello, World!', context) this.doTest('<BaseWebViewComponentTests.UsingGreeter />', 'Hello, World!', context)
} }
@Test
void closureValueAttrReducedToExpr() {
def context = this.context {
configureRootScope(WebViewComponentScope) {
addWithAttr(Greeter)
addWithNoArgConstructor(UsingGreeter)
}
}
this.doTest('<BaseWebViewComponentTests.Greeter target={"World"} />', 'Hello, World!', context)
}
} }