in TransformCore/src/main/java/com/facebook/ads/injkit/benchmark/BenchmarkInjector.java [220:268]
private int getAnnotationValue(
ClassNode classNode, MethodNode methodNode, Model model, String property)
throws AnnotationProcessingException {
Map<String, Object> values =
model.methodClosureWithAnnotationFilterAndValue(
classNode.name,
methodNode.name,
methodNode.desc,
methodNode.access,
annotationClassDesc,
property);
if (values.isEmpty()) {
return defaultMetrics.get(property);
}
if (values.size() == 1) {
return (Integer) values.values().iterator().next();
}
// Try self class first.
if (values.containsKey(classNode.name)) {
return (Integer) values.get(classNode.name);
}
// Multiple classes. See if all values are equal.
Object prev = null;
for (Object v : values.values()) {
if (prev == null) {
prev = v;
} else {
if (!prev.equals(v)) {
throw new AnnotationProcessingException(
String.format(
Locale.US,
"Class %s, method %s%s (access %d) has multiple different "
+ "inherited values for property %s of annotation %s",
classNode.name,
methodNode.name,
methodNode.desc,
methodNode.access,
property,
annotationClassDesc));
}
}
}
return (Integer) prev;
}