byte[] (StructClass classStruct, StructMethod mt, int codeFullLength) { String className = classStruct.qualifiedName; try (DataInputFullStream in = getClassStream(className)) { if (in != null) { in.discard(8); ConstantPool pool = classStruct.getPool(); if (pool == null) { pool = new ConstantPool(in); } else { ConstantPool.skipPool(in); } in.discard(6); // interfaces in.discard(in.readUnsignedShort() * 2); // fields int size = in.readUnsignedShort(); for (int i = 0; i < size; i++) { in.discard(6); skipAttributes(in); } // methods size = in.readUnsignedShort(); for (int i = 0; i < size; i++) { in.discard(2); int nameIndex = in.readUnsignedShort(); int descriptorIndex = in.readUnsignedShort(); String[] values = pool.getClassElement(ConstantPool.METHOD, className, nameIndex, descriptorIndex); if (!mt.getName().equals(values[0]) || !mt.getDescriptor().equals(values[1])) { skipAttributes(in); continue; } int attrSize = in.readUnsignedShort(); for (int j = 0; j < attrSize; j++) { int attrNameIndex = in.readUnsignedShort(); String attrName = pool.getPrimitiveConstant(attrNameIndex).getString(); if (!StructGeneralAttribute.ATTRIBUTE_CODE.name.equals(attrName)) { in.discard(in.readInt()); continue; } in.discard(12); return in.read(codeFullLength); } break; } } return null; } catch (IOException ex) { throw new RuntimeException(ex); } }