summaryrefslogtreecommitdiffstats
path: root/jack/src
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2015-05-12 09:42:10 +0200
committerYohann Roussel <yroussel@google.com>2015-05-18 14:02:10 +0200
commitbeab6998369a309f8f078f6d1c2a27565bb67cfa (patch)
tree77fb25a7fc6571a4a55a7a033dc900933ba521ea /jack/src
parenta18689e31b6c26e62a457f9976de4d72a6ba197c (diff)
downloadtoolchain_jack-beab6998369a309f8f078f6d1c2a27565bb67cfa.zip
toolchain_jack-beab6998369a309f8f078f6d1c2a27565bb67cfa.tar.gz
toolchain_jack-beab6998369a309f8f078f6d1c2a27565bb67cfa.tar.bz2
Make multidex type partition determinist
By sorting types by name before filling the output dex files. Bug: 19505195 Change-Id: Ib7c11bc2b072c422e40188cfce7502e7f23679c8
Diffstat (limited to 'jack/src')
-rw-r--r--jack/src/com/android/jack/backend/dex/DexWritingTool.java33
1 files changed, 27 insertions, 6 deletions
diff --git a/jack/src/com/android/jack/backend/dex/DexWritingTool.java b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
index 366ae3a..aa08a73 100644
--- a/jack/src/com/android/jack/backend/dex/DexWritingTool.java
+++ b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
@@ -23,6 +23,7 @@ import com.android.jack.dx.dex.file.DexFile;
import com.android.jack.dx.io.DexBuffer;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter;
+import com.android.jack.ir.formatter.TypePackageAndMethodFormatter;
import com.android.jack.ir.formatter.UserFriendlyFormatter;
import com.android.jack.library.FileType;
import com.android.jack.library.FileTypeDoesNotExistException;
@@ -45,6 +46,10 @@ import com.android.sched.vfs.VPath;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.logging.Logger;
@@ -57,6 +62,9 @@ import javax.annotation.Nonnull;
public abstract class DexWritingTool {
@Nonnull
+ private static final TypePackageAndMethodFormatter FORMATTER = Jack.getLookupFormatter();
+
+ @Nonnull
private static Logger logger = LoggerFactory.getLogger();
@Nonnull
@@ -117,13 +125,26 @@ public abstract class DexWritingTool {
protected void fillDexLists(@Nonnull List<InputVFile> mainDexList,
@Nonnull List<InputVFile> anyDexList) {
final OutputJackLibrary jackOutputLibrary = Jack.getSession().getJackOutputLibrary();
+ Collection<JDefinedClassOrInterface> typesToEmit = Jack.getSession().getTypesToEmit();
- for (JDefinedClassOrInterface type : Jack.getSession().getTypesToEmit()) {
- if (type.containsMarker(MainDexMarker.class)) {
- mainDexList.add(getDexInputVFileOfType(jackOutputLibrary, type));
- } else {
- anyDexList.add(getDexInputVFileOfType(jackOutputLibrary, type));
- }
+ List<JDefinedClassOrInterface> anyTypeList = new ArrayList<JDefinedClassOrInterface>(
+ typesToEmit.size());
+
+ for (JDefinedClassOrInterface type : typesToEmit) {
+ if (type.containsMarker(MainDexMarker.class)) {
+ mainDexList.add(getDexInputVFileOfType(jackOutputLibrary, type));
+ } else {
+ anyTypeList.add(type);
+ }
+ }
+ Collections.sort(anyTypeList, new Comparator<JDefinedClassOrInterface>() {
+ @Override
+ public int compare(@Nonnull JDefinedClassOrInterface first,
+ @Nonnull JDefinedClassOrInterface second) {
+ return FORMATTER.getName(first).compareTo(FORMATTER.getName(second));
+ }});
+ for (JDefinedClassOrInterface type : anyTypeList) {
+ anyDexList.add(getDexInputVFileOfType(jackOutputLibrary, type));
}
}