Lines Matching refs:writer

32 package org.jf.dexlib2.writer;
54 import org.jf.dexlib2.writer.io.DeferredOutputStream;
55 import org.jf.dexlib2.writer.io.DeferredOutputStreamFactory;
56 import org.jf.dexlib2.writer.io.DexDataStore;
57 import org.jf.dexlib2.writer.io.MemoryDeferredOutputStream;
58 import org.jf.dexlib2.writer.util.TryListBuilder;
152 protected abstract void writeEncodedValue(@Nonnull InternalEncodedValueWriter writer,
172 private InternalEncodedValueWriter(@Nonnull DexDataWriter writer) {
173 super(writer, stringSection, typeSection, fieldSection, methodSection, annotationSection);
295 private void writeTypes(@Nonnull DexDataWriter writer) throws IOException {
296 typeSectionOffset = writer.getPosition();
304 writer.writeInt(stringSection.getItemIndex(typeSection.getString(entry.getKey())));
308 private void writeProtos(@Nonnull DexDataWriter writer) throws IOException {
309 protoSectionOffset = writer.getPosition();
318 writer.writeInt(stringSection.getItemIndex(protoSection.getShorty(key)));
319 writer.writeInt(typeSection.getItemIndex(protoSection.getReturnType(key)));
320 writer.writeInt(typeListSection.getNullableItemOffset(protoSection.getParameters(key)));
324 private void writeFields(@Nonnull DexDataWriter writer) throws IOException {
325 fieldSectionOffset = writer.getPosition();
334 writer.writeUshort(typeSection.getItemIndex(fieldSection.getDefiningClass(key)));
335 writer.writeUshort(typeSection.getItemIndex(fieldSection.getFieldType(key)));
336 writer.writeInt(stringSection.getItemIndex(fieldSection.getName(key)));
340 private void writeMethods(@Nonnull DexDataWriter writer) throws IOException {
341 methodSectionOffset = writer.getPosition();
350 writer.writeUshort(typeSection.getItemIndex(methodSection.getDefiningClass(key)));
351 writer.writeUshort(protoSection.getItemIndex(methodSection.getPrototype(key)));
352 writer.writeInt(stringSection.getItemIndex(methodSection.getName(key)));
452 private void writeEncodedFields(@Nonnull DexDataWriter writer, @Nonnull Collection<? extends FieldKey> fields)
457 writer.writeUleb128(index - prevIndex);
458 writer.writeUleb128(classSection.getFieldAccessFlags(key));
463 private void writeEncodedMethods(@Nonnull DexDataWriter writer, @Nonnull Collection<? extends MethodKey> methods)
468 writer.writeUleb128(index-prevIndex);
469 writer.writeUleb128(classSection.getMethodAccessFlags(key));
470 writer.writeUleb128(classSection.getCodeItemOffset(key));
475 private void writeTypeLists(@Nonnull DexDataWriter writer) throws IOException {
476 writer.align();
477 typeListSectionOffset = writer.getPosition();
479 writer.align();
480 entry.setValue(writer.getPosition());
483 writer.writeInt(types.size());
485 writer.writeUshort(typeSection.getItemIndex(typeKey));
512 private void writeEncodedArrays(@Nonnull DexDataWriter writer) throws IOException {
513 InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer);
514 encodedArraySectionOffset = writer.getPosition();
527 int offset = writer.getPosition();
534 writer.writeUleb128(elements.size());
543 private void writeAnnotations(@Nonnull DexDataWriter writer) throws IOException {
544 InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer);
546 annotationSectionOffset = writer.getPosition();
548 entry.setValue(writer.getPosition());
552 writer.writeUbyte(annotationSection.getVisibility(key));
553 writer.writeUleb128(typeSection.getItemIndex(annotationSection.getType(key)));
556 writer.writeUleb128(elements.size());
559 writer.writeUleb128(stringSection.getItemIndex(annotationSection.getElementName(element)));
566 private void writeAnnotationSets(@Nonnull DexDataWriter writer) throws IOException {
567 writer.align();
568 annotationSetSectionOffset = writer.getPosition();
573 writer.align();
574 entry.setValue(writer.getPosition());
575 writer.writeInt(annotations.size());
577 writer.writeInt(annotationSection.getItemOffset(annotationKey));
582 private void writeAnnotationSetRefs(@Nonnull DexDataWriter writer) throws IOException {
583 writer.align();
584 annotationSetRefSectionOffset = writer.getPosition();
595 writer.align();
596 int position = writer.getPosition();
602 writer.writeInt(parameterAnnotations.size());
605 writer.writeInt(annotationSetSection.getItemOffset(annotationSetKey));
607 writer.writeInt(NO_OFFSET);
616 private void writeAnnotationDirectories(@Nonnull DexDataWriter writer) throws IOException {
617 writer.align();
618 annotationDirectorySectionOffset = writer.getPosition();
682 internedItems.put(classAnnotationKey, writer.getPosition());
691 classSection.setAnnotationDirectoryOffset(key, writer.getPosition());
693 writer.writeInt(annotationSetSection.getNullableItemOffset(classAnnotationKey));
694 writer.writeInt(fieldAnnotations);
695 writer.writeInt(methodAnnotations);
696 writer.writeInt(parameterAnnotations);
697 writer.write(tempBuffer.array(), 0, tempBuffer.position());
796 private int writeDebugItem(@Nonnull DexDataWriter writer,
820 int debugItemOffset = writer.getPosition();
831 writer.writeUleb128(startingLineNumber);
833 writer.writeUleb128(parameterCount);
841 writer.writeUleb128(stringSection.getNullableItemIndex(parameterName) + 1);
853 writer.write(0);
858 private int writeCodeItem(@Nonnull DexDataWriter writer,
870 writer.align();
872 int codeItemOffset = writer.getPosition();
874 writer.writeUshort(classSection.getRegisterCount(methodKey));
880 writer.writeUshort(MethodUtil.getParameterRegisterCount(parameters, isStatic));
899 writer.writeUshort(outParamCount);
900 writer.writeUshort(tryBlocks.size());
901 writer.writeInt(debugItemOffset);
904 InstructionWriter.makeInstructionWriter(writer, stringSection, typeSection, fieldSection,
907 writer.writeInt(codeUnitCount);
1004 writer.align();
1019 writer.writeInt(startAddress);
1020 writer.writeUshort(tbCodeUnitCount);
1029 writer.writeUshort(offset);
1033 writer.writeUshort(offset);
1063 ehBuf.writeTo(writer);
1069 writer.writeUshort(0);
1070 writer.writeUshort(0);
1071 writer.writeInt(debugItemOffset);
1072 writer.writeInt(0);
1135 private void writeMapItem(@Nonnull DexDataWriter writer) throws IOException{
1136 writer.align();
1137 mapSectionOffset = writer.getPosition();
1140 writer.writeInt(numItems);
1143 writeMapItem(writer, ItemType.HEADER_ITEM, 1, 0);
1144 writeMapItem(writer, ItemType.STRING_ID_ITEM, stringSection.getItems().size(), stringIndexSectionOffset);
1145 writeMapItem(writer, ItemType.TYPE_ID_ITEM, typeSection.getItems().size(), typeSectionOffset);
1146 writeMapItem(writer, ItemType.PROTO_ID_ITEM, protoSection.getItems().size(), protoSectionOffset);
1147 writeMapItem(writer, ItemType.FIELD_ID_ITEM, fieldSection.getItems().size(), fieldSectionOffset);
1148 writeMapItem(writer, ItemType.METHOD_ID_ITEM, methodSection.getItems().size(), methodSectionOffset);
1149 writeMapItem(writer, ItemType.CLASS_DEF_ITEM, classSection.getItems().size(), classIndexSectionOffset);
1152 writeMapItem(writer, ItemType.STRING_DATA_ITEM, stringSection.getItems().size(), stringDataSectionOffset);
1153 writeMapItem(writer, ItemType.TYPE_LIST, typeListSection.getItems().size(), typeListSectionOffset);
1154 writeMapItem(writer, ItemType.ENCODED_ARRAY_ITEM, numEncodedArrayItems, encodedArraySectionOffset);
1155 writeMapItem(writer, ItemType.ANNOTATION_ITEM, annotationSection.getItems().size(), annotationSectionOffset);
1156 writeMapItem(writer, ItemType.ANNOTATION_SET_ITEM, annotationSetSection.getItems().size(),
1158 writeMapItem(writer, ItemType.ANNOTATION_SET_REF_LIST, numAnnotationSetRefItems, annotationSetRefSectionOffset);
1159 writeMapItem(writer, ItemType.ANNOTATION_DIRECTORY_ITEM, numAnnotationDirectoryItems,
1161 writeMapItem(writer, ItemType.DEBUG_INFO_ITEM, numDebugInfoItems, debugSectionOffset);
1162 writeMapItem(writer, ItemType.CODE_ITEM, numCodeItemItems, codeSectionOffset);
1163 writeMapItem(writer, ItemType.CLASS_DATA_ITEM, numClassDataItems, classDataSectionOffset);
1164 writeMapItem(writer, ItemType.MAP_LIST, 1, mapSectionOffset);
1167 private void writeMapItem(@Nonnull DexDataWriter writer, int type, int size, int offset) throws IOException {
1169 writer.writeUshort(type);
1170 writer.writeUshort(0);
1171 writer.writeInt(size);
1172 writer.writeInt(offset);
1176 private void writeHeader(@Nonnull DexDataWriter writer, int dataOffset, int fileSize) throws IOException {
1178 writer.write(HeaderItem.MAGIC_VALUES[0]);
1181 writer.writeInt(0);
1184 writer.write(new byte[20]);
1186 writer.writeInt(fileSize);
1187 writer.writeInt(HeaderItem.ITEM_SIZE);
1188 writer.writeInt(HeaderItem.LITTLE_ENDIAN_TAG);
1191 writer.writeInt(0);
1192 writer.writeInt(0);
1195 writer.writeInt(mapSectionOffset);
1199 writeSectionInfo(writer, stringSection.getItems().size(), stringIndexSectionOffset);
1200 writeSectionInfo(writer, typeSection.getItems().size(), typeSectionOffset);
1201 writeSectionInfo(writer, protoSection.getItems().size(), protoSectionOffset);
1202 writeSectionInfo(writer, fieldSection.getItems().size(), fieldSectionOffset);
1203 writeSectionInfo(writer, methodSection.getItems().size(), methodSectionOffset);
1204 writeSectionInfo(writer, classSection.getItems().size(), classIndexSectionOffset);
1207 writer.writeInt(fileSize - dataOffset);
1208 writer.writeInt(dataOffset);
1211 private void writeSectionInfo(DexDataWriter writer, int numItems, int offset) throws IOException {
1212 writer.writeInt(numItems);
1214 writer.writeInt(offset);
1216 writer.writeInt(0);