in activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/JavaGenerator.java [242:338]
private void generateMessageBean(MessageDescriptor m) {
String className = uCamel(m.getName());
p();
String staticOption = "static ";
if( multipleFiles && m.getParent()==null ) {
staticOption="";
}
String javaImplements = getOption(m.getOptions(), "java_implments", null);
String implementsExpression = "";
if( javaImplements!=null ) {
implementsExpression = "implements "+javaImplements+" ";
}
String baseClass = "org.apache.activemq.protobuf.BaseMessage";
if( deferredDecode ) {
baseClass = "org.apache.activemq.protobuf.DeferredDecodeMessage";
}
if( m.getBaseType()!=null ) {
baseClass = javaType(m.getBaseType())+"Base";
}
p(staticOption+"public final class " + className + " extends "+className+"Base<"+className+"> "+implementsExpression+"{");
p();
indent();
for (EnumDescriptor enumType : m.getEnums().values()) {
generateEnum(enumType);
}
// Generate the Nested Messages.
for (MessageDescriptor subMessage : m.getMessages().values()) {
generateMessageBean(subMessage);
}
// Generate the Group Messages
for (FieldDescriptor field : m.getFields().values()) {
if( isInBaseClass(m, field) ) {
continue;
}
if( field.isGroup() ) {
generateMessageBean(field.getGroup());
}
}
generateMethodAssertInitialized(m, className);
generateMethodClear(m);
p("public "+className+" clone() {");
p(" return new "+className+"().mergeFrom(this);");
p("}");
p();
generateMethodMergeFromBean(m, className);
generateMethodSerializedSize(m);
generateMethodMergeFromStream(m, className);
generateMethodWriteTo(m);
generateMethodParseFrom(m, className);
generateMethodToString(m);
generateMethodVisitor(m);
generateMethodType(m, className);
generateMethodEquals(m, className);
unindent();
p("}");
p();
p(staticOption+"abstract class " + className + "Base<T> extends "+baseClass+"<T> {");
p();
indent();
// Generate the field accessors..
for (FieldDescriptor field : m.getFields().values()) {
if( isInBaseClass(m, field) ) {
continue;
}
generateFieldAccessor(field);
}
unindent();
p("}");
p();
}