diff --git a/projects/qute/projects/maven/qute-quickstart/src/main/java/org/acme/qute/HelloResource.java b/projects/qute/projects/maven/qute-quickstart/src/main/java/org/acme/qute/HelloResource.java index df4b51d77..9dc85e3a5 100644 --- a/projects/qute/projects/maven/qute-quickstart/src/main/java/org/acme/qute/HelloResource.java +++ b/projects/qute/projects/maven/qute-quickstart/src/main/java/org/acme/qute/HelloResource.java @@ -42,9 +42,9 @@ private Template requireNonNull(Template page2, String string) { @GET @Produces(MediaType.TEXT_HTML) public TemplateInstance get(@QueryParam("name") String name) { - hello.data("age", 12); - hello.data("height", 1.50, "weight", 50L); - return hello.data("name", name); + return hello.data("height", 1.50, "weight", 50L) + .data("age", 12) + .data("name", name); } @GET diff --git a/src/main/java/com/redhat/devtools/intellij/qute/psi/internal/template/TemplateDataVisitor.java b/src/main/java/com/redhat/devtools/intellij/qute/psi/internal/template/TemplateDataVisitor.java index 6ba57de1d..0cedd5b0f 100644 --- a/src/main/java/com/redhat/devtools/intellij/qute/psi/internal/template/TemplateDataVisitor.java +++ b/src/main/java/com/redhat/devtools/intellij/qute/psi/internal/template/TemplateDataVisitor.java @@ -1,9 +1,7 @@ package com.redhat.devtools.intellij.qute.psi.internal.template; -import com.intellij.psi.JavaElementVisitor; -import com.intellij.psi.PsiExpression; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiMethodCallExpression; +import com.intellij.psi.*; +import com.intellij.psi.util.PsiTreeUtil; public abstract class TemplateDataVisitor extends JavaElementVisitor { @@ -15,7 +13,9 @@ public abstract class TemplateDataVisitor extends JavaElementVisitor { public void visitMethodCallExpression(PsiMethodCallExpression node) { String methodName = node.resolveMethod().getName(); if (DATA_METHOD.equals(methodName)) { - // .data("book", book) + // collect the first data method + // ex : hello.data("height", 1.50, "weight", 50L); + // will collect data model parameters for "height" and "weight" @SuppressWarnings("rawtypes") PsiExpression[] arguments = node.getArgumentList().getExpressions(); Object paramName = null; @@ -31,6 +31,17 @@ public void visitMethodCallExpression(PsiMethodCallExpression node) { } } } + + // Fluent API support + PsiMethodCallExpression nextCallExpression = PsiTreeUtil.getParentOfType(node, PsiMethodCallExpression.class); + if (nextCallExpression != null){ + // collect the other data methods + // ex : hello.data("height", 1.50, "weight", 50L) + // .data("age", 12) + // .data("name", name) + // will collect data model parameters for "age" and "name" + visitMethodCallExpression(nextCallExpression); + } super.visitMethodCallExpression(node); }