TypeReflector { public <A extends Annotation> A getAnnotation(Class<A> annotationClass) { return getTypeClass().getAnnotation(annotationClass); } TypeReflector(Class<T> clazz);  TypeReflector(JavaType javaType); @Override boolean equals(Object o); @Override int hashCode(); JavaType getJavaType(); @SuppressWarnings("unchecked") Class<T> getTypeClass(); T instantiate(); List<PropertyDescriptor> getPropertyDescriptors(); Map<String, PropertyDescriptor> getPropertyDescriptorIndex(); Object get(T bean, String name); void set(T bean, String name, Object value); A getAnnotation(Class<A> annotationClass); A getAnnotation(PropertyDescriptor propertyDescriptor, Class<A> annotationClass); A getAnnotation(String propertyName, Class<A> annotationClass); Class reifyPropertyType(String property); Class reifyPropertyType(PropertyDescriptor property);  }
@Test public void testGetAnnotation() { assertEquals("Test", new TypeReflector<>(TestClass.class).getAnnotation(Intent.class).value()); }
@Test public void testGetPropertyAnnotation() { assertEquals("Test", new TypeReflector<>(TestClass.class).getAnnotation("value", PropertyAnnotation.class).value()); }
@Test(expected = IllegalArgumentException.class) public void testGetMissingPropertyAnnotation() { new TypeReflector<>(TestClass.class).getAnnotation("missing", PropertyAnnotation.class); }