import org.opendaylight.mdsal.binding.javav2.dom.codec.generator.impl.TreeNodeSerializerPrototype;
import org.opendaylight.mdsal.binding.javav2.dom.codec.generator.spi.source.AbstractTreeNodeSerializerSource;
import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.serializer.AugmentableDispatchSerializer;
-import org.opendaylight.mdsal.binding.javav2.generator.impl.util.BindingRuntimeContext;
-import org.opendaylight.mdsal.binding.javav2.generator.impl.util.javassist.JavassistUtils;
import org.opendaylight.mdsal.binding.javav2.generator.util.Types;
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
+import org.opendaylight.mdsal.binding.javav2.runtime.context.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.javav2.runtime.javassist.JavassistUtils;
+import org.opendaylight.mdsal.binding.javav2.runtime.reflection.BindingReflections;
import org.opendaylight.mdsal.binding.javav2.spec.base.Instantiable;
import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingStreamEventWriter;
import org.opendaylight.mdsal.binding.javav2.spec.runtime.TreeNodeSerializerImplementation;
import org.opendaylight.mdsal.binding.javav2.spec.runtime.TreeNodeSerializerRegistry;
-import org.opendaylight.mdsal.binding.javav2.spec.util.BindingReflections;
import org.opendaylight.yangtools.util.ClassLoaderUtils;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
private static final Logger LOG = LoggerFactory.getLogger(AbstractStreamWriterGenerator.class);
public static final String SERIALIZE_METHOD_NAME = "serialize";
- protected static final AugmentableDispatchSerializer AUGMENTABLE = new AugmentableDispatchSerializer();
+ public static final AugmentableDispatchSerializer AUGMENTABLE = new AugmentableDispatchSerializer();
private static final Field FIELD_MODIFIERS;
private final LoadingCache<Class<?>, TreeNodeSerializerImplementation> implementations;
* fix the static declared fields to final once we initialize them. If
* we cannot get access, that's fine, too.
*/
- Field f = null;
+ Field field = null;
try {
- f = Field.class.getDeclaredField("modifiers");
- f.setAccessible(true);
+ field = Field.class.getDeclaredField("modifiers");
+ field.setAccessible(true);
} catch (NoSuchFieldException | SecurityException e) {
LOG.warn("Could not get Field modifiers field, serializers run at decreased efficiency", e);
}
- FIELD_MODIFIERS = f;
+ FIELD_MODIFIERS = field;
}
protected AbstractStreamWriterGenerator(final JavassistUtils utils) {
- super();
this.javassist = Preconditions.checkNotNull(utils, "JavassistUtils instance is required.");
this.serializeArguments = new CtClass[] { javassist.asCtClass(TreeNodeSerializerRegistry.class),
javassist.asCtClass(TreeNode.class), javassist.asCtClass(BindingStreamEventWriter.class), };
try {
product = javassist.instantiatePrototype(TreeNodeSerializerPrototype.class.getName(), serializerName,
- cls -> {
- // Generate any static fields
- for (final StaticBindingProperty def : source.getStaticConstants()) {
- final CtField field = new CtField(javassist.asCtClass(def.getType()), def.getName(), cls);
- field.setModifiers(Modifier.PRIVATE + Modifier.STATIC);
- cls.addField(field);
- }
-
- // Replace serialize() -- may reference static fields
- final CtMethod serializeTo = cls.getDeclaredMethod(SERIALIZE_METHOD_NAME, serializeArguments);
- serializeTo.setBody(body);
-
- // The prototype is not visible, so we need to take care
- // of that
- cls.setModifiers(Modifier.setPublic(cls.getModifiers()));
- });
+ cls -> {
+ // Generate any static fields
+ for (final StaticBindingProperty def : source.getStaticConstants()) {
+ final CtField field = new CtField(javassist.asCtClass(def.getType()), def.getName(), cls);
+ field.setModifiers(Modifier.PRIVATE + Modifier.STATIC);
+ cls.addField(field);
+ }
+
+ // Replace serialize() -- may reference static fields
+ final CtMethod serializeTo = cls.getDeclaredMethod(SERIALIZE_METHOD_NAME, serializeArguments);
+ serializeTo.setBody(body);
+
+ // The prototype is not visible, so we need to take care
+ // of that
+ cls.setModifiers(Modifier.setPublic(cls.getModifiers()));
+ });
} catch (final NotFoundException e) {
LOG.error("Failed to instatiate serializer {}", source, e);
throw new LinkageError("Unexpected instantation problem: serializer prototype not found", e);
* Generates serializer source code for supplied container node, which will
* read supplied binding type and invoke proper methods on supplied
* {@link BindingStreamEventWriter}.
+ *
* <p>
* Implementation is required to recursively invoke events for all reachable
* binding objects.
* Generates serializer source for supplied case node, which will read
* supplied binding type and invoke proper methods on supplied
* {@link BindingStreamEventWriter}.
+ *
* <p>
* Implementation is required to recursively invoke events for all reachable
* binding objects.
* Generates serializer source for supplied list node, which will read
* supplied binding type and invoke proper methods on supplied
* {@link BindingStreamEventWriter}.
+ *
* <p>
* Implementation is required to recursively invoke events for all reachable
* binding objects.
* @param node - schema of list
* @return source for list node writer
*/
- protected abstract AbstractTreeNodeSerializerSource generateMapEntrySerializer(GeneratedType type, ListSchemaNode node);
+ protected abstract AbstractTreeNodeSerializerSource generateMapEntrySerializer(GeneratedType type,
+ ListSchemaNode node);
/**
* Generates serializer source for supplied list node, which will read
* supplied binding type and invoke proper methods on supplied
* {@link BindingStreamEventWriter}.
+ *
* <p>
* Implementation is required to recursively invoke events for all reachable
* binding objects.
* Generates serializer source for supplied augmentation node, which will
* read supplied binding type and invoke proper methods on supplied
* {@link BindingStreamEventWriter}.
+ *
* <p>
* Implementation is required to recursively invoke events for all reachable
* binding objects.
* @param schema - schema of augmentation
* @return source for augmentation node writer
*/
- protected abstract AbstractTreeNodeSerializerSource generateSerializer(GeneratedType type, AugmentationSchema schema);
+ protected abstract AbstractTreeNodeSerializerSource generateSerializer(GeneratedType type,
+ AugmentationSchema schema);
/**
* Generates serializer source for notification node, which will read
* supplied binding type and invoke proper methods on supplied
* {@link BindingStreamEventWriter}.
+ *
* <p>
* Implementation is required to recursively invoke events for all reachable
* binding objects.