private void appendFields()

in flink-kubernetes-operator/src/main/java/org/apache/flink/kubernetes/operator/reconciler/diff/ReflectiveDiffBuilder.java [76:126]


    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);
                        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(),
                                readField(field, before, true),
                                readField(field, after, true),
                                UPGRADE);
                    }

                } catch (final IllegalAccessException ex) {
                    throw new RuntimeException(
                            "Unexpected IllegalAccessException: " + ex.getMessage(), ex);
                }
            }
        }
    }