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)); } } }
case ValueType.ANNOTATION: AnnotationEncodedValue annotationEncodedValue = (AnnotationEncodedValue)encodedValue; writer.writeAnnotation(annotationEncodedValue.getType(), annotationEncodedValue.getElements()); break; case ValueType.ARRAY: ArrayEncodedValue arrayEncodedValue = (ArrayEncodedValue)encodedValue; writer.writeArray(arrayEncodedValue.getValue()); break; case ValueType.BOOLEAN: writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue()); break; case ValueType.BYTE: writer.writeByte(((ByteEncodedValue)encodedValue).getValue()); break; case ValueType.CHAR: writer.writeChar(((CharEncodedValue)encodedValue).getValue()); break; case ValueType.DOUBLE: writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue()); break; case ValueType.ENUM: writer.writeEnum(((EnumEncodedValue)encodedValue).getValue()); break; case ValueType.FIELD: writer.writeField(((FieldEncodedValue)encodedValue).getValue()); break; case ValueType.FLOAT: writer.writeFloat(((FloatEncodedValue)encodedValue).getValue()); break;
case ValueType.ANNOTATION: BuilderAnnotationEncodedValue annotationEncodedValue = (BuilderAnnotationEncodedValue)encodedValue; writer.writeAnnotation(annotationEncodedValue.typeReference, annotationEncodedValue.elements); break; case ValueType.ARRAY: BuilderArrayEncodedValue arrayEncodedValue = (BuilderArrayEncodedValue)encodedValue; writer.writeArray(arrayEncodedValue.elements); break; case ValueType.BOOLEAN: writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue()); break; case ValueType.BYTE: writer.writeByte(((ByteEncodedValue)encodedValue).getValue()); break; case ValueType.CHAR: writer.writeChar(((CharEncodedValue)encodedValue).getValue()); break; case ValueType.DOUBLE: writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue()); break; case ValueType.ENUM: writer.writeEnum(((BuilderEnumEncodedValue)encodedValue).getValue()); break; case ValueType.FIELD: writer.writeField(((BuilderFieldEncodedValue)encodedValue).fieldReference); break; case ValueType.FLOAT: writer.writeFloat(((FloatEncodedValue)encodedValue).getValue()); break;
case ValueType.ANNOTATION: BuilderAnnotationEncodedValue annotationEncodedValue = (BuilderAnnotationEncodedValue)encodedValue; writer.writeAnnotation(annotationEncodedValue.typeReference, annotationEncodedValue.elements); break; case ValueType.ARRAY: BuilderArrayEncodedValue arrayEncodedValue = (BuilderArrayEncodedValue)encodedValue; writer.writeArray(arrayEncodedValue.elements); break; case ValueType.BOOLEAN: writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue()); break; case ValueType.BYTE: writer.writeByte(((ByteEncodedValue)encodedValue).getValue()); break; case ValueType.CHAR: writer.writeChar(((CharEncodedValue)encodedValue).getValue()); break; case ValueType.DOUBLE: writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue()); break; case ValueType.ENUM: writer.writeEnum(((BuilderEnumEncodedValue)encodedValue).getValue()); break; case ValueType.FIELD: writer.writeField(((BuilderFieldEncodedValue)encodedValue).fieldReference); break; case ValueType.FLOAT: writer.writeFloat(((FloatEncodedValue)encodedValue).getValue()); break;
case ValueType.ANNOTATION: BuilderAnnotationEncodedValue annotationEncodedValue = (BuilderAnnotationEncodedValue)encodedValue; writer.writeAnnotation(annotationEncodedValue.typeReference, annotationEncodedValue.elements); break; case ValueType.ARRAY: BuilderArrayEncodedValue arrayEncodedValue = (BuilderArrayEncodedValue)encodedValue; writer.writeArray(arrayEncodedValue.elements); break; case ValueType.BOOLEAN: writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue()); break; case ValueType.BYTE: writer.writeByte(((ByteEncodedValue)encodedValue).getValue()); break; case ValueType.CHAR: writer.writeChar(((CharEncodedValue)encodedValue).getValue()); break; case ValueType.DOUBLE: writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue()); break; case ValueType.ENUM: writer.writeEnum(((BuilderEnumEncodedValue)encodedValue).getValue()); break; case ValueType.FIELD: writer.writeField(((BuilderFieldEncodedValue)encodedValue).fieldReference); break; case ValueType.FLOAT: writer.writeFloat(((FloatEncodedValue)encodedValue).getValue()); break;
case ValueType.ANNOTATION: AnnotationEncodedValue annotationEncodedValue = (AnnotationEncodedValue)encodedValue; writer.writeAnnotation(annotationEncodedValue.getType(), annotationEncodedValue.getElements()); break; case ValueType.ARRAY: ArrayEncodedValue arrayEncodedValue = (ArrayEncodedValue)encodedValue; writer.writeArray(arrayEncodedValue.getValue()); break; case ValueType.BOOLEAN: writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue()); break; case ValueType.BYTE: writer.writeByte(((ByteEncodedValue)encodedValue).getValue()); break; case ValueType.CHAR: writer.writeChar(((CharEncodedValue)encodedValue).getValue()); break; case ValueType.DOUBLE: writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue()); break; case ValueType.ENUM: writer.writeEnum(((EnumEncodedValue)encodedValue).getValue()); break; case ValueType.FIELD: writer.writeField(((FieldEncodedValue)encodedValue).getValue()); break; case ValueType.FLOAT: writer.writeFloat(((FloatEncodedValue)encodedValue).getValue()); break;
case ValueType.ANNOTATION: AnnotationEncodedValue annotationEncodedValue = (AnnotationEncodedValue)encodedValue; writer.writeAnnotation(annotationEncodedValue.getType(), annotationEncodedValue.getElements()); break; case ValueType.ARRAY: ArrayEncodedValue arrayEncodedValue = (ArrayEncodedValue)encodedValue; writer.writeArray(arrayEncodedValue.getValue()); break; case ValueType.BOOLEAN: writer.writeBoolean(((BooleanEncodedValue)encodedValue).getValue()); break; case ValueType.BYTE: writer.writeByte(((ByteEncodedValue)encodedValue).getValue()); break; case ValueType.CHAR: writer.writeChar(((CharEncodedValue)encodedValue).getValue()); break; case ValueType.DOUBLE: writer.writeDouble(((DoubleEncodedValue)encodedValue).getValue()); break; case ValueType.ENUM: writer.writeEnum(((EnumEncodedValue)encodedValue).getValue()); break; case ValueType.FIELD: writer.writeField(((FieldEncodedValue)encodedValue).getValue()); break; case ValueType.FLOAT: writer.writeFloat(((FloatEncodedValue)encodedValue).getValue()); break;
private void writeEncodedArrays(@Nonnull DexDataWriter writer) throws IOException { InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer); encodedArraySectionOffset = writer.getPosition(); HashMap<EncodedArrayKey<EncodedValue>, Integer> internedItems = Maps.newHashMap(); EncodedArrayKey<EncodedValue> key = new EncodedArrayKey<EncodedValue>(); for (ClassKey classKey: classSection.getSortedClasses()) { Collection <? extends EncodedValue> elements = classSection.getStaticInitializers(classKey); if (elements != null && elements.size() > 0) { key.elements = elements; Integer prev = internedItems.get(key); if (prev != null) { classSection.setEncodedArrayOffset(classKey, prev); } else { int offset = writer.getPosition(); internedItems.put(key, offset); classSection.setEncodedArrayOffset(classKey, offset); key = new EncodedArrayKey<EncodedValue>(); numEncodedArrayItems++; writer.writeUleb128(elements.size()); for (EncodedValue value: elements) { writeEncodedValue(encodedValueWriter, value); } } } } }
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)); } } }
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 writeEncodedArrays(@Nonnull DexDataWriter writer) throws IOException { InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer); encodedArraySectionOffset = writer.getPosition(); for (Map.Entry<? extends EncodedArrayKey, Integer> entry: encodedArraySection.getItems()) { entry.setValue(writer.getPosition()); List<? extends EncodedValue> encodedArray = encodedArraySection.getEncodedValueList(entry.getKey()); writer.writeUleb128(encodedArray.size()); for (EncodedValue value: encodedArray) { writeEncodedValue(encodedValueWriter, value); } } }
private void writeEncodedArrays(@Nonnull DexDataWriter writer) throws IOException { InternalEncodedValueWriter encodedValueWriter = new InternalEncodedValueWriter(writer); encodedArraySectionOffset = writer.getPosition(); for (Map.Entry<? extends EncodedArrayKey, Integer> entry: encodedArraySection.getItems()) { entry.setValue(writer.getPosition()); List<? extends EncodedValue> encodedArray = encodedArraySection.getEncodedValueList(entry.getKey()); writer.writeUleb128(encodedArray.size()); for (EncodedValue value: encodedArray) { writeEncodedValue(encodedValueWriter, value); } } }