mirror of
https://github.com/corda/corda.git
synced 2024-12-29 09:18:58 +00:00
9bb3d6b972
git-subtree-dir: sgx-jvm/avian git-subtree-mainline:f978eab8d1
git-subtree-split:09e4fe60d0
90 lines
2.9 KiB
Java
90 lines
2.9 KiB
Java
import java.lang.reflect.InvocationHandler;
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.Proxy;
|
|
|
|
import avian.testing.annotations.Color;
|
|
import avian.testing.annotations.Test;
|
|
import avian.testing.annotations.TestComplex;
|
|
import avian.testing.annotations.TestEnum;
|
|
import avian.testing.annotations.TestInteger;
|
|
|
|
public class Annotations {
|
|
private static void expect(boolean v) {
|
|
if (! v) throw new RuntimeException();
|
|
}
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
Method m = Annotations.class.getMethod("foo");
|
|
|
|
expect(m.isAnnotationPresent(Test.class));
|
|
|
|
expect(((Test) m.getAnnotation(Test.class)).value().equals("couscous"));
|
|
|
|
expect(((TestEnum) m.getAnnotation(TestEnum.class)).value()
|
|
.equals(Color.Red));
|
|
|
|
expect(((TestInteger) m.getAnnotation(TestInteger.class)).value() == 42);
|
|
|
|
expect(m.getAnnotations().length == 3);
|
|
|
|
Method noAnno = Annotations.class.getMethod("noAnnotation");
|
|
expect(noAnno.getAnnotation(Test.class) == null);
|
|
expect(noAnno.getAnnotations().length == 0);
|
|
testProxyDefaultValue();
|
|
testComplexAnnotation();
|
|
}
|
|
|
|
@Test("couscous")
|
|
@TestEnum(Color.Red)
|
|
@TestInteger(42)
|
|
public static void foo() {
|
|
|
|
}
|
|
|
|
public static void noAnnotation() {
|
|
|
|
}
|
|
|
|
private static void testProxyDefaultValue() {
|
|
ClassLoader loader = Annotations.class.getClassLoader();
|
|
InvocationHandler handler = new InvocationHandler() {
|
|
public Object invoke(Object proxy, Method method, Object... args) {
|
|
return method.getDefaultValue();
|
|
}
|
|
};
|
|
Test test = (Test)
|
|
Proxy.newProxyInstance(loader, new Class[] { Test.class }, handler);
|
|
expect("Hello, world!".equals(test.value()));
|
|
}
|
|
|
|
private interface World {
|
|
@TestComplex(arrayValue = { @Test, @Test(value = "7/9") },
|
|
stringValue = "adjunct element", charValue = '7', doubleValue = 0.7778,
|
|
classValue = TestInteger.class)
|
|
int hello();
|
|
}
|
|
|
|
private static void testComplexAnnotation(TestComplex annotation)
|
|
throws Exception
|
|
{
|
|
expect(2 == annotation.arrayValue().length);
|
|
expect("Hello, world!".equals(annotation.arrayValue()[0].value()));
|
|
expect("7/9".equals(annotation.arrayValue()[1].value()));
|
|
expect("adjunct element".equals(annotation.stringValue()));
|
|
expect('7' == annotation.charValue());
|
|
expect(0.7778 == annotation.doubleValue());
|
|
expect(TestInteger.class == annotation.classValue());
|
|
}
|
|
|
|
public static void testComplexAnnotation() throws Exception {
|
|
ClassLoader loader = Annotations.class.getClassLoader();
|
|
TestComplex annotation = (TestComplex)
|
|
World.class.getMethod("hello").getAnnotation(TestComplex.class);
|
|
testComplexAnnotation(annotation);
|
|
Class clazz = Proxy.getProxyClass(loader, new Class[] { World.class });
|
|
annotation = (TestComplex)
|
|
clazz.getMethod("hello").getAnnotation(TestComplex.class);
|
|
expect(annotation == null);
|
|
}
|
|
}
|