Skip to content

Commit

Permalink
Merge pull request #42564 from chiranSachintha/fix-42524
Browse files Browse the repository at this point in the history
[master] Fix issue with intersection of readonly and record type with defaults
  • Loading branch information
MaryamZi authored Apr 17, 2024
2 parents b2c6457 + fb36655 commit 09ea955
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2738,7 +2738,7 @@ private boolean validateSpecifiedFields(BLangRecordLiteral mappingConstructor, B

private void determineDefaultValues(Map<String, BType> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
org = "testorg"
name = "records_negative"
version = "1.0.0"
Original file line number Diff line number Diff line change
@@ -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 _ = {};
}

0 comments on commit 09ea955

Please sign in to comment.