public boolean satisfies(final AnnotationUsage annotationUsage) {
      if (!myType.equals(annotationUsage.myType)) {
        return false;
      }

      boolean argumentsSatisfy = false;

      if (myUsedArguments != null) {
        IntSet arguments = new IntOpenHashSet(myUsedArguments);
        arguments.removeAll(annotationUsage.myUsedArguments);  // need to find annotation usages that do not mention arguments this annotation uses
        argumentsSatisfy = !arguments.isEmpty();
      }

      boolean targetsSatisfy = false;

      if (myUsedTargets != null) {
        final Collection<ElemType> targets = EnumSet.copyOf(myUsedTargets);
        targets.retainAll(annotationUsage.myUsedTargets);
        targetsSatisfy = !targets.isEmpty();
      }

      return argumentsSatisfy || targetsSatisfy;
    }
public boolean satisfies(final AnnotationUsage annotationUsage)