private void fillInReadMethod() { if ( isComposite() ) { read().body().decl(cm.LONG, "count", cm.ref(generator.getMarshaller() + ".DescribedTypeSupport").staticInvoke("readListHeader").arg(ref("in"))); } Log.info("Filling in read method for %s", type.getName()); for ( Attribute attribute : amqpFields ) { Log.info("%s %s", attribute.type, attribute.attribute.name()); if ( isComposite() ) { read().body().assign(ref("count"), ref("count").minus(lit(1))); JBlock ifBody = read().body()._if(ref("count").gte(lit(0)))._then(); addFieldRead(attribute, ifBody); } else { addFieldRead(attribute, read().body()); } } if ( isComposite() ) { for ( Attribute attribute : amqpFields ) { if ( attribute.required ) { read().body()._if(attribute.attribute.eq(_null()))._then()._throw(_new(cm.ref(RuntimeException.class)).arg("No value specified for mandatory attribute " + attribute.attribute.name())); } } } }
private void fillInSizeMethod() { size().body()._return(invoke("sizeOfConstructor").plus(invoke("sizeOfBody"))); sizeOfConstructor().body()._return(ref("CONSTRUCTOR").invoke("size")); JMethod sizeOfFields = cls().method(JMod.PRIVATE, cm.LONG, "sizeOfFields"); sizeOfFields.body().decl(cm.LONG, "fieldSize", lit(0L)); if ( isComposite() ) { sizeOfFields.body().decl(cm.INT, "count", _this().invoke(count)); } for ( Attribute attribute : amqpFields ) { if ( isComposite() ) { sizeOfFields.body().assign(ref("count"), ref("count").minus(lit(1))); JBlock ifBody = sizeOfFields.body()._if(ref("count").gte(lit(0)))._then(); addFieldSize(attribute, ifBody); } else { addFieldSize(attribute, sizeOfFields.body()); } } sizeOfFields.body()._return(ref("fieldSize")); if ( isComposite() ) { sizeOfBody().body()._return(cm.ref(generator.getMarshaller() + ".DescribedTypeSupport").staticInvoke("fullSizeOfList").arg(_this().invoke("sizeOfFields")).arg(_this().invoke("count"))); } else { sizeOfBody().body()._return(_this().invoke("sizeOfFields")); } }
private void fillInWriteMethod() { writeConstructor().body().block().invoke(ref("CONSTRUCTOR"), "write").arg(ref("out")); writeConstructor().body()._return(cast(cm.BYTE, lit(0))); write().body().invoke("writeConstructor").arg(ref("out")); write().body().invoke("writeBody").arg(cast(cm.BYTE, lit((byte) 0))).arg(ref("out")); if ( isComposite() ) { writeBody().body().decl(cm.LONG, "fieldSize", _this().invoke("sizeOfFields")); writeBody().body().decl(cm.INT, "count", _this().invoke("count")); writeBody().body().staticInvoke(cm.ref(generator.getMarshaller() + ".DescribedTypeSupport"), "writeListHeader").arg(ref("fieldSize")).arg(ref("count")).arg(ref("out")); } for ( Attribute attribute : amqpFields ) { if ( isComposite() ) { writeBody().body().assign(ref("count"), ref("count").minus(lit(1))); JBlock ifBody = writeBody().body()._if(ref("count").gte(lit(0)))._then(); addFieldWrite(attribute, ifBody); } else { addFieldWrite(attribute, writeBody().body()); } } }