package dyvil.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE_PARAMETER)
public @interface Reified
{}

@@ -20,16 +20,53 @@
 ation;%0A%0A
+import dyvilx.lang.model.type.Type;%0A%0A
 import j
@@ -219,16 +219,651 @@
 arget;%0A%0A
+/**%0A * Marks that a Class or Method Type Parameter is %3Cb%3Ereified%3C/b%3E. If a Method Parameter is annotated with%0A * this annotation, it receives an additional mandated parameter that holds a %7B@link Type%7D or %7B@link Class%7D instance%0A * representing the Type Argument. For classes, an additional field is generated that holds this instance. The%0A * %7B@link #erasure()%7D annotation parameter defines whether the full type or only the erasure is needed.%3Cp/%3E%0A * If the full generic type is reified, it is retrievable and usable using the %7B@code type(T)%7D operator. In both cases,%0A * the erasure is available using the %7B@code class(T)%7D operator.%0A */%0A
 @Retenti
@@ -885,13 +885,15 @@
 icy.
-CLASS
+RUNTIME
 )%0A@T
@@ -953,10 +953,470 @@
 eified%0A%7B
+%0A%09/**%0A%09 * Marks that only the erasure needs to be available at the declaration site. This improves performance in that no%0A%09 * %7B@link Type Type%7D instances need to be created at the call site. If this flag is set, the%0A%09 * mandated parameter will have the type %7B@link Class%7D. Otherwise, the mandated parameter type will have the type%0A%09 * %7B@link Type Type%7D.%0A%09 *%0A%09 * @return true, if only the erasure %7B@link Class%7D is needed.%0A%09 */%0A%09boolean erasure() default false;%0A
 %7D%0A

Update the @Reified annotation