diff --git a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java index 9294e41df8..f2d32701af 100644 --- a/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java +++ b/flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java @@ -1346,6 +1346,33 @@ private void genDeleteMappingSource(SemanticModel semanticModel, ExpressionNode textEdits.add(new TextEdit(CommonUtils.toRange(expr.lineRange()), defaultVal)); } } + } else if (parent.kind() == SyntaxKind.EXPRESSION_FUNCTION_BODY) { + Optional optSymbol = semanticModel.symbol(parent.parent()); + if (optSymbol.isEmpty()) { + return; + } + Symbol symbol = optSymbol.get(); + if (symbol.kind() == SymbolKind.FUNCTION) { + FunctionSymbol functionSymbol = (FunctionSymbol) symbol; + Optional returnType = functionSymbol.typeDescriptor().returnTypeDescriptor(); + if (returnType.isPresent()) { + TypeSymbol returnTypeSymbol = returnType.get(); + String defaultVal = getDefaultValue( + CommonUtil.getRawType(returnTypeSymbol).typeKind().getName()); + textEdits.add(new TextEdit(CommonUtils.toRange(expr.lineRange()), defaultVal)); + } + } + } else if (parent.kind() == SyntaxKind.SELECT_CLAUSE) { + Optional optSymbol = semanticModel.symbol(expr); + if (optSymbol.isPresent()) { + Symbol symbol = optSymbol.get(); + if (symbol.kind() == SymbolKind.VARIABLE) { + VariableSymbol varSymbol = (VariableSymbol) symbol; + String defaultVal = getDefaultValue( + CommonUtil.getRawType(varSymbol.typeDescriptor()).typeKind().getName()); + textEdits.add(new TextEdit(CommonUtils.toRange(expr.lineRange()), defaultVal)); + } + } } } } else if (expr.kind() == SyntaxKind.MAPPING_CONSTRUCTOR) { diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java index ba5f57f54a..be4544ea48 100644 --- a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java @@ -62,7 +62,9 @@ protected Object[] getConfigsList() { {Path.of("function_defn1.json")}, {Path.of("function_defn2.json")}, {Path.of("variable6.json")}, - {Path.of("variable7.json")} + {Path.of("variable7.json")}, + {Path.of("variable8.json")}, + {Path.of("variable9.json")}, }; } diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/variable8.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/variable8.json new file mode 100644 index 0000000000..90b5ee9606 --- /dev/null +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/variable8.json @@ -0,0 +1,45 @@ +{ + "source": "variable6.bal", + "description": "", + "codedata": { + "node": "VARIABLE", + "lineRange": { + "fileName": "variable6.bal", + "startLine": { + "line": 10, + "offset": 0 + }, + "endLine": { + "line": 10, + "offset": 52 + } + } + }, + "mapping": { + "output": "name", + "inputs": [ + "arr1" + ], + "expression": "arr1", + "diagnostics": [], + "elements": [] + }, + "targetField": "name", + "output": { + "variable6.bal": [ + { + "range": { + "start": { + "line": 10, + "character": 47 + }, + "end": { + "line": 10, + "character": 51 + } + }, + "newText": "{}" + } + ] + } +} diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/variable9.json b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/variable9.json new file mode 100644 index 0000000000..2985d69559 --- /dev/null +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/variable9.json @@ -0,0 +1,47 @@ +{ + "source": "variable6.bal", + "description": "", + "codedata": { + "node": "VARIABLE", + "lineRange": { + "fileName": "variable6.bal", + "startLine": { + "line": 17, + "offset": 12 + }, + "endLine": { + "line": 20, + "offset": 14 + } + } + }, + "mapping": { + "output": "rec", + "inputs": [ + "recItem" + ], + "expression": "recItem\n", + "diagnostics": [], + "elements": [], + "isQueryExpression": false, + "isFunctionCall": false + }, + "targetField": "v2.rec", + "output": { + "variable6.bal": [ + { + "range": { + "start": { + "line": 19, + "character": 27 + }, + "end": { + "line": 19, + "character": 34 + } + }, + "newText": "{}" + } + ] + } +} diff --git a/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/source/variable6.bal b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/source/variable6.bal new file mode 100644 index 0000000000..046db5ee2c --- /dev/null +++ b/flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/source/variable6.bal @@ -0,0 +1,26 @@ +import ballerina/http; + +type RecType record {| + int i; +|}; + +type ArrType record {| + RecType[] rec; +|}; + +function name(ArrType arr1) returns ArrType => arr1; + +service OASServiceType on new http:Listener(9090) { + + resource function get pet() returns int|http:NotFound { + do { + ArrType v1 = {}; + ArrType v2 = { + rec: from var recItem in v1.rec + select recItem + }; + } on fail error e { + return http:NOT_FOUND; + } + } +}