package org.immutables.annotate;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;

/**
 * Meta-annotation used to inject/print annotation make the annotation instructiona
 */
@Documented
@java.lang.annotation.Target(ElementType.ANNOTATION_TYPE)
public @interface Annotate {
  /**
   * Used to specify whole source code for the annotation.
   * <p>
   * <em>Only one of {@link #code()} or {@link #type()} should be
   * specified, not both</em>
   */
  String code() default "";

  /**
   * Can specify whole annotation.
   * <p>
   * <em>Only one of {@link #code()} or {@link #type()} should be
   * specified, not both</em>
   */
  Class<?> type() default Void.class;

  /** Logical elements of generated code to which annotations can be applied to. */
  enum Where {
    FIELD,
    ACCESSOR,
    CONSTRUCTOR_PARAMETER,
    INITIALIZER,
    ELEMENT_INITIALIZER,
    BUILDER_TYPE,
    IMMUTABLE_TYPE
  }
}

@@ -136,72 +136,165 @@
 ion 
-used to inject/print annotation make the annotation instructiona
+that if detected on the annotation, will turn target annotation into special%0A * instruction to inject derived (described) annotation code into target places.
 %0A */
@@ -461,108 +461,405 @@
 ion.
-%0A   * %3Cp%3E%0A   * %3Cem%3EOnly one of %7B@link #code()%7D or %7B@link #type()%7D should be%0A   * specified, not both
+ Can specify whole annotation(s) code or%0A   * %3Cp%3E%0A   * %3Cem%3EIf code includes %7B@literal @%7D symbol at the beginning, %7B@link #type()%7D would be ignored, if%0A   * code does not includes annotation start symbol and %7B@link #type()%7D specified, then annotation%0A   * symbol and type name would be prepended to the %7B@link #code()%7D, so code essentially can be used%0A   * to override set of annotation attributes.
 %3C/em
@@ -906,34 +906,24 @@
 **%0A   * 
-Can s
+S
 pecify 
-whole 
 annotati
@@ -928,114 +928,250 @@
 tion
-.%0A   * %3Cp%3E%0A   * %3Cem%3EOnly one of %7B@link #code()%7D or %7B@link #type()%7D should be%0A   * specified, not both%3C/em%3E
+ type, this is an alternative to specifying %7B@link #code()%7D. All the%0A   * attributes from the annotated annotation (the one which is annotated by %7B@link Annotate%7D and%0A   * placed on abstract value type or abstract attribute.%0A   * @see #code()
 %0A   
@@ -1212,16 +1212,37 @@
 class;%0A%0A
+  Where%5B%5D target();%0A%0A
   /** Lo

annotate api docs slightly updated