package com.enderio.core.common.transform;

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

/**
 * Marks a class which should be "mixed-in" to another at runtime. This can be
 * used for modular implementation where it is required that a core class
 * implements an API interface.
 * <p>
 * All methods except constructors and abstracts will be added to the target
 * class, as well as any implemented interfaces (but <em>not</em> superclasses).
 * <p>
 * There are no stipulations on a type marked with this interface, other than
 * that it <em>cannot</em> transitively classload the target class.
 * <p>
 * In simple terms, this means that the annotated class cannot reference the
 * target class in any way. If you need to extend the target class, have it
 * extend a dummy class which implements the same interface as the target class
 * instead.
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SimpleMixin {
  
  Class<?> value();
  
  String[] dependencies() default {};

}

@@ -118,16 +118,56 @@
 ntType;%0A
+import java.lang.annotation.Repeatable;%0A
 import j
@@ -279,16 +279,87 @@
 arget;%0A%0A
+import com.enderio.core.common.transform.SimpleMixin.SimpleMixinList;%0A%0A
 /**%0A * M
@@ -1175,16 +1175,51 @@
 UNTIME)%0A
+@Repeatable(SimpleMixinList.class)%0A
 @Documen
@@ -1317,12 +1317,174 @@
 ault %7B%7D;
+%0A  %0A  @Target(ElementType.TYPE)%0A  @Retention(RetentionPolicy.RUNTIME)%0A  @Documented%0A  public @interface SimpleMixinList %7B%0A    %0A    SimpleMixin%5B%5D value();%0A    %0A  %7D
 %0A%0A%7D%0A

Make SimpleMixin repeatable