in flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/ReflectiveDiffBuilder.java [80:129]
private void appendFields(final Class<?> clazz) {
for (final Field field : FieldUtils.getAllFields(clazz)) {
if (accept(field)) {
try {
var leftField = readField(field, before, true);
var rightField = readField(field, after, true);
if (field.isAnnotationPresent(SpecDiff.Config.class)
&& Map.class.isAssignableFrom(field.getType())) {
diffBuilder.append(
field.getName(),
configDiff(
field,
(leftField != null)
? (Map<String, String>) leftField
: new HashMap<>(),
(rightField != null)
? (Map<String, String>) rightField
: new HashMap<>()));
} else if (field.isAnnotationPresent(SpecDiff.class)) {
var annotation = field.getAnnotation(SpecDiff.class);
var modes = annotation.mode();
boolean modeApplies =
modes.length == 0 || Arrays.asList(modes).contains(deploymentMode);
if (rightField != null || !annotation.onNullIgnore()) {
diffBuilder.append(
field.getName(),
leftField,
rightField,
modeApplies ? annotation.value() : UPGRADE);
}
} else if (Diffable.class.isAssignableFrom(field.getType())
&& ObjectUtils.allNotNull(leftField, rightField)) {
diffBuilder.append(
field.getName(),
new ReflectiveDiffBuilder<T>(
deploymentMode, (T) leftField, (T) rightField)
.build());
} else {
diffBuilder.append(field.getName(), leftField, rightField, UPGRADE);
}
} catch (final IllegalAccessException ex) {
throw new RuntimeException(
"Unexpected IllegalAccessException: " + ex.getMessage(), ex);
}
}
}
}