diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/semantics/analyzer/TypeChecker.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/semantics/analyzer/TypeChecker.java index 9e8ef7d33364..1daf42ab31c3 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/semantics/analyzer/TypeChecker.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/semantics/analyzer/TypeChecker.java @@ -5293,11 +5293,11 @@ private BType getXMLConstituents(BType bType) { public void visit(BLangElvisExpr elvisExpr, AnalyzerData data) { BType lhsType = checkExpr(elvisExpr.lhsExpr, data); - BType actualType = lhsType == symTable.semanticError ? + BType lhsActualType = lhsType == symTable.semanticError ? symTable.semanticError : validateElvisExprLhsExpr(elvisExpr, lhsType); BType rhsActualType = silentTypeCheckExpr(elvisExpr.rhsExpr, symTable.noType, data); BType rhsReturnType = checkExpr(elvisExpr.rhsExpr, data.expType, data); - BType lhsReturnType = types.checkType(elvisExpr.lhsExpr.pos, actualType, data.expType, + BType lhsReturnType = types.checkType(elvisExpr.lhsExpr.pos, lhsActualType, data.expType, DiagnosticErrorCode.INCOMPATIBLE_TYPES); if (rhsReturnType == symTable.semanticError || lhsReturnType == symTable.semanticError) { data.resultType = symTable.semanticError; @@ -5307,7 +5307,7 @@ public void visit(BLangElvisExpr elvisExpr, AnalyzerData data) { data.resultType = data.expType; } - elvisExpr.setDeterminedType(getConditionalExprType(actualType, rhsActualType)); + elvisExpr.setDeterminedType(getConditionalExprType(lhsActualType, rhsActualType)); } @Override diff --git a/language-server/modules/langserver-core/src/main/java/org/ballerinalang/langserver/codeaction/providers/changetype/FixReturnTypeCodeAction.java b/language-server/modules/langserver-core/src/main/java/org/ballerinalang/langserver/codeaction/providers/changetype/FixReturnTypeCodeAction.java index 37cf178ef4c3..c687ae6e2c3f 100644 --- a/language-server/modules/langserver-core/src/main/java/org/ballerinalang/langserver/codeaction/providers/changetype/FixReturnTypeCodeAction.java +++ b/language-server/modules/langserver-core/src/main/java/org/ballerinalang/langserver/codeaction/providers/changetype/FixReturnTypeCodeAction.java @@ -69,14 +69,37 @@ public boolean validate(Diagnostic diagnostic, DiagBasedPositionDetails position return false; } - //Suggest the code action only if the immediate parent of the matched node is either of return statement, - //check expression, check action. + // Suggest code action if the node is aligned with a check keyword. NonTerminalNode matchedNode = positionDetails.matchedNode(); - if (matchedNode.parent() != null && matchedNode.parent().kind() != SyntaxKind.RETURN_STATEMENT && - matchedNode.kind() != SyntaxKind.CHECK_EXPRESSION && - matchedNode.kind() != SyntaxKind.CHECK_ACTION) { + if (matchedNode.kind() == SyntaxKind.CHECK_ACTION || matchedNode.kind() == SyntaxKind.CHECK_EXPRESSION) { + return CodeActionNodeValidator.validate(context.nodeAtRange()); + } + + // Suggest code action if the node is an expression inside a return statement. + NonTerminalNode parentNode = matchedNode.parent(); + if (parentNode == null) { + return false; + } + if (parentNode.kind() == SyntaxKind.RETURN_KEYWORD) { + return CodeActionNodeValidator.validate(context.nodeAtRange()); + } + + // Suggest code action if the node is an expression nested into a return statement. + NonTerminalNode grandParentNode = parentNode.parent(); + if (grandParentNode == null) { return false; } + if (grandParentNode.kind() == SyntaxKind.RETURN_STATEMENT) { + return CodeActionNodeValidator.validate(context.nodeAtRange()); + } + + // Suggest code action if the node is an expression inside a collect clause. + if (matchedNode.kind() == SyntaxKind.COLLECT_CLAUSE) { + NonTerminalNode ancestorNode = grandParentNode.parent(); + if (ancestorNode == null || ancestorNode.kind() != SyntaxKind.RETURN_STATEMENT) { + return false; + } + } return CodeActionNodeValidator.validate(context.nodeAtRange()); } diff --git a/language-server/modules/langserver-core/src/test/java/org/ballerinalang/langserver/codeaction/FixReturnTypeTest.java b/language-server/modules/langserver-core/src/test/java/org/ballerinalang/langserver/codeaction/FixReturnTypeTest.java index 7f937a9541e4..c3389c5ca4b9 100644 --- a/language-server/modules/langserver-core/src/test/java/org/ballerinalang/langserver/codeaction/FixReturnTypeTest.java +++ b/language-server/modules/langserver-core/src/test/java/org/ballerinalang/langserver/codeaction/FixReturnTypeTest.java @@ -67,7 +67,19 @@ public Object[][] dataProvider() { {"fixReturnTypeInUnionContext3.json"}, {"fixReturnTypeInUnionContext4.json"}, {"fixReturnTypeInCommitAction.json"}, - {"fixReturnTypeInMain1.json"} + {"fixReturnTypeInMain1.json"}, + {"fixReturnTypeForConditionalExpr1.json"}, + {"fixReturnTypeForConditionalExpr2.json"}, + {"fixReturnTypeForConditionalExpr3.json"}, + {"fixReturnTypeForConditionalExpr4.json"}, + {"fixReturnTypeForConditionalExpr5.json"}, + {"fixReturnTypeForConditionalExpr6.json"}, + {"fixReturnTypeForConditionalExpr7.json"}, + {"fixReturnTypeForConditionalExpr8.json"}, + {"fixReturnTypeForQueryExpr1.json"}, + {"fixReturnTypeForQueryExpr2.json"}, + {"fixReturnTypeForQueryExpr3.json"}, + {"fixReturnTypeForQueryExpr4.json"} }; } diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr1.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr1.json new file mode 100644 index 000000000000..fc6b045f0a45 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr1.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 6, + "character": 39 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'boolean|int'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 5, + "character": 76 + }, + "end": { + "line": 5, + "character": 76 + } + }, + "newText": " returns boolean|int" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr2.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr2.json new file mode 100644 index 000000000000..036ff255608e --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr2.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 6, + "character": 51 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'boolean|int'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 5, + "character": 76 + }, + "end": { + "line": 5, + "character": 76 + } + }, + "newText": " returns boolean|int" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr3.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr3.json new file mode 100644 index 000000000000..b50259462922 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr3.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 11, + "character": 72 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'module1:TestRecord1|int'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 9, + "character": 76 + }, + "end": { + "line": 9, + "character": 76 + } + }, + "newText": " returns module1:TestRecord1|int" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr4.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr4.json new file mode 100644 index 000000000000..1e4a2b4bc402 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr4.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 11, + "character": 81 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'module1:TestRecord1|int'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 9, + "character": 76 + }, + "end": { + "line": 9, + "character": 76 + } + }, + "newText": " returns module1:TestRecord1|int" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr5.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr5.json new file mode 100644 index 000000000000..a8151ae1e05d --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr5.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 18, + "character": 18 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'string|boolean'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 17, + "character": 50 + }, + "end": { + "line": 17, + "character": 50 + } + }, + "newText": " returns string|boolean" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr6.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr6.json new file mode 100644 index 000000000000..00cbb777ecf6 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr6.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 18, + "character": 28 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'string|boolean'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 17, + "character": 50 + }, + "end": { + "line": 17, + "character": 50 + } + }, + "newText": " returns string|boolean" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr7.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr7.json new file mode 100644 index 000000000000..ea5c8625404e --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr7.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 23, + "character": 74 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'string|int|boolean|module1:TestRecord1|float'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 21, + "character": 91 + }, + "end": { + "line": 21, + "character": 91 + } + }, + "newText": " returns string|int|boolean|module1:TestRecord1|float" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr8.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr8.json new file mode 100644 index 000000000000..5916087bcef2 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForConditionalExpr8.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 23, + "character": 86 + }, + "source": "fixReturnTypeForConditionalExpr.bal", + "expected": [ + { + "title": "Change return type to 'string|int|boolean|module1:TestRecord1|float'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 21, + "character": 91 + }, + "end": { + "line": 21, + "character": 91 + } + }, + "newText": " returns string|int|boolean|module1:TestRecord1|float" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr1.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr1.json new file mode 100644 index 000000000000..317f8dfc1279 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr1.json @@ -0,0 +1,69 @@ +{ + "position": { + "line": 29, + "character": 11 + }, + "source": "fixReturnTypeForQueryExpr.bal", + "expected": [ + { + "title": "Change return type to 'map[]'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 28, + "character": 32 + }, + "end": { + "line": 28, + "character": 32 + } + }, + "newText": " returns map[]" + } + ], + "resolvable": false + }, + { + "title": "Change return type to 'record {|string name; float gpa;|}[]'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 28, + "character": 32 + }, + "end": { + "line": 28, + "character": 32 + } + }, + "newText": " returns record {|string name; float gpa;|}[]" + } + ], + "resolvable": false + }, + { + "title": "Change return type to 'json[]'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 28, + "character": 32 + }, + "end": { + "line": 28, + "character": 32 + } + }, + "newText": " returns json[]" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr2.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr2.json new file mode 100644 index 000000000000..ebc954fefb84 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr2.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 36, + "character": 24 + }, + "source": "fixReturnTypeForQueryExpr.bal", + "expected": [ + { + "title": "Change return type to 'stream'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 34, + "character": 38 + }, + "end": { + "line": 34, + "character": 38 + } + }, + "newText": " returns stream" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr3.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr3.json new file mode 100644 index 000000000000..1a967ad049da --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr3.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 42, + "character": 12 + }, + "source": "fixReturnTypeForQueryExpr.bal", + "expected": [ + { + "title": "Change return type to '(int?)[]'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 40, + "character": 35 + }, + "end": { + "line": 40, + "character": 35 + } + }, + "newText": " returns (int?)[]" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr4.json b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr4.json new file mode 100644 index 000000000000..094ffcd0fa60 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/config/fixReturnTypeForQueryExpr4.json @@ -0,0 +1,29 @@ +{ + "position": { + "line": 49, + "character": 18 + }, + "source": "fixReturnTypeForQueryExpr.bal", + "expected": [ + { + "title": "Change return type to 'float'", + "kind": "quickfix", + "edits": [ + { + "range": { + "start": { + "line": 46, + "character": 35 + }, + "end": { + "line": 46, + "character": 35 + } + }, + "newText": " returns float" + } + ], + "resolvable": false + } + ] +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForConditionalExpr.bal b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForConditionalExpr.bal new file mode 100644 index 000000000000..0e3ef9079b05 --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForConditionalExpr.bal @@ -0,0 +1,25 @@ +import ballerina/module1; + +boolean moduleFlag1 = false; +boolean moduleFlag2 = true; + +function testNestedTernaryExpr2(boolean flag1, boolean flag2, boolean flag3) { + return flag1 == flag3 ? flag1 && moduleFlag2 : 0; +} + +function testNestedTernaryExpr3(boolean flag1, boolean flag2, boolean flag3) { + module1:TestRecord1 rec1 = {}; + return (flag1 == flag3 ? moduleFlag1 && flag2 : flag1 || flag3) ? rec1 : 0 + 32; +} + +string? moduleNullableStr = (); +int? moduleNullableInt = 1; + +function testNestedElvisExpr1(string? nullableStr) { + return nullableStr ?: false; +} + +function testNestedElvisExpr2(string? nullableStr, int? nullableInt, boolean? nullableBool) { + module1:TestRecord1? nullableRec = {}; + return moduleNullableStr ?: moduleNullableInt ?: nullableBool ?: nullableRec ?: 0.0; +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForQuery.bal b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForQuery.bal new file mode 100644 index 000000000000..5f862e6b5f0e --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForQuery.bal @@ -0,0 +1,51 @@ +type Person record {| + readonly int id; + string name; + int age?; + Person parent?; +|}; + +type Student record { + int id; + string fname; + string lname; + int age; + float gpa; +}; + +function getStudents() returns Student[] { + Student s3 = {id: 3, fname: "Amy", lname: "Melina", age: 30, gpa: 1.3}; + Student s1 = {id: 1, fname: "Jon", lname: "Doe", age: 21, gpa: 2.1}; + Student s2 = {id: 2, fname: "Jane", lname: "Doe", age: 25, gpa: 3.2}; + return [s1, s2, s3]; +} + +function getPeople() returns Person[] { + Person p1 = {id: 1, name: "Jon Doe"}; + Person p2 = {id: 2, name: "Jane Doe"}; + return [p1, p2]; +} + +function testQueryExprWithJoin() { + return from var st in getStudents() + join var {id, name} in getPeople() on st.id equals id + select {name: name, gpa: st.gpa}; +} + +function testQueryExprWithOnConflict() { + return table key(id) from var st in getStudents().toStream() + select {id: st.id, name: st.fname, age: st.age} + on conflict error("Conflicted Key", cKey = st.id); +} + +function testQueryExprWithGroupBy() { + return from var {name, age} in getPeople() + group by age + select age; +} + +function testQueryExprWithCollect() { + return from var {age, gpa} in getStudents() + let var ageScore = (50 - age) * gpa + collect sum(ageScore); +} diff --git a/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForQueryExpr.bal b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForQueryExpr.bal new file mode 100644 index 000000000000..5f862e6b5f0e --- /dev/null +++ b/language-server/modules/langserver-core/src/test/resources/codeaction/fix-return-type/source/fixReturnTypeForQueryExpr.bal @@ -0,0 +1,51 @@ +type Person record {| + readonly int id; + string name; + int age?; + Person parent?; +|}; + +type Student record { + int id; + string fname; + string lname; + int age; + float gpa; +}; + +function getStudents() returns Student[] { + Student s3 = {id: 3, fname: "Amy", lname: "Melina", age: 30, gpa: 1.3}; + Student s1 = {id: 1, fname: "Jon", lname: "Doe", age: 21, gpa: 2.1}; + Student s2 = {id: 2, fname: "Jane", lname: "Doe", age: 25, gpa: 3.2}; + return [s1, s2, s3]; +} + +function getPeople() returns Person[] { + Person p1 = {id: 1, name: "Jon Doe"}; + Person p2 = {id: 2, name: "Jane Doe"}; + return [p1, p2]; +} + +function testQueryExprWithJoin() { + return from var st in getStudents() + join var {id, name} in getPeople() on st.id equals id + select {name: name, gpa: st.gpa}; +} + +function testQueryExprWithOnConflict() { + return table key(id) from var st in getStudents().toStream() + select {id: st.id, name: st.fname, age: st.age} + on conflict error("Conflicted Key", cKey = st.id); +} + +function testQueryExprWithGroupBy() { + return from var {name, age} in getPeople() + group by age + select age; +} + +function testQueryExprWithCollect() { + return from var {age, gpa} in getStudents() + let var ageScore = (50 - age) * gpa + collect sum(ageScore); +} diff --git a/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_conditional_exprs_test.bal b/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_conditional_exprs_test.bal index d167328aad57..26d927fb74fa 100644 --- a/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_conditional_exprs_test.bal +++ b/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_conditional_exprs_test.bal @@ -56,4 +56,4 @@ function testNestedElvisExpr2(string? nullableStr, int? nullableInt, boolean? nu function testNestedElvisExpr3(string? nullableStr, int? nullableInt, boolean? nullableBool) { return moduleNullableStr ?: (nullableBool is boolean ? nullableBool || moduleFlag1 : nullableInt ?: "False"); -} \ No newline at end of file +} diff --git a/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_query_exprs_test.bal b/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_query_exprs_test.bal index 4e38c2130d23..6af6c601503d 100644 --- a/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_query_exprs_test.bal +++ b/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_query_exprs_test.bal @@ -90,6 +90,8 @@ function getPeople() returns Person[] { return [p1, p2]; } + + Student[] moduleStudents = getStudents(); Person[] modulePeople = getPeople();