private int getAnnotationValue()

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;
  }