Skip to content

Commit

Permalink
Refactor optional field check
Browse files Browse the repository at this point in the history
  • Loading branch information
heshanpadmasiri committed Mar 20, 2024
1 parent 272284f commit fc6c5f8
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,6 @@
import java.util.Stack;
import java.util.TreeMap;
import java.util.stream.Collectors;

import javax.xml.XMLConstants;

import static io.ballerina.runtime.api.constants.RuntimeConstants.UNDERSCORE;
Expand All @@ -337,7 +336,7 @@
import static org.wso2.ballerinalang.compiler.desugar.ASTBuilderUtil.createVariable;
import static org.wso2.ballerinalang.compiler.desugar.ASTBuilderUtil.createVariableRef;
import static org.wso2.ballerinalang.compiler.util.CompilerUtils.getMajorVersion;
import static org.wso2.ballerinalang.compiler.util.CompilerUtils.isAssignmentToOptionalField;
import static org.wso2.ballerinalang.compiler.util.CompilerUtils.isOptionalFieldAccess;
import static org.wso2.ballerinalang.compiler.util.Names.GENERATED_INIT_SUFFIX;
import static org.wso2.ballerinalang.compiler.util.Names.GEN_VAR_PREFIX;
import static org.wso2.ballerinalang.compiler.util.Names.IGNORE;
Expand Down Expand Up @@ -2481,7 +2480,7 @@ public void visit(BLangAssignment assignNode) {
}

private static boolean shouldWidenExpressionTypeWithNil(BLangAssignment assignNode) {
if (!assignNode.expr.getBType().isNullable() || !isAssignmentToOptionalField(assignNode)) {
if (!assignNode.expr.getBType().isNullable() || !isOptionalFieldAccess(assignNode.varRef)) {
return false;
}
// If we are assigning to an optional field we have a field based access on a record
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@
import static org.ballerinalang.model.tree.NodeKind.RECORD_LITERAL_EXPR;
import static org.ballerinalang.model.tree.NodeKind.REG_EXP_CAPTURING_GROUP;
import static org.ballerinalang.model.tree.NodeKind.REG_EXP_CHARACTER_CLASS;
import static org.wso2.ballerinalang.compiler.util.CompilerUtils.isAssignmentToOptionalField;
import static org.wso2.ballerinalang.compiler.util.CompilerUtils.isOptionalFieldAccess;

/**
* @since 0.94
Expand Down Expand Up @@ -2322,7 +2322,7 @@ public void visit(BLangAssignment assignNode, AnalyzerData data) {

BLangExpression expr = assignNode.expr;
expr.usedForOptionalFieldValue =
data.expType != symTable.semanticError && isAssignmentToOptionalField(assignNode);
data.expType != symTable.semanticError && isOptionalFieldAccess(assignNode.varRef);
data.typeChecker.checkExpr(expr, data.env, data.expType, data.prevEnvs, data.commonAnalyzerData);

validateWorkerAnnAttachments(assignNode.expr, data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,8 @@
import org.wso2.ballerinalang.compiler.semantics.model.types.BRecordType;
import org.wso2.ballerinalang.compiler.semantics.model.types.BType;
import org.wso2.ballerinalang.compiler.tree.BLangFunction;
import org.wso2.ballerinalang.compiler.tree.BLangNode;
import org.wso2.ballerinalang.compiler.tree.expressions.BLangExpression;
import org.wso2.ballerinalang.compiler.tree.expressions.BLangFieldBasedAccess;
import org.wso2.ballerinalang.compiler.tree.statements.BLangAssignment;

import static org.wso2.ballerinalang.compiler.util.Constants.MAIN_FUNCTION_NAME;

Expand Down Expand Up @@ -77,12 +76,11 @@ public static String getPackageIDStringWithMajorVersion(PackageID packageID) {
return org + packageID.name + Names.VERSION_SEPARATOR.value + getMajorVersion(packageID.version.value);
}

public static boolean isAssignmentToOptionalField(BLangAssignment assignNode) {
BLangNode varRef = assignNode.varRef;
if (varRef.getKind() != NodeKind.FIELD_BASED_ACCESS_EXPR) {
public static boolean isOptionalFieldAccess(BLangExpression exprNode) {
if (exprNode.getKind() != NodeKind.FIELD_BASED_ACCESS_EXPR) {
return false;
}
BLangFieldBasedAccess fieldAccessNode = (BLangFieldBasedAccess) varRef;
BLangFieldBasedAccess fieldAccessNode = (BLangFieldBasedAccess) exprNode;
BType targetType = Types.getImpliedType(fieldAccessNode.expr.getBType());
if (targetType.tag != TypeTags.RECORD) {
return false;
Expand Down

0 comments on commit fc6c5f8

Please sign in to comment.