diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java | 23 | ||||
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java | 15 |
2 files changed, 32 insertions, 6 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java b/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java index 962de7eae3..20a63bf120 100644 --- a/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java +++ b/src/tools/android/java/com/google/devtools/build/android/AndroidDataMerger.java @@ -53,6 +53,23 @@ class AndroidDataMerger { boolean checkEquality(DataSource one, DataSource two) throws IOException; } + /** + * Compares two paths for equality. Does not check the contents of the files. + * + * <p>TODO(b/74333698): Always check the contents of conflicting resources + */ + static class PathComparingChecker implements SourceChecker { + + static SourceChecker create() { + return new PathComparingChecker(); + } + + @Override + public boolean checkEquality(DataSource one, DataSource two) throws IOException { + return one.getPath().equals(two.getPath()); + } + } + /** Compares two paths by the contents of the files. */ static class ContentComparingChecker implements SourceChecker { @@ -125,8 +142,10 @@ class AndroidDataMerger { /** Creates a merger with a file contents hashing deduplicator. */ static AndroidDataMerger createWithPathDeduplictor( - ListeningExecutorService executorService, AndroidDataDeserializer deserializer) { - return new AndroidDataMerger(ContentComparingChecker.create(), executorService, deserializer); + ListeningExecutorService executorService, + AndroidDataDeserializer deserializer, + SourceChecker checker) { + return new AndroidDataMerger(checker, executorService, deserializer); } private AndroidDataMerger( diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java index a6e97b9161..a5126c6c28 100644 --- a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java +++ b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceMerger.java @@ -18,6 +18,9 @@ import com.android.builder.core.VariantType; import com.android.ide.common.internal.PngCruncher; import com.google.common.base.Stopwatch; import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.devtools.build.android.AndroidDataMerger.ContentComparingChecker; +import com.google.devtools.build.android.AndroidDataMerger.PathComparingChecker; +import com.google.devtools.build.android.AndroidDataMerger.SourceChecker; import java.io.IOException; import java.nio.file.Path; import java.util.List; @@ -75,7 +78,8 @@ public class AndroidResourceMerger { primaryManifest, type != VariantType.LIBRARY, deserializer, - throwOnResourceConflict); + throwOnResourceConflict, + ContentComparingChecker.create()); timer.reset().start(); if (symbolsOut != null) { AndroidDataSerializer serializer = AndroidDataSerializer.create(); @@ -112,11 +116,13 @@ public class AndroidResourceMerger { Path primaryManifest, boolean allowPrimaryOverrideAll, AndroidDataDeserializer deserializer, - boolean throwOnResourceConflict) { + boolean throwOnResourceConflict, + SourceChecker checker) { Stopwatch timer = Stopwatch.createStarted(); + // TODO(b/74333698): Always check the contents of conflicting resources try { AndroidDataMerger merger = - AndroidDataMerger.createWithPathDeduplictor(executorService, deserializer); + AndroidDataMerger.createWithPathDeduplictor(executorService, deserializer, checker); return merger.loadAndMerge( transitive, direct, @@ -229,7 +235,8 @@ public class AndroidResourceMerger { primaryManifest, false, deserializer, - throwOnResourceConflict); + throwOnResourceConflict, + PathComparingChecker.create()); timer.reset().start(); merged.writeResourceClass(rclassWriter); logger.fine( |