@Override public boolean validates(@NonNull MergingReport.Builder mergingReport, @NonNull XmlAttribute attribute, @NonNull String value) { boolean valid = super.validates(mergingReport, attribute, value); if (valid) { try { Long decodedValue = Long.decode(value); valid = decodedValue >= mMinimumValue && decodedValue < 0xFFFFFFFFL; } catch(NumberFormatException e) { valid = false; } if (!valid) { attribute.addMessage(mergingReport, MergingReport.Record.Severity.ERROR, String.format( "Attribute %1$s at %2$s is not a valid hexadecimal value," + " minimum is 0x%3$08X, maximum is 0x%4$08X, found %5$s", attribute.getId(), attribute.printPosition(), mMinimumValue, Integer.MAX_VALUE, value )); } return valid; } return false; } }