question: @ Override public boolean isSubtype ( AnnotationMirror rhs , AnnotationMirror lhs ) { if ( AnnotationUtils . areSameByClass ( lhs , UnknownVal . class ) || AnnotationUtils . areSameByClass ( rhs , BottomVal . class ) ) { return true ; } else if ( AnnotationUtils . areSameByClass ( rhs , UnknownVal . class ) || AnnotationUtils . areSameByClass ( lhs , BottomVal . class ) ) { return false ; } else if ( AnnotationUtils . areSameIgnoringValues ( lhs , rhs ) ) { List < Object > lhsValues = AnnotationUtils . getElementValueArray ( lhs , "value" , Object . class , true ) ; List < Object > rhsValues = AnnotationUtils . getElementValueArray ( rhs , "value" , Object . class , true ) ; return lhsValues . containsAll ( rhsValues ) ; } else if ( AnnotationUtils . areSameByClass ( lhs , DoubleVal . class ) && AnnotationUtils . areSameByClass ( rhs , IntVal . class ) ) { List < Long > rhsValues ; rhsValues = AnnotationUtils . getElementValueArray ( rhs , "value" , Long . class , true ) ; List < Double > lhsValues = AnnotationUtils . getElementValueArray ( lhs , "value" , Double . class , true ) ; boolean same = false ; for ( Long rhsLong : rhsValues ) { for ( Double lhsDbl : lhsValues ) { if ( lhsDbl . doubleValue ( ) == rhsLong . doubleValue ( ) ) { same = true ; break ; } } if ( ! same ) { return false ; } } return same ; } return false ; }
target:  Computes subtyping as per the subtyping in the qualifier hierarchy structure unless both annotations are Value. In this case, rhs is a subtype of lhs iff lhs contains at least every element of rhs