import javassist.Modifier;
import javassist.NotFoundException;
import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
-import org.opendaylight.mdsal.binding.generator.util.ClassCustomizer;
import org.opendaylight.mdsal.binding.generator.util.JavassistUtils;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.model.util.Types;
* care of this before calling instantiatePrototype(), as that will call our customizer with the lock held,
* hence any code generation will end up being blocked on the javassist lock.
*/
- final String body = ClassLoaderUtils.withClassLoader(type.getClassLoader(), new Supplier<String>() {
- @Override
- public String get() {
- return source.getSerializerBody().toString();
- }
- }
- );
+ final String body = ClassLoaderUtils.withClassLoader(type.getClassLoader(),
+ (Supplier<String>) () -> source.getSerializerBody().toString());
try {
- product = javassist.instantiatePrototype(DataObjectSerializerPrototype.class.getName(), serializerName, new ClassCustomizer() {
- @Override
- public void customizeClass(final CtClass cls) throws CannotCompileException, NotFoundException {
- // Generate any static fields
- for (final StaticConstantDefinition 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()));
+ product = javassist.instantiatePrototype(DataObjectSerializerPrototype.class.getName(), serializerName, cls -> {
+ // Generate any static fields
+ for (final StaticConstantDefinition 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);
LOG.warn("Node {} will be ignored. AnyXml is not yet supported from binding aware code." +
"Binding Independent code can be used to serialize anyXml nodes.", schemaChild.getPath());
continue;
- } else {
- throw new IllegalStateException(
- String.format("Unable to find type for child node %s. Expected child nodes: %s",
- schemaChild.getPath(), getterToType));
}
+
+ throw new IllegalStateException(
+ String.format("Unable to find type for child node %s. Expected child nodes: %s",
+ schemaChild.getPath(), getterToType));
}
emitChild(b, getter, childType, schemaChild);
}
}
}
- private StringBuilder tryToUseCacheElse(final String getterName, final CharSequence statement) {
+ private static StringBuilder tryToUseCacheElse(final String getterName, final CharSequence statement) {
final StringBuilder b = new StringBuilder();
b.append("if ( ");
b.append(invoke(SERIALIZER, "serialize", getterName)).append("== null");
b.append(") {");
b.append(statement);
- b.append("}");
+ b.append('}');
return b;
}
*/
protected abstract CharSequence getSerializerBody();
- protected final CharSequence leafNode(final String localName, final CharSequence value) {
+ protected static final CharSequence leafNode(final String localName, final CharSequence value) {
return invoke(STREAM, "leafNode", escape(localName), value);
}
- protected final CharSequence startLeafSet(final String localName,final CharSequence expected) {
- return invoke(STREAM, "startLeafSet", escape(localName),expected);
+ protected static final CharSequence startLeafSet(final String localName,final CharSequence expected) {
+ return invoke(STREAM, "startLeafSet", escape(localName), expected);
}
- protected final CharSequence startOrderedLeafSet(final String localName, final CharSequence expected) {
- return invoke(STREAM, "startOrderedLeafSet", escape(localName),expected);
+ protected static final CharSequence startOrderedLeafSet(final String localName, final CharSequence expected) {
+ return invoke(STREAM, "startOrderedLeafSet", escape(localName), expected);
}
- protected final CharSequence leafSetEntryNode(final CharSequence value) {
+ protected static final CharSequence leafSetEntryNode(final CharSequence value) {
return invoke(STREAM, "leafSetEntryNode", value);
}
- protected final CharSequence startContainerNode(final CharSequence type, final CharSequence expected) {
- return invoke(STREAM, "startContainerNode", (type),expected);
+ protected static final CharSequence startContainerNode(final CharSequence type, final CharSequence expected) {
+ return invoke(STREAM, "startContainerNode", type, expected);
}
- protected final CharSequence escape(final String localName) {
+ protected static final CharSequence escape(final String localName) {
return '"' + localName + '"';
}
- protected final CharSequence startUnkeyedList(final CharSequence type, final CharSequence expected) {
- return invoke(STREAM, "startUnkeyedList", (type),expected);
+ protected static final CharSequence startUnkeyedList(final CharSequence type, final CharSequence expected) {
+ return invoke(STREAM, "startUnkeyedList", type, expected);
}
- protected final CharSequence startUnkeyedListItem(final CharSequence expected) {
- return invoke(STREAM, "startUnkeyedListItem",expected);
+ protected static final CharSequence startUnkeyedListItem(final CharSequence expected) {
+ return invoke(STREAM, "startUnkeyedListItem", expected);
}
- protected final CharSequence startMapNode(final CharSequence type,final CharSequence expected) {
- return invoke(STREAM, "startMapNode", (type),expected);
+ protected static final CharSequence startMapNode(final CharSequence type,final CharSequence expected) {
+ return invoke(STREAM, "startMapNode", type, expected);
}
- protected final CharSequence startOrderedMapNode(final CharSequence type,final CharSequence expected) {
- return invoke(STREAM, "startOrderedMapNode", (type),expected);
+ protected static final CharSequence startOrderedMapNode(final CharSequence type,final CharSequence expected) {
+ return invoke(STREAM, "startOrderedMapNode", type, expected);
}
- protected final CharSequence startMapEntryNode(final CharSequence key, final CharSequence expected) {
- return invoke(STREAM,"startMapEntryNode",key,expected);
+ protected static final CharSequence startMapEntryNode(final CharSequence key, final CharSequence expected) {
+ return invoke(STREAM, "startMapEntryNode", key, expected);
}
- protected final CharSequence startAugmentationNode(final CharSequence key) {
- return invoke(STREAM,"startAugmentationNode",key);
+ protected static final CharSequence startAugmentationNode(final CharSequence key) {
+ return invoke(STREAM, "startAugmentationNode", key);
}
- protected final CharSequence startChoiceNode(final CharSequence localName,final CharSequence expected) {
- return invoke(STREAM, "startChoiceNode", (localName),expected);
+ protected static final CharSequence startChoiceNode(final CharSequence localName,final CharSequence expected) {
+ return invoke(STREAM, "startChoiceNode", localName, expected);
}
- protected final CharSequence startCaseNode(final CharSequence localName,final CharSequence expected) {
- return invoke(STREAM, "startCase", (localName),expected);
+ protected static final CharSequence startCaseNode(final CharSequence localName,final CharSequence expected) {
+ return invoke(STREAM, "startCase", localName, expected);
}
- protected final CharSequence anyxmlNode(final String name, final String value) throws IllegalArgumentException {
- return invoke(STREAM, "anyxmlNode", escape(name),name);
+ protected static final CharSequence anyxmlNode(final String name, final String value)
+ throws IllegalArgumentException {
+ return invoke(STREAM, "anyxmlNode", escape(name), name);
}
- protected final CharSequence endNode() {
+ protected static final CharSequence endNode() {
return invoke(STREAM, "endNode");
}
- protected final CharSequence forEach(final String iterable,final Type valueType,final CharSequence body) {
+ protected static final CharSequence forEach(final String iterable,final Type valueType,final CharSequence body) {
return forEach(iterable, ITERATOR, valueType.getFullyQualifiedName(), CURRENT, body);
}
- protected final CharSequence classReference(final Type type) {
+ protected static final CharSequence classReference(final Type type) {
return type.getFullyQualifiedName() + ".class";
}
import com.google.common.collect.Iterators;
import com.google.common.collect.UnmodifiableIterator;
-
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.opendaylight.mdsal.binding.model.api.Type;
public abstract class AbstractSource {
-
private final Set<StaticConstantDefinition> staticConstants = new HashSet<>();
public final <T> void staticConstant(final String name, final Class<T> type, final T value) {
return Collections.unmodifiableSet(staticConstants);
}
- protected final CharSequence invoke(final CharSequence object, final String methodName, final Object... args) {
- StringBuilder builder = new StringBuilder();
+ private static StringBuilder commonInvoke(final CharSequence object, final String methodName) {
+ final StringBuilder sb = new StringBuilder();
if (object != null) {
- builder.append(object);
- builder.append('.');
+ sb.append(object);
+ sb.append('.');
}
- builder.append(methodName);
- builder.append('(');
+ return sb.append(methodName).append('(');
+ }
- UnmodifiableIterator<Object> iterator = Iterators.forArray(args);
+ protected static final CharSequence invoke(final CharSequence object, final String methodName, final Object arg) {
+ return commonInvoke(object, methodName).append(arg).append(')');
+ }
+
+ protected static final CharSequence invoke(final CharSequence object, final String methodName, final Object... args) {
+ final StringBuilder sb = commonInvoke(object, methodName);
+
+ final UnmodifiableIterator<Object> iterator = Iterators.forArray(args);
while (iterator.hasNext()) {
- builder.append(iterator.next());
+ sb.append(iterator.next());
if (iterator.hasNext()) {
- builder.append(',');
+ sb.append(',');
}
}
- builder.append(')');
- return builder;
+ return sb.append(')');
}
- protected final CharSequence assign(final String var, final CharSequence value) {
+ protected static final CharSequence assign(final String var, final CharSequence value) {
return assign((String) null, var, value);
}
- protected final CharSequence assign(final String type, final String var, final CharSequence value) {
- StringBuilder builder = new StringBuilder();
- if(type != null) {
- builder.append(type);
- builder.append(' ');
+ protected static final CharSequence assign(final String type, final String var, final CharSequence value) {
+ final StringBuilder sb = new StringBuilder();
+ if (type != null) {
+ sb.append(type);
+ sb.append(' ');
}
- builder.append(var);
- builder.append(" = ");
- builder.append(value);
- return builder;
+ return sb.append(var).append(" = ").append(value);
}
- protected final CharSequence assign(final Type type, final String var, final CharSequence value) {
+ protected static final CharSequence assign(final Type type, final String var, final CharSequence value) {
return assign(type.getFullyQualifiedName(), var, value);
}
- protected final CharSequence cast(final Type type, final CharSequence value) {
+ protected static final CharSequence cast(final Type type, final CharSequence value) {
return cast(type.getFullyQualifiedName(), value);
}
- protected final CharSequence forEach(final String iterable,final String iteratorName, final String valueType,final String valueName, final CharSequence body) {
- StringBuilder b = new StringBuilder();
- b.append(statement(assign(java.util.Iterator.class.getName(), iteratorName,invoke(iterable, "iterator"))));
- b.append("while (").append(invoke(iteratorName, "hasNext")).append(") {\n");
- b.append(statement(assign(valueType, valueName,cast(valueType, invoke(iteratorName, "next")))));
- b.append(body);
- b.append("\n}\n");
- return b;
+ protected static final CharSequence forEach(final String iterable, final String iteratorName,
+ final String valueType, final String valueName, final CharSequence body) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(statement(assign(java.util.Iterator.class.getName(), iteratorName, invoke(iterable, "iterator"))));
+ sb.append("while (").append(invoke(iteratorName, "hasNext")).append(") {\n");
+ sb.append(statement(assign(valueType, valueName,cast(valueType, invoke(iteratorName, "next")))));
+ sb.append(body);
+ return sb.append("\n}\n");
}
- protected final CharSequence statement(final CharSequence statement) {
- return new StringBuilder().append(statement).append(";\n");
+ protected static final CharSequence statement(final CharSequence statement) {
+ return new StringBuilder(statement).append(";\n");
}
- protected final CharSequence cast(final String type, final CharSequence value) {
- StringBuilder builder = new StringBuilder();
- builder.append("((");
- builder.append(type);
- builder.append(") ");
- builder.append(value);
- builder.append(')');
- return builder;
+ protected static final CharSequence cast(final String type, final CharSequence value) {
+ return "((" + type + ") " + value + ')';
}
-
}