/** * Creates a new ProgramClassWriter for writing to the given DataOutput. */ public ProgramClassWriter(DataOutput dataOutput) { this.dataOutput = new RuntimeDataOutput(dataOutput); }
public void visitUnknownAttribute(Clazz clazz, UnknownAttribute unknownAttribute) { // Write the unknown information. dataOutput.write(unknownAttribute.info); }
public void visitTypeArgumentTargetInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, TypeAnnotation typeAnnotation, TypeArgumentTargetInfo typeArgumentTargetInfo) { dataOutput.writeUnsignedShort(typeArgumentTargetInfo.u2offset); dataOutput.writeByte(typeArgumentTargetInfo.u1typeArgumentIndex); }
public void visitAnyAttribute(Clazz clazz, Attribute attribute) { // Write the attribute name index. dataOutput.writeUnsignedShort(attribute.u2attributeNameIndex); // We'll write the attribute body into an array first, so we can // automatically figure out its length. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // Temporarily replace the current data output. RuntimeDataOutput oldDataOutput = dataOutput; dataOutput = new RuntimeDataOutput(new DataOutputStream(byteArrayOutputStream)); // Write the attribute body into the array. Note that the // accept method with two dummy null arguments never throws // an UnsupportedOperationException. attribute.accept(clazz, null, null, attributeBodyWriter); // Restore the original data output. dataOutput = oldDataOutput; // Write the attribute length and body. byte[] info = byteArrayOutputStream.toByteArray(); dataOutput.writeInt(info.length); dataOutput.write(info); }
public void visitAnyAttribute(Clazz clazz, Attribute attribute) { // Write the attribute name index. dataOutput.writeShort(attribute.u2attributeNameIndex); // We'll write the attribute body into an array first, so we can // automatically figure out its length. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // Temporarily replace the current data output. RuntimeDataOutput oldDataOutput = dataOutput; dataOutput = new RuntimeDataOutput(new DataOutputStream(byteArrayOutputStream)); // Write the attribute body into the array. Note that the // accept method with two dummy null arguments never throws // an UnsupportedOperationException. attribute.accept(clazz, null, null, attributeBodyWriter); // Restore the original data output. dataOutput = oldDataOutput; // Write the attribute length and body. byte[] info = byteArrayOutputStream.toByteArray(); dataOutput.writeInt(info.length); dataOutput.write(info); }
public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) { // Write the stack size and local variable frame size. dataOutput.writeUnsignedShort(codeAttribute.u2maxStack); dataOutput.writeUnsignedShort(codeAttribute.u2maxLocals); // Write the byte code. dataOutput.writeInt(codeAttribute.u4codeLength); dataOutput.write(codeAttribute.code, 0, codeAttribute.u4codeLength); // Write the exceptions. dataOutput.writeUnsignedShort(codeAttribute.u2exceptionTableLength); codeAttribute.exceptionsAccept(clazz, method, this); // Write the code attributes. dataOutput.writeUnsignedShort(codeAttribute.u2attributesCount); codeAttribute.attributesAccept(clazz, method, ProgramClassWriter.this); }
public void visitAnyRefConstant(Clazz clazz, RefConstant refConstant) { dataOutput.writeShort(refConstant.u2classIndex); dataOutput.writeShort(refConstant.u2nameAndTypeIndex); }
public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) { // Write the stack size and local variable frame size. dataOutput.writeShort(codeAttribute.u2maxStack); dataOutput.writeShort(codeAttribute.u2maxLocals); // Write the byte code. dataOutput.writeInt(codeAttribute.u4codeLength); dataOutput.write(codeAttribute.code, 0, codeAttribute.u4codeLength); // Write the exceptions. dataOutput.writeShort(codeAttribute.u2exceptionTableLength); codeAttribute.exceptionsAccept(clazz, method, this); // Write the code attributes. dataOutput.writeShort(codeAttribute.u2attributesCount); codeAttribute.attributesAccept(clazz, method, ProgramClassWriter.this); }
public void visitProgramClass(ProgramClass programClass) dataOutput.writeInt(ClassConstants.MAGIC); dataOutput.writeShort(ClassUtil.internalMinorClassVersion(programClass.u4version)); dataOutput.writeShort(ClassUtil.internalMajorClassVersion(programClass.u4version)); dataOutput.writeUnsignedShort(programClass.u2constantPoolCount); dataOutput.writeUnsignedShort(programClass.u2accessFlags & 0xffff); dataOutput.writeUnsignedShort(programClass.u2thisClass); dataOutput.writeUnsignedShort(programClass.u2superClass); dataOutput.writeUnsignedShort(programClass.u2interfacesCount); dataOutput.writeUnsignedShort(programClass.u2interfaces[index]); dataOutput.writeUnsignedShort(programClass.u2fieldsCount); dataOutput.writeUnsignedShort(programClass.u2methodsCount); dataOutput.writeUnsignedShort(programClass.u2attributesCount);
public void visitUtf8Constant(Clazz clazz, Utf8Constant utf8Constant) { byte[] bytes = utf8Constant.getBytes(); dataOutput.writeUnsignedShort(bytes.length); dataOutput.write(bytes); }
public void visitPrimitiveArrayConstant(Clazz clazz, PrimitiveArrayConstant primitiveArrayConstant) { char u2primitiveType = primitiveArrayConstant.getPrimitiveType(); int u4Length = primitiveArrayConstant.getLength(); dataOutput.writeUnsignedShort(u2primitiveType); dataOutput.writeInt(u4Length); // Write the array values. primitiveArrayConstant.primitiveArrayElementsAccept(clazz, this); }
public void visitUtf8Constant(Clazz clazz, Utf8Constant utf8Constant) { byte[] bytes = utf8Constant.getBytes(); dataOutput.writeShort(bytes.length); dataOutput.write(bytes); }
public void visitDoubleConstant(Clazz clazz, DoubleConstant doubleConstant) { dataOutput.writeDouble(doubleConstant.f8value); }
public void visitLongConstant(Clazz clazz, LongConstant longConstant) { dataOutput.writeLong(longConstant.u8value); }
public void visitFloatArrayConstantElement(Clazz clazz, PrimitiveArrayConstant primitiveArrayConstant, int index, float value) { dataOutput.writeFloat(value); }
public void visitIntArrayConstantElement(Clazz clazz, PrimitiveArrayConstant primitiveArrayConstant, int index, int value) { dataOutput.writeInt(value); }
public void visitProgramClass(ProgramClass programClass) { // Write the magic number. dataOutput.writeInt(programClass.u4magic); // Write the version numbers. dataOutput.writeShort(ClassUtil.internalMinorClassVersion(programClass.u4version)); dataOutput.writeShort(ClassUtil.internalMajorClassVersion(programClass.u4version)); // Write the constant pool. dataOutput.writeShort(programClass.u2constantPoolCount); programClass.constantPoolEntriesAccept(this); // Write the general class information. dataOutput.writeShort(programClass.u2accessFlags); dataOutput.writeShort(programClass.u2thisClass); dataOutput.writeShort(programClass.u2superClass); // Write the interfaces. dataOutput.writeShort(programClass.u2interfacesCount); for (int index = 0; index < programClass.u2interfacesCount; index++) { dataOutput.writeShort(programClass.u2interfaces[index]); } // Write the fields. dataOutput.writeShort(programClass.u2fieldsCount); programClass.fieldsAccept(this); // Write the methods. dataOutput.writeShort(programClass.u2methodsCount); programClass.methodsAccept(this); // Write the class attributes. dataOutput.writeShort(programClass.u2attributesCount); programClass.attributesAccept(this); }
public void visitBooleanArrayConstantElement(Clazz clazz, PrimitiveArrayConstant primitiveArrayConstant, int index, boolean value) { dataOutput.writeBoolean(value); }
public void visitCharArrayConstantElement(Clazz clazz, PrimitiveArrayConstant primitiveArrayConstant, int index, char value) { dataOutput.writeChar(value); }