package com.laytonsmith.annotations; import com.laytonsmith.abstraction.Implementation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * An abstraction enum marks an enum upon which there exists an abstraction connection. * At startup, a check is done to see if there are more (or less) enums in the runtime's real layer * vs the number that is defined for it. If so, a warning is issued, which should assist * in detecting a missing implementation mapping. * */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface abstractionenum { /** * Returns the Implementation type this is valid for * @return */ public Implementation.Type implementation(); /** * The class of the abstraction layer enum with which this convertor maps between. * For instance, MCAction.class * @return */ public Class<? extends Enum> forAbstractEnum(); /** * The class of the implementation layer enum with which this convertor maps between. * For instance, Action.class (in bukkit) * @return */ public Class<? extends Enum> forConcreteEnum(); }