@Override protected <C extends T> ClassMetadata<C, ?> createMetadata(Class<C> type, ReflectFactory factory, CopyStrategyLibrary copyStrategies, SimpleUri uri) { try { return new DefaultClassMetadata<>(uri, type, factory, copyStrategies); } catch (NoSuchMethodException e) { logger.error("Unable to register class {}: Default Constructor Required", type.getSimpleName(), e); return null; } } }
@Test public void testInheritsFields() throws Exception { DefaultClassMetadata<Inheriting> metadata = new DefaultClassMetadata<>(new SimpleUri(), Inheriting.class, factory, copyStrategyLibrary); assertNotNull(metadata); assertEquals(2, metadata.getFieldCount()); assertNotNull(metadata.getField("name")); assertNotNull(metadata.getField("value")); assertNotNull(metadata.newInstance()); }
@Test public void testTrivialMetadata() throws Exception { DefaultClassMetadata<Trivial> metadata = new DefaultClassMetadata<>(new SimpleUri(), Trivial.class, factory, copyStrategyLibrary); assertNotNull(metadata); assertEquals(0, metadata.getFieldCount()); assertTrue(metadata.isConstructable()); }
@Test public void testDetectsLackOfDefaultConstructor() throws Exception { DefaultClassMetadata<NoDefaultConstructor> metadata = new DefaultClassMetadata<>(new SimpleUri(), NoDefaultConstructor.class, factory, copyStrategyLibrary); assertFalse(metadata.isConstructable()); }
@Test public void testPrivateField() throws Exception { DefaultClassMetadata<PrivateField> metadata = new DefaultClassMetadata<>(new SimpleUri(), PrivateField.class, factory, copyStrategyLibrary); assertNotNull(metadata); assertEquals(1, metadata.getFieldCount()); FieldMetadata fieldMetadata = metadata.getField("name"); assertNotNull(fieldMetadata); assertEquals(String.class, fieldMetadata.getType()); assertEquals("name", fieldMetadata.getName()); assertNotNull(metadata.newInstance()); }
public List<Property<?, ?>> createProperties(Object target) { List<Property<?, ?>> properties = Lists.newArrayList(); try { Class<?> type = target.getClass(); ReflectFactory reflectFactory = CoreRegistry.get(ReflectFactory.class); CopyStrategyLibrary copyStrategies = new CopyStrategyLibrary(reflectFactory); ClassMetadata<?, ?> classMetadata = new DefaultClassMetadata<>(new SimpleUri(), type, reflectFactory, copyStrategies); for (Field field : getAllFields(type)) { Annotation annotation = getFactory(field); if (annotation != null) { FieldMetadata<Object, ?> fieldMetadata = (FieldMetadata<Object, ?>) classMetadata.getField(field.getName()); PropertyFactory factory = factories.get(annotation.annotationType()); Property property = factory.create(target, fieldMetadata, field.getName(), annotation); properties.add(property); } } } catch (NoSuchMethodException e) { throw new RuntimeException(e); } return properties; }
public ReflectionProvider(T target, Context context) { try { ReflectFactory reflectFactory = context.get(ReflectFactory.class); CopyStrategyLibrary copyStrategies = context.get(CopyStrategyLibrary.class); ClassMetadata<T, ?> classMetadata = new DefaultClassMetadata<>(new SimpleUri(), (Class<T>) target.getClass(), reflectFactory, copyStrategies); for (Field field : getAllFields(target.getClass(), and(withAnnotation(Range.class), or(withType(Float.TYPE), withType(Float.class))))) { Range range = field.getAnnotation(Range.class); FieldMetadata<T, Float> fieldMetadata = (FieldMetadata<T, Float>) classMetadata.getField(field.getName()); Property property = new FloatProperty(target, fieldMetadata, range.min(), range.max()); properties.add(property); } } catch (NoSuchMethodException e) { logger.error("Cannot provide provide inspection for {}, does not have a default constructor", target.getClass()); } }
ClassMetadata<?, ?> classMetadata = new DefaultClassMetadata<>(new SimpleUri(), typeClass, reflectFactory, this); return new MappedContainerCopyStrategy<>(classMetadata); } catch (NoSuchMethodException e) {
&& !Modifier.isStatic(typeClass.getModifiers()))) { try { ClassMetadata<?, ?> metadata = new DefaultClassMetadata<>(new SimpleUri(), typeClass, reflectFactory, copyStrategies); MappedContainerTypeHandler<?> mappedHandler = new MappedContainerTypeHandler(typeClass, getFieldHandlerMap(metadata)); typeHandlers.put(typeClass, mappedHandler);