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)
+ }
+
}