private static boolean checkFieldEquivalency(BRecordType lhsType, BRecordType rhsType, List<TypePair> unresolvedTypes) { Map<String, BField> rhsFields = rhsType.getFields(); Set<String> lhsFieldNames = lhsType.getFields().keySet(); for (BField lhsField : lhsType.getFields().values()) { BField rhsField = rhsFields.get(lhsField.fieldName); // If the LHS field is a required one, there has to be a corresponding required field in the RHS record. if (!Flags.isFlagOn(lhsField.flags, Flags.OPTIONAL) && (rhsField == null || Flags.isFlagOn(rhsField.flags, Flags.OPTIONAL))) { return false; } if (rhsField == null || !isAssignable(rhsField.fieldType, lhsField.fieldType, unresolvedTypes)) { return false; } } if (lhsType.sealed) { return lhsFieldNames.containsAll(rhsFields.keySet()); } return rhsFields.values().stream() .filter(field -> !lhsFieldNames.contains(field.fieldName)) .allMatch(field -> isAssignable(field.fieldType, lhsType.restFieldType, unresolvedTypes)); }
List<BType> fieldTypes = recordType.getFields().values().stream() .map(BField::getFieldType) .collect(Collectors.toList());
Map<String, BField> tFields = targetConstrainedType.getFields(); for (Map.Entry<String, BField> tFieldEntry : tFields.entrySet()) { String fieldName = tFieldEntry.getKey();
case TypeTags.RECORD_TYPE_TAG: BRecordType recType = (BRecordType) mapType; BField recField = recType.getFields().get(fieldName); BType recFieldType;
@Override public BPacket toBValue(BRecordType recType, BValueSerializer serializer) { String packagePath = recType.getPackagePath(); String typeName = recType.getName(); int flags = recType.flags; int restFieldSignatureCPIndex = recType.recordTypeInfo.getRestFieldSignatureCPIndex(); String restFieldTypeSignature = recType.recordTypeInfo.getRestFieldTypeSignature(); BPacket packet = BPacket.from(typeName(), serializer.toBValue(recType.getFields(), null)); packet.putString(PACKAGE_PATH, packagePath); packet.putString(TYPE_NAME, typeName); packet.put(FLAGS, new BInteger(flags)); packet.put(REST_FIELD_SIGNATURE_CP_INDEX, new BInteger(restFieldSignatureCPIndex)); packet.putString(REST_FIELD_TYPE_SIGNATURE, restFieldTypeSignature); packet.put(CLOSED, new BBoolean(recType.sealed)); packet.put(REST_FIELD_TYPE, serializer.toBValue(recType.restFieldType, null)); return packet; }
if (bType instanceof BRecordType) { bMapValue = BLangConnectorSPIUtil.createBStruct(programFile, bType.getPackagePath(), bType.getName()); for (BField messageField : ((BRecordType) bType).getFields().values()) { bMapFields.put(messageField.fieldName, messageField.fieldType);