public ComponentMetadata(SimpleUri uri, Class<T> type, ReflectFactory factory, CopyStrategyLibrary copyStrategies) throws NoSuchMethodException {
super(uri, type, factory, copyStrategies, Predicates.<Field>alwaysTrue());
replicated = type.getAnnotation(Replicate.class) != null;
blockLifecycleEventsRequired = type.getAnnotation(RequiresBlockLifecycleEvents.class) != null;
ForceBlockActive forceBlockActiveAnnotation = type.getAnnotation(ForceBlockActive.class);
if (forceBlockActiveAnnotation != null) {
forceBlockActive = true;
retainUnalteredOnBlockChange = forceBlockActiveAnnotation.retainUnalteredOnBlockChange();
}
for (ComponentFieldMetadata<T, ?> field : getFields()) {
if (field.isReplicated()) {
replicated = true;
if (field.getReplicationInfo().value().isReplicateFromOwner()) {
replicatedFromOwner = true;
}
}
if (field.isOwnedReference()) {
referenceOwner = true;
}
}
annotations = Lists.newArrayList(type.getAnnotations());
}