package org.bytedeco.javacpp.annotation; 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; import org.bytedeco.javacpp.Loader; import org.bytedeco.javacpp.tools.Builder; import org.bytedeco.javacpp.tools.Generator; import org.bytedeco.javacpp.tools.Parser; /** * Makes it possible to define more than one set of properties for each platform. * The effective set of properties are taken from all {@link Platform} values in * this annotation, but priority is given to values found later in the list, making * it possible to define a default set of properties as the first value of the array, * and specializing a smaller set of properties for each platform, subsequently. * <p> * A class with this annotation gets recognized as top-level enclosing class by * {@link Loader#getEnclosingClass(Class)}, with the same implications as with * the {@link Platform} annotation. * <p> * Additionally, it is possible to inherit properties from another class also * annotated with this annotation, and specialize further for the current class. * * @see Builder * @see Generator * @see Loader * @see Parser * * @author Samuel Audet */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface Properties { /** A list of classes from which to inherit properties. */ Class[] inherit() default {}; /** A list of platform names to be used as default for {@link #value()}. */ String[] names() default {}; /** A list of properties for different platforms. */ Platform[] value() default {}; /** The target Java source code file of the {@link Parser}. */ String target() default ""; /** An optional helper class the {@link Parser} should use as base of the target. Defaults to the class where this annotation was found. */ String helper() default ""; }