diff --git a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/model/node/CallBuilder.java b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/model/node/CallBuilder.java index da5ee180e..049d0b910 100644 --- a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/model/node/CallBuilder.java +++ b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/model/node/CallBuilder.java @@ -38,6 +38,8 @@ import org.ballerinalang.langserver.commons.workspace.WorkspaceManager; import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; /** * Abstract base class for function-like builders (functions, methods, resource actions). @@ -132,10 +134,9 @@ public static void buildInferredTypeProperty(NodeBuilder nodeBuilder, ParameterD .stepOut() .value(value) .placeholder(paramData.defaultValue()) + .type(Property.ValueType.TYPE) .typeConstraint(paramData.type()) - .typeMembers(paramData.typeMembers()) .editable() - .defaultable(paramData.optional()) .stepOut() .addProperty(unescapedParamName); } @@ -144,14 +145,16 @@ protected void setParameterProperties(FunctionData function) { boolean hasOnlyRestParams = function.parameters().size() == 1; // Build the inferred type property at the top if exists - if (function.inferredReturnType()) { - function.parameters().values().stream() - .filter(param -> param.kind().equals(ParameterData.Kind.PARAM_FOR_TYPE_INFER)) - .findFirst() - .ifPresent(param -> buildInferredTypeProperty(this, param, null)); - } + Map paramMap = new HashMap<>(); + function.parameters().forEach((key, paramData) -> { + if (paramData.kind() != ParameterData.Kind.PARAM_FOR_TYPE_INFER) { + paramMap.put(key, paramData); + return; + } + buildInferredTypeProperty(this, paramData, null); + }); - for (ParameterData paramResult : function.parameters().values()) { + for (ParameterData paramResult : paramMap.values()) { if (paramResult.kind().equals(ParameterData.Kind.INCLUDED_RECORD)) { continue; } diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql1.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql1.json index df3a2e768..9c0246bbc 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql1.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql1.json @@ -499,7 +499,7 @@ "typeMembers": [ { "type": "ConnectionPool", - "packageInfo": "ballerina:sql:1.15.0", + "packageInfo": "ballerina:sql:1.14.0", "kind": "RECORD_TYPE", "selected": false }, diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql2.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql2.json index c33520607..b16ae0cc9 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql2.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/diagram_generator/config/remote_action_call-mysql2.json @@ -388,7 +388,7 @@ "typeMembers": [ { "type": "ConnectionPool", - "packageInfo": "ballerina:sql:1.15.0", + "packageInfo": "ballerina:sql:1.14.0", "kind": "RECORD_TYPE", "selected": false }, diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/function_call-json-parseString.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/function_call-json-parseString.json index 5a1f419b8..05987b3c0 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/function_call-json-parseString.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/function_call-json-parseString.json @@ -30,6 +30,22 @@ }, "returning": false, "properties": { + "t": { + "metadata": { + "label": "t", + "description": "Target type" + }, + "valueType": "TYPE", + "valueTypeConstraint": "anydata", + "placeholder": "anydata", + "optional": false, + "editable": true, + "advanced": false, + "codedata": { + "kind": "PARAM_FOR_TYPE_INFER", + "originalName": "t" + } + }, "s": { "metadata": { "label": "s", @@ -78,23 +94,6 @@ } ] }, - "t": { - "metadata": { - "label": "t", - "description": "Target type" - }, - "valueType": "TYPE", - "valueTypeConstraint": "anydata", - "placeholder": "anydata", - "optional": false, - "editable": true, - "advanced": false, - "codedata": { - "kind": "PARAM_FOR_TYPE_INFER", - "originalName": "t" - }, - "typeMembers": [] - }, "type": { "metadata": { "label": "Variable Type", diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-get.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-get.json index a6dc2e1e2..6a9641075 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-get.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-get.json @@ -45,6 +45,22 @@ "editable": false, "advanced": false }, + "targetType": { + "metadata": { + "label": "targetType", + "description": "HTTP response, `anydata` or stream of HTTP SSE, which is expected to be returned after data binding" + }, + "valueType": "TYPE", + "valueTypeConstraint": "http:Response|anydata|stream", + "placeholder": "http:Response|anydata|stream", + "optional": false, + "editable": true, + "advanced": false, + "codedata": { + "kind": "PARAM_FOR_TYPE_INFER", + "originalName": "targetType" + } + }, "path": { "metadata": { "label": "path", @@ -99,23 +115,6 @@ } ] }, - "targetType": { - "metadata": { - "label": "targetType", - "description": "HTTP response, `anydata` or stream of HTTP SSE, which is expected to be returned after data binding" - }, - "valueType": "TYPE", - "valueTypeConstraint": "http:Response|anydata|stream", - "placeholder": "http:Response|anydata|stream", - "optional": false, - "editable": true, - "advanced": false, - "codedata": { - "kind": "PARAM_FOR_TYPE_INFER", - "originalName": "targetType" - }, - "typeMembers": [] - }, "type": { "metadata": { "label": "Variable Type", diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-post.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-post.json index 31c69b51f..6b4ca4b7d 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-post.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-http-post.json @@ -45,6 +45,22 @@ "editable": false, "advanced": false }, + "targetType": { + "metadata": { + "label": "targetType", + "description": "HTTP response, `anydata` or stream of HTTP SSE, which is expected to be returned after data binding" + }, + "valueType": "TYPE", + "valueTypeConstraint": "http:Response|anydata|stream", + "placeholder": "http:Response|anydata|stream", + "optional": false, + "editable": true, + "advanced": false, + "codedata": { + "kind": "PARAM_FOR_TYPE_INFER", + "originalName": "targetType" + } + }, "path": { "metadata": { "label": "path", @@ -69,30 +85,6 @@ } ] }, - "message": { - "metadata": { - "label": "message", - "description": "An HTTP outbound request or any allowed payload" - }, - "valueType": "EXPRESSION", - "valueTypeConstraint": "http:RequestMessage", - "placeholder": "{}", - "optional": false, - "editable": true, - "advanced": false, - "codedata": { - "kind": "REQUIRED", - "originalName": "message" - }, - "typeMembers": [ - { - "type": "RequestMessage", - "packageInfo": "ballerina:http:2.12.2", - "kind": "OTHER", - "selected": false - } - ] - }, "headers": { "metadata": { "label": "headers", @@ -153,22 +145,29 @@ } ] }, - "targetType": { + "message": { "metadata": { - "label": "targetType", - "description": "HTTP response, `anydata` or stream of HTTP SSE, which is expected to be returned after data binding" + "label": "message", + "description": "An HTTP outbound request or any allowed payload" }, - "valueType": "TYPE", - "valueTypeConstraint": "http:Response|anydata|stream", - "placeholder": "http:Response|anydata|stream", + "valueType": "EXPRESSION", + "valueTypeConstraint": "http:RequestMessage", + "placeholder": "{}", "optional": false, "editable": true, "advanced": false, "codedata": { - "kind": "PARAM_FOR_TYPE_INFER", - "originalName": "targetType" + "kind": "REQUIRED", + "originalName": "message" }, - "typeMembers": [] + "typeMembers": [ + { + "type": "RequestMessage", + "packageInfo": "ballerina:http:2.12.2", + "kind": "OTHER", + "selected": false + } + ] }, "type": { "metadata": { diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-query.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-query.json index 798af818a..f61a1c501 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-query.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-query.json @@ -61,8 +61,7 @@ "codedata": { "kind": "PARAM_FOR_TYPE_INFER", "originalName": "rowType" - }, - "typeMembers": [] + } }, "sqlQuery": { "metadata": { diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-queryRow.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-queryRow.json index d56e573cc..d36ef2903 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-queryRow.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-mysql-queryRow.json @@ -61,8 +61,7 @@ "codedata": { "kind": "PARAM_FOR_TYPE_INFER", "originalName": "returnType" - }, - "typeMembers": [] + } }, "sqlQuery": { "metadata": { diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-snowflake-query.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-snowflake-query.json index 659295fb0..ebb43a2c2 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-snowflake-query.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/remote_action_call-snowflake-query.json @@ -45,6 +45,22 @@ "editable": false, "advanced": false }, + "rowType": { + "metadata": { + "label": "rowType", + "description": "The `typedesc` of the record to which the result needs to be returned" + }, + "valueType": "TYPE", + "valueTypeConstraint": "record {|anydata...;|}", + "placeholder": "record {|anydata...;|}", + "optional": false, + "editable": true, + "advanced": false, + "codedata": { + "kind": "PARAM_FOR_TYPE_INFER", + "originalName": "rowType" + } + }, "sqlQuery": { "metadata": { "label": "sqlQuery", @@ -70,23 +86,6 @@ } ] }, - "rowType": { - "metadata": { - "label": "rowType", - "description": "The `typedesc` of the record to which the result needs to be returned" - }, - "valueType": "TYPE", - "valueTypeConstraint": "record {|anydata...;|}", - "placeholder": "record {|anydata...;|}", - "optional": false, - "editable": true, - "advanced": false, - "codedata": { - "kind": "PARAM_FOR_TYPE_INFER", - "originalName": "rowType" - }, - "typeMembers": [] - }, "type": { "metadata": { "label": "Variable Type", diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/resource_action_call-http-get.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/resource_action_call-http-get.json index efc8dcf90..cef0a47e9 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/resource_action_call-http-get.json +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/node_template/config/resource_action_call-http-get.json @@ -58,6 +58,22 @@ "originalName": "/path/to/subdirectory" } }, + "targetType": { + "metadata": { + "label": "targetType", + "description": "HTTP response, `anydata` or stream of HTTP SSE, which is expected to be returned after data binding" + }, + "valueType": "TYPE", + "valueTypeConstraint": "http:Response|anydata|stream", + "placeholder": "http:Response|anydata|stream", + "optional": false, + "editable": true, + "advanced": false, + "codedata": { + "kind": "PARAM_FOR_TYPE_INFER", + "originalName": "targetType" + } + }, "headers": { "metadata": { "label": "headers", @@ -88,23 +104,6 @@ } ] }, - "targetType": { - "metadata": { - "label": "targetType", - "description": "HTTP response, `anydata` or stream of HTTP SSE, which is expected to be returned after data binding" - }, - "valueType": "TYPE", - "valueTypeConstraint": "http:Response|anydata|stream", - "placeholder": "http:Response|anydata|stream", - "optional": false, - "editable": true, - "advanced": false, - "codedata": { - "kind": "PARAM_FOR_TYPE_INFER", - "originalName": "targetType" - }, - "typeMembers": [] - }, "additionalValues": { "metadata": { "label": "Additional Values",