/** Parses a {@code RuntimeInvisibleAnnotations} attribute. */
  private Attribute runtimeInvisibleAnnotations(
      DirectClassFile cf, int offset, int length, ParseObserver observer) {
    if (length < 2) {
      throwSeverelyTruncated();
    }

    AnnotationParser ap = new AnnotationParser(cf, offset, length, observer);
    Annotations annotations = ap.parseAnnotationAttribute(AnnotationVisibility.BUILD);

    return new AttRuntimeInvisibleAnnotations(annotations, length);
  }
  /** Parses a {@code RuntimeVisibleParameterAnnotations} attribute. */
  private Attribute runtimeVisibleParameterAnnotations(
      DirectClassFile cf, int offset, int length, ParseObserver observer) {
    if (length < 2) {
      throwSeverelyTruncated();
    }

    AnnotationParser ap = new AnnotationParser(cf, offset, length, observer);
    AnnotationsList list = ap.parseParameterAttribute(AnnotationVisibility.RUNTIME);

    return new AttRuntimeVisibleParameterAnnotations(list, length);
  }
  /** Parses an {@code AnnotationDefault} attribute. */
  private Attribute annotationDefault(
      DirectClassFile cf, int offset, int length, ParseObserver observer) {
    if (length < 2) {
      throwSeverelyTruncated();
    }

    AnnotationParser ap = new AnnotationParser(cf, offset, length, observer);
    Constant cst = ap.parseValueAttribute();

    return new AttAnnotationDefault(cst, length);
  }