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