From 1ebba7db6a7ebb69cc665c4f44e43de7e75620c7 Mon Sep 17 00:00:00 2001 From: chiranSachintha Date: Tue, 9 Apr 2024 20:23:56 +0530 Subject: [PATCH 1/3] Fix issue with intersection of readonly and record type with defaults --- .../ballerinalang/compiler/semantics/analyzer/TypeChecker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0c89d01d0684..ec82ede62caa 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 @@ -2738,7 +2738,7 @@ private boolean validateSpecifiedFields(BLangRecordLiteral mappingConstructor, B private void determineDefaultValues(Map typesOfDefaultValues, BRecordType mutableType, AnalyzerData data) { - if (mutableType.tsymbol == null || mutableType.tsymbol.pkgID == PackageID.DEFAULT) { + if (mutableType.tsymbol == null || mutableType.tsymbol.pkgID == data.env.enclPkg.packageID) { // TODO: Eliminate the need for this logic by addressing the issue identified in #41764. findDefaultValuesFromEnclosingPackage(data.env.enclPkg.typeDefinitions, mutableType, data, typesOfDefaultValues); From 69dcd8341af28a1807890ae49799122f7f6c4232 Mon Sep 17 00:00:00 2001 From: chiranSachintha Date: Tue, 9 Apr 2024 22:08:23 +0530 Subject: [PATCH 2/3] Add bala test --- .../test/bala/record/RecordInBalaTest.java | 8 +++++++ .../Ballerina.toml | 4 ++++ .../test_project_records_negative/records.bal | 23 +++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/Ballerina.toml create mode 100644 tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal diff --git a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java index e3b1298176fc..3c8cd5924223 100644 --- a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java +++ b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java @@ -71,4 +71,12 @@ public void testComplexCyclicRecordTypeResolution() { BRunUtil.invoke(typeResolution, "testCreatingComplexRecWithIncTypeFromBala"); BRunUtil.invoke(typeResolution, "testCreatingComplexRecWithIncTypeFromBalaWithCM"); } + + @Test + public void testIntersectionOfReadonlyAndRecordTypeWithDefaults() { + CompileResult result = BCompileUtil.compile("test-src/bala/test_projects/test_project_records_negative"); + int count = 0; + BAssertUtil.validateError(result, count, "missing non-defaultable required record field 'initialValues'", + 22, 25); + } } diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/Ballerina.toml b/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/Ballerina.toml new file mode 100644 index 000000000000..1e82dab101ef --- /dev/null +++ b/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/Ballerina.toml @@ -0,0 +1,4 @@ +[package] +org = "testorg" +name = "records_negative" +version = "1.0.0" diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal b/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal new file mode 100644 index 000000000000..3aa02a895eed --- /dev/null +++ b/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal @@ -0,0 +1,23 @@ +// Copyright (c) 2024 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +// +// WSO2 Inc. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +type Temp record {| + any[] initialValues = [10, 20, 30]; +|}; + +function value() { + Temp & readonly _ = {}; +} From fb36655f6ec1eb8a526152fb1a132e8b2ebeeb81 Mon Sep 17 00:00:00 2001 From: chiranSachintha Date: Wed, 10 Apr 2024 08:07:54 +0530 Subject: [PATCH 3/3] Fix review suggestion --- .../org/ballerinalang/test/bala/record/RecordInBalaTest.java | 3 ++- .../test_projects/test_project_records_negative/records.bal | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java index 3c8cd5924223..9c0e2b67af6b 100644 --- a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java +++ b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/bala/record/RecordInBalaTest.java @@ -76,7 +76,8 @@ public void testComplexCyclicRecordTypeResolution() { public void testIntersectionOfReadonlyAndRecordTypeWithDefaults() { CompileResult result = BCompileUtil.compile("test-src/bala/test_projects/test_project_records_negative"); int count = 0; - BAssertUtil.validateError(result, count, "missing non-defaultable required record field 'initialValues'", + BAssertUtil.validateError(result, count++, "missing non-defaultable required record field 'initialValues'", 22, 25); + Assert.assertEquals(result.getErrorCount(), count); } } diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal b/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal index 3aa02a895eed..8567320b761c 100644 --- a/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal +++ b/tests/jballerina-unit-test/src/test/resources/test-src/bala/test_projects/test_project_records_negative/records.bal @@ -1,6 +1,6 @@ -// Copyright (c) 2024 WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +// Copyright (c) 2024 WSO2 LLC. (http://www.wso2.com). // -// WSO2 Inc. licenses this file to you under the Apache License, +// WSO2 LLC. licenses this file to you under the Apache License, // Version 2.0 (the "License"); you may not use this file except // in compliance with the License. // You may obtain a copy of the License at