private void writeAnnotations(@Nonnull DexDataWriter writer) throws IOException { InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer); annotationSectionOffset = writer.getPosition(); for (Map.Entry<? extends AnnotationKey, Integer> entry: annotationSection.getItems()) { entry.setValue(writer.getPosition()); AnnotationKey key = entry.getKey(); writer.writeUbyte(annotationSection.getVisibility(key)); writer.writeUleb128(typeSection.getItemIndex(annotationSection.getType(key))); Collection<? extends AnnotationElement> elements = Ordering.from(BaseAnnotationElement.BY_NAME) .immutableSortedCopy(annotationSection.getElements(key)); writer.writeUleb128(elements.size()); for (AnnotationElement element: elements) { writer.writeUleb128(stringSection.getItemIndex(annotationSection.getElementName(element))); writeEncodedValue(encodedValueWriter, annotationSection.getElementValue(element)); } } }
@Test public void testWriteUbyte() throws IOException { writer.writeUbyte(0); writer.writeUbyte(1); writer.writeUbyte(0x12); writer.writeUbyte(0xFF); expectData(0x00, 0x01, 0x12, 0xFF); }
public void write(@Nonnull PackedSwitchPayload instruction) { try { writer.writeUbyte(0); writer.writeUbyte(instruction.getOpcode().value >> 8); List<? extends SwitchElement> elements = instruction.getSwitchElements(); writer.writeUshort(elements.size()); if (elements.size() == 0) { writer.writeInt(0); } else { writer.writeInt(elements.get(0).getKey()); for (SwitchElement element: elements) { writer.writeInt(element.getOffset()); } } } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull SparseSwitchPayload instruction) { try { writer.writeUbyte(0); writer.writeUbyte(instruction.getOpcode().value >> 8); List<? extends SwitchElement> elements = instruction.getSwitchElements(); writer.writeUshort(elements.size()); for (SwitchElement element: elements) { writer.writeInt(element.getKey()); } for (SwitchElement element: elements) { writer.writeInt(element.getOffset()); } } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull PackedSwitchPayload instruction) { try { writer.writeUbyte(0); writer.writeUbyte(getOpcodeValue(instruction.getOpcode()) >> 8); List<? extends SwitchElement> elements = instruction.getSwitchElements(); writer.writeUshort(elements.size()); if (elements.size() == 0) { writer.writeInt(0); } else { writer.writeInt(elements.get(0).getKey()); for (SwitchElement element: elements) { writer.writeInt(element.getOffset()); } } } catch (IOException ex) { throw new RuntimeException(ex); } }
@Test(expected=ExceptionWithContext.class) public void testWriteUbyteOutOfBounds() throws IOException { writer.writeUbyte(-1); }
@Test(expected=ExceptionWithContext.class) public void testWriteUbyteOutOfBounds2() throws IOException { writer.writeUbyte(256); }
public void write(@Nonnull SparseSwitchPayload instruction) { try { writer.writeUbyte(0); writer.writeUbyte(getOpcodeValue(instruction.getOpcode()) >> 8); List<? extends SwitchElement> elements = Ordering.from(switchElementComparator).immutableSortedCopy( instruction.getSwitchElements()); writer.writeUshort(elements.size()); for (SwitchElement element: elements) { writer.writeInt(element.getKey()); } for (SwitchElement element: elements) { writer.writeInt(element.getOffset()); } } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull PackedSwitchPayload instruction) { try { writer.writeUbyte(0); writer.writeUbyte(getOpcodeValue(instruction.getOpcode()) >> 8); List<? extends SwitchElement> elements = instruction.getSwitchElements(); writer.writeUshort(elements.size()); if (elements.size() == 0) { writer.writeInt(0); } else { writer.writeInt(elements.get(0).getKey()); for (SwitchElement element: elements) { writer.writeInt(element.getOffset()); } } } catch (IOException ex) { throw new RuntimeException(ex); } }
public void write(@Nonnull SparseSwitchPayload instruction) { try { writer.writeUbyte(0); writer.writeUbyte(getOpcodeValue(instruction.getOpcode()) >> 8); List<? extends SwitchElement> elements = Ordering.from(switchElementComparator).immutableSortedCopy( instruction.getSwitchElements()); writer.writeUshort(elements.size()); for (SwitchElement element: elements) { writer.writeInt(element.getKey()); } for (SwitchElement element: elements) { writer.writeInt(element.getOffset()); } } catch (IOException ex) { throw new RuntimeException(ex); } }
private void writeAnnotations(@Nonnull DexDataWriter writer) throws IOException { InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer); annotationSectionOffset = writer.getPosition(); for (Map.Entry<? extends AnnotationKey, Integer> entry: annotationSection.getItems()) { entry.setValue(writer.getPosition()); AnnotationKey key = entry.getKey(); writer.writeUbyte(annotationSection.getVisibility(key)); writer.writeUleb128(typeSection.getItemIndex(annotationSection.getType(key))); Collection<? extends AnnotationElement> elements = Ordering.from(BaseAnnotationElement.BY_NAME) .immutableSortedCopy(annotationSection.getElements(key)); writer.writeUleb128(elements.size()); for (AnnotationElement element: elements) { writer.writeUleb128(stringSection.getItemIndex(annotationSection.getElementName(element))); writeEncodedValue(encodedValueWriter, annotationSection.getElementValue(element)); } } }
private void writeAnnotations(@Nonnull DexDataWriter writer) throws IOException { InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer); annotationSectionOffset = writer.getPosition(); for (Map.Entry<? extends AnnotationKey, Integer> entry: annotationSection.getItems()) { entry.setValue(writer.getPosition()); AnnotationKey key = entry.getKey(); writer.writeUbyte(annotationSection.getVisibility(key)); writer.writeUleb128(typeSection.getItemIndex(annotationSection.getType(key))); Collection<? extends AnnotationElement> elements = annotationSection.getElements(key); writer.writeUleb128(elements.size()); for (AnnotationElement element: elements) { writer.writeUleb128(stringSection.getItemIndex(annotationSection.getElementName(element))); writeEncodedValue(encodedValueWriter, annotationSection.getElementValue(element)); } } }