/* An annotated type variable use differs from its declaration exactly in its annotations and in nothing else.
    Propagate writes to all annotated variants so the clones evolve along.
 */
 public TypeBinding setFirstBound(TypeBinding firstBound) {
   this.firstBound = firstBound;
   if ((this.tagBits & TagBits.HasAnnotatedVariants) != 0) {
     TypeBinding[] annotatedTypes = getDerivedTypesForDeferredInitialization();
     for (int i = 0, length = annotatedTypes == null ? 0 : annotatedTypes.length;
         i < length;
         i++) {
       TypeVariableBinding annotatedType = (TypeVariableBinding) annotatedTypes[i];
       if (annotatedType.firstBound == null) annotatedType.firstBound = firstBound;
     }
   }
   if (firstBound != null && firstBound.hasNullTypeAnnotations())
     this.tagBits |= TagBits.HasNullTypeAnnotation;
   return firstBound;
 }