package xapi.jre.ui.impl; import com.github.javaparser.ASTHelper; import com.github.javaparser.ast.body.Parameter; import com.github.javaparser.ast.expr.Expression; import com.github.javaparser.ast.expr.LambdaExpr; import com.github.javaparser.ast.expr.MethodReferenceExpr; import com.github.javaparser.ast.expr.UiAttrExpr; import com.github.javaparser.ast.stmt.ExpressionStmt; import com.github.javaparser.ast.stmt.Statement; import xapi.dev.source.MethodBuffer; import xapi.dev.ui.ContainerMetadata; import xapi.dev.ui.UiComponentGenerator; import xapi.dev.ui.UiFeatureGenerator; import xapi.dev.ui.UiGeneratorTools; import xapi.dev.ui.UiVisitScope; import xapi.dev.ui.UiVisitScope.ScopeType; import static xapi.dev.ui.UiVisitScope.visitScope; import java.util.Arrays; import java.util.List; /** * Created by James X. Nelson (james @wetheinter.net) on 6/19/16. */ public class JavaFxActionFeatureGenerator extends UiFeatureGenerator { @Override public UiVisitScope startVisit( UiGeneratorTools service, UiComponentGenerator generator, ContainerMetadata me, UiAttrExpr n) { final Expression expr = n.getExpression(); MethodBuffer into = me.getParentMethod(); String target = me.peekPanelName(); into.println(target + ".setOnAction(") .indent(); if (expr instanceof LambdaExpr || expr instanceof MethodReferenceExpr) { into.printlns(expr.toSource(generator.getTransformer())); } else { final Statement statement = new ExpressionStmt(expr); final List<Parameter> params = Arrays.asList( ASTHelper.createParameter(me.newVarName("e")) ); LambdaExpr lambda = new LambdaExpr(params, statement, false); into.printlns(lambda.toSource(generator.getTransformer())); } into .outdent() .println(");"); return visitScope(ScopeType.CONTAINER, false); } }