package php.runtime.annotation; import php.runtime.common.HintType; import php.runtime.common.Modifier; import php.runtime.lang.IObject; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; public @interface Reflection { @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface UseJavaLikeNames {} @Retention(RetentionPolicy.RUNTIME) @Target({TYPE, METHOD, FIELD}) public @interface Ignore {} @Retention(RetentionPolicy.RUNTIME) @Target({METHOD}) public @interface Getter { String value() default ""; boolean hiddenInDebugInfo() default false; } @Retention(RetentionPolicy.RUNTIME) @Target({METHOD}) public @interface Setter { String value() default ""; } @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface BaseType {} @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface WrapInterface { Class<?>[] value(); boolean skipConflicts() default false; boolean wrapFields() default false; } @Retention(RetentionPolicy.RUNTIME) @Target({TYPE, METHOD, FIELD}) public @interface Final {} @Retention(RetentionPolicy.RUNTIME) @Target({TYPE, METHOD}) public @interface Abstract {} @Retention(RetentionPolicy.RUNTIME) @Target({TYPE, METHOD}) @Inherited public @interface Namespace { String value(); } @Retention(RetentionPolicy.RUNTIME) @Target({TYPE, METHOD}) public @interface Name { String value(); } @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface NotWrapper { } @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface Trait { } @Retention(RetentionPolicy.RUNTIME) @Target(TYPE) public @interface UseTraits { Class<? extends IObject>[] value(); } @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface NotRuntime { } @Retention(RetentionPolicy.RUNTIME) @Target({PARAMETER, METHOD}) public @interface Nullable { } @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({METHOD, TYPE}) public @interface Signature { boolean root() default false; Arg[] value() default {}; Arg result() default @Arg(type = HintType.ANY); } @Retention(RetentionPolicy.RUNTIME) @Target({FIELD, METHOD}) public @interface Property { String value() default ""; boolean hiddenInDebugInfo() default false; } @Retention(RetentionPolicy.RUNTIME) public @interface Arg { String value() default ""; Optional optional() default @Optional(exists = false); HintType type() default HintType.ANY; String typeClass() default ""; Class<? extends IObject> nativeType() default IObject.class; Class<? extends Enum> typeEnum() default Enum.class; Modifier modifier() default Modifier.PUBLIC; boolean reference() default false; boolean readOnly() default false; boolean nullable() default false; } @Retention(RetentionPolicy.RUNTIME) public @interface Optional { String value() default ""; HintType type() default HintType.ANY; boolean exists() default true; } @Retention(RetentionPolicy.RUNTIME) @Target({PARAMETER}) public @interface Reference {} }