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 e029c63930c6..6595093afd7a 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); 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..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 @@ -71,4 +71,13 @@ 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); + Assert.assertEquals(result.getErrorCount(), count); + } } 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..8567320b761c --- /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 LLC. (http://www.wso2.com). +// +// 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 +// +// 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 _ = {}; +}