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