From 9534d7b26e691e164141adbc2d9890e06a55e2f1 Mon Sep 17 00:00:00 2001
From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com>
Date: Thu, 30 May 2024 10:53:15 +0200
Subject: [PATCH] Component closure value attr now reduce to simple expressions
if possible.
---
.../web/transpile/DefaultValueNodeTranspiler.java | 6 +++---
.../component/web/BaseWebViewComponentTests.groovy | 11 +++++++++++
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/web-view-components-compiler/src/main/java/groowt/view/component/web/transpile/DefaultValueNodeTranspiler.java b/web-view-components-compiler/src/main/java/groowt/view/component/web/transpile/DefaultValueNodeTranspiler.java
index a1fedf4..c7eaeb8 100644
--- a/web-view-components-compiler/src/main/java/groowt/view/component/web/transpile/DefaultValueNodeTranspiler.java
+++ b/web-view-components-compiler/src/main/java/groowt/view/component/web/transpile/DefaultValueNodeTranspiler.java
@@ -8,7 +8,6 @@ import org.codehaus.groovy.ast.expr.*;
import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.EmptyStatement;
import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.ast.stmt.Statement;
import org.jetbrains.annotations.Nullable;
import static groowt.view.component.web.transpile.TranspilerUtil.getStringLiteral;
@@ -33,8 +32,9 @@ public class DefaultValueNodeTranspiler implements ValueNodeTranspiler {
);
convertedClosure.visit(positionVisitor);
- final Statement closureCode = convertedClosure.getCode();
- if (closureCode instanceof ExpressionStatement expressionStatement) {
+ final BlockStatement closureCode = (BlockStatement) convertedClosure.getCode();
+ if (!closureCode.isEmpty()
+ && closureCode.getStatements().getFirst() instanceof ExpressionStatement expressionStatement) {
final Expression expression = expressionStatement.getExpression();
return switch (expression) {
case ConstantExpression ignored -> expression;
diff --git a/web-view-components/src/test/groovy/groowt/view/component/web/BaseWebViewComponentTests.groovy b/web-view-components/src/test/groovy/groowt/view/component/web/BaseWebViewComponentTests.groovy
index 4fb841f..de8b921 100644
--- a/web-view-components/src/test/groovy/groowt/view/component/web/BaseWebViewComponentTests.groovy
+++ b/web-view-components/src/test/groovy/groowt/view/component/web/BaseWebViewComponentTests.groovy
@@ -45,4 +45,15 @@ class BaseWebViewComponentTests extends AbstractWebViewComponentTests {
this.doTest('', 'Hello, World!', context)
}
+ @Test
+ void closureValueAttrReducedToExpr() {
+ def context = this.context {
+ configureRootScope(WebViewComponentScope) {
+ addWithAttr(Greeter)
+ addWithNoArgConstructor(UsingGreeter)
+ }
+ }
+ this.doTest('', 'Hello, World!', context)
+ }
+
}