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