package xapi.gwtc.api;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.google.gwt.reflect.client.strategy.GwtRetention;
import com.google.gwt.reflect.client.strategy.ReflectionStrategy;
import com.google.gwt.reflect.shared.GwtReflect;
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface DefaultValue {
@ReflectionStrategy(
methodRetention=@GwtRetention(annotationRetention=ReflectionStrategy.ALL_MEMBERS),
keepCodeSource=false,
keepPackage=false
)
static class Defaults {
@SuppressWarnings("unused")
private static void defaults(
@DefaultValue("'0'") char chars,
@DefaultValue("0") int ints,
@DefaultValue("0L") long longs,
@DefaultValue("0f") float floats,
@DefaultValue(".0") double doubles,
@DefaultValue("false") boolean booleans,
@DefaultValue("\"\"") String strings,
@DefaultValue Object objects
){}
public static final DefaultValue DEFAULT_CHAR;
public static final DefaultValue DEFAULT_INT;
public static final DefaultValue DEFAULT_LONG;
public static final DefaultValue DEFAULT_FLOAT;
public static final DefaultValue DEFAULT_DOUBLE;
public static final DefaultValue DEFAULT_BOOLEAN;
public static final DefaultValue DEFAULT_STRING;
public static final DefaultValue DEFAULT_OBJECT;
static {
Annotation[][] annos = GwtReflect.getDeclaredMethod(Defaults.class,"defaults",
char.class, int.class, long.class, float.class,
double.class, boolean.class, String.class, Object.class)
.getParameterAnnotations();
DEFAULT_CHAR = (DefaultValue)annos[0][0];
DEFAULT_INT = (DefaultValue)annos[1][0];
DEFAULT_LONG = (DefaultValue)annos[2][0];
DEFAULT_FLOAT = (DefaultValue)annos[3][0];
DEFAULT_DOUBLE = (DefaultValue)annos[4][0];
DEFAULT_BOOLEAN = (DefaultValue)annos[5][0];
DEFAULT_STRING = (DefaultValue)annos[6][0];
DEFAULT_OBJECT = (DefaultValue)annos[7][0];
}
}
String value() default "null";
}