summaryrefslogtreecommitdiffstats
path: root/dx/src/com/android/dx/merge/DexMerger.java
diff options
context:
space:
mode:
Diffstat (limited to 'dx/src/com/android/dx/merge/DexMerger.java')
-rw-r--r--dx/src/com/android/dx/merge/DexMerger.java26
1 files changed, 19 insertions, 7 deletions
diff --git a/dx/src/com/android/dx/merge/DexMerger.java b/dx/src/com/android/dx/merge/DexMerger.java
index b8071176a..1ba876aef 100644
--- a/dx/src/com/android/dx/merge/DexMerger.java
+++ b/dx/src/com/android/dx/merge/DexMerger.java
@@ -33,7 +33,9 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* Combine two dex files into one.
@@ -595,6 +597,8 @@ public final class DexMerger {
transformAnnotationSets(dexB, bIndexMap);
transformAnnotationDirectories(dexA, aIndexMap);
transformAnnotationDirectories(dexB, bIndexMap);
+ transformStaticValues(dexA, aIndexMap);
+ transformStaticValues(dexB, bIndexMap);
}
private void transformAnnotationSets(DexBuffer in, IndexMap indexMap) {
@@ -617,6 +621,16 @@ public final class DexMerger {
}
}
+ private void transformStaticValues(DexBuffer in, IndexMap indexMap) {
+ TableOfContents.Section section = in.getTableOfContents().encodedArrays;
+ if (section.exists()) {
+ DexBuffer.Section staticValuesIn = in.open(section.off);
+ for (int i = 0; i < section.size; i++) {
+ transformStaticValues(staticValuesIn, indexMap);
+ }
+ }
+ }
+
/**
* Reads a class_def_item beginning at {@code in} and writes the index and
* data.
@@ -644,13 +658,7 @@ public final class DexMerger {
}
int staticValuesOff = classDef.getStaticValuesOffset();
- if (staticValuesOff == 0) {
- idsDefsOut.writeInt(0);
- } else {
- DexBuffer.Section staticValuesIn = in.open(staticValuesOff);
- idsDefsOut.writeInt(encodedArrayOut.getPosition());
- transformStaticValues(staticValuesIn, indexMap);
- }
+ idsDefsOut.writeInt(indexMap.adjustStaticValues(staticValuesOff));
}
/**
@@ -839,6 +847,7 @@ public final class DexMerger {
private void transformStaticValues(DexBuffer.Section in, IndexMap indexMap) {
contentsOut.encodedArrays.size++;
+ indexMap.putStaticValuesOffset(in.getPosition(), encodedArrayOut.getPosition());
indexMap.adjustEncodedArray(in.readEncodedArray()).writeTo(encodedArrayOut);
}
@@ -914,6 +923,9 @@ public final class DexMerger {
// at most 1/3 of the bytes in an encoding arrays section are uleb/sleb
annotation += (int) Math.ceil(contents.annotations.byteCount * 1.34);
}
+
+ typeList = DexBuffer.fourByteAlign(typeList);
+ code = DexBuffer.fourByteAlign(code);
}
public void minusWaste(DexMerger dexMerger) {