private void checkAllowedOlderTypes( DataSchema.Type olderType, DataSchema.Type newerType, DataSchema.Type... allowedOlderTypes) { if (_options.isAllowPromotions()) { if (olderType != newerType) { boolean allowed = false; for (DataSchema.Type type : allowedOlderTypes) { if (type == olderType) { allowed = true; break; } } if (allowed) { appendMessage( CompatibilityMessage.Impact.VALUES_MAY_BE_TRUNCATED_OR_OVERFLOW, "numeric type promoted from %s to %s", olderType.toString().toLowerCase(), newerType.toString().toLowerCase()); } else { appendTypeChangedMessage(olderType, newerType); } } } else { isSameType(olderType, newerType); } }
private void checkName(NamedDataSchema older, NamedDataSchema newer) { if (_options.isCheckNames() && older.getFullName().equals(newer.getFullName()) == false) { appendMessage( CompatibilityMessage.Impact.BREAKS_NEW_AND_OLD_READERS, "name changed from %s to %s", older.getFullName(), newer.getFullName()); } }
private void check(DataSchema older, DataSchema newer) { Checked toCheck = new Checked(older, newer); if (_checked.contains(toCheck)) { return; } _checked.add(toCheck); if (older == newer) { return; } int pathCount = 1; if (_options.getMode() == CompatibilityOptions.Mode.DATA) { older = older.getDereferencedDataSchema(); while (newer.getType() == DataSchema.Type.TYPEREF) { TyperefDataSchema typerefDataSchema = ((TyperefDataSchema) newer); _path.addLast(typerefDataSchema.getFullName()); _path.addLast(DataSchemaConstants.REF_KEY); pathCount++; newer = typerefDataSchema.getRef(); } } if (newer.getType() == DataSchema.Type.TYPEREF) { _path.addLast(((TyperefDataSchema) newer).getFullName()); } else { _path.addLast(newer.getUnionMemberKey()); } switch (newer.getType()) { case TYPEREF: if (isSameType(older, newer)) checkTyperef((TyperefDataSchema) older, (TyperefDataSchema) newer); break; case RECORD: if (isSameType(older, newer)) checkRecord((RecordDataSchema) older, (RecordDataSchema) newer); break; case ARRAY: if (isSameType(older, newer)) checkArray((ArrayDataSchema) older, (ArrayDataSchema) newer); break; case MAP: if (isSameType(older, newer)) checkMap((MapDataSchema) older, (MapDataSchema) newer); break; case ENUM: if (isSameType(older, newer)) checkEnum((EnumDataSchema) older, (EnumDataSchema) newer); break; case FIXED: if (isSameType(older, newer)) checkFixed((FixedDataSchema) older, (FixedDataSchema) newer); break; case UNION: if (isSameType(older, newer)) checkUnion((UnionDataSchema) older, (UnionDataSchema) newer); break; default: if (newer instanceof PrimitiveDataSchema) checkPrimitive(older, newer); else throw new IllegalStateException( "Unknown schema type " + newer.getType() + ", checking old schema " + older + ", new schema " + newer); break; } for (; pathCount > 0; pathCount--) { _path.removeLast(); } return; }