Merge "Avoid calling toString on all dex strings to collect markers."
diff --git a/src/main/java/com/android/tools/r8/ProgramResourceProvider.java b/src/main/java/com/android/tools/r8/ProgramResourceProvider.java
index 0dcc619..76d340c 100644
--- a/src/main/java/com/android/tools/r8/ProgramResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/ProgramResourceProvider.java
@@ -9,4 +9,8 @@
public interface ProgramResourceProvider {
Collection<ProgramResource> getProgramResources() throws ResourceException;
+
+ default DataResourceProvider getDataResourceProvider() {
+ return null;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 919e982..a52d694 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -228,12 +228,6 @@
new EnsureNonDexProgramResourceProvider(programProvider));
}
- public Builder addDataResourceProvider(DataResourceProvider dataResourceProvider) {
- assert dataResourceProvider != null;
- getAppBuilder().addDataResourceProvider(dataResourceProvider);
- return self();
- }
-
@Override
protected InternalProgramOutputPathConsumer createProgramOutputConsumer(
Path path,
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index 7dec61a..a478860 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -114,7 +114,7 @@
classReader.readSources();
ThreadUtils.awaitFutures(futures);
classReader.initializeLazyClassCollection(builder);
- builder.replaceDataResourceProviders(inputApp.getDataResourceProviders());
+ builder.addProgramResourceProviders(inputApp.getProgramResourceProviders());
} catch (ResourceException e) {
throw options.reporter.fatalError(new StringDiagnostic(e.getMessage(), e.getOrigin()));
} finally {
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index b8d17ce..df16622 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.DataResourceProvider;
import com.android.tools.r8.DataResourceProvider.Visitor;
import com.android.tools.r8.DexIndexedConsumer;
+import com.android.tools.r8.ProgramResourceProvider;
import com.android.tools.r8.ResourceException;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.DexOverflowException;
@@ -42,9 +43,11 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
+import java.util.stream.Collectors;
public class ApplicationWriter {
@@ -297,7 +300,14 @@
}
DataResourceConsumer dataResourceConsumer = options.dataResourceConsumer;
if (dataResourceConsumer != null) {
- for (DataResourceProvider dataResourceProvider : application.dataResourceProviders) {
+
+ List<DataResourceProvider> dataResourceProviders = application.programResourceProviders
+ .stream()
+ .map(ProgramResourceProvider::getDataResourceProvider)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+
+ for (DataResourceProvider dataResourceProvider : dataResourceProviders) {
try {
dataResourceProvider.accept(new Visitor() {
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index e908b64..ead547f 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -6,7 +6,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import com.android.tools.r8.DataResourceProvider;
+import com.android.tools.r8.ProgramResourceProvider;
import com.android.tools.r8.dex.ApplicationReader.ProgramClassConflictResolver;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.naming.ClassNameMapper;
@@ -27,7 +27,7 @@
// Maps type into class, may be used concurrently.
final ProgramClassCollection programClasses;
- public final ImmutableList<DataResourceProvider> dataResourceProviders;
+ public final ImmutableList<ProgramResourceProvider> programResourceProviders;
public final ImmutableSet<DexType> mainDexList;
public final String deadCode;
@@ -47,7 +47,7 @@
DexApplication(
ClassNameMapper proguardMap,
ProgramClassCollection programClasses,
- ImmutableList<DataResourceProvider> dataResourceProviders,
+ ImmutableList<ProgramResourceProvider> programResourceProviders,
ImmutableSet<DexType> mainDexList,
String deadCode,
DexItemFactory dexItemFactory,
@@ -56,7 +56,7 @@
assert programClasses != null;
this.proguardMap = proguardMap;
this.programClasses = programClasses;
- this.dataResourceProviders = dataResourceProviders;
+ this.programResourceProviders = programResourceProviders;
this.mainDexList = mainDexList;
this.deadCode = deadCode;
this.dexItemFactory = dexItemFactory;
@@ -118,7 +118,7 @@
final List<DexProgramClass> programClasses;
- final List<DataResourceProvider> dataResourceProviders = new ArrayList<>();
+ final List<ProgramResourceProvider> programResourceProviders = new ArrayList<>();
public final DexItemFactory dexItemFactory;
ClassNameMapper proguardMap;
@@ -141,7 +141,7 @@
public Builder(DexApplication application) {
programClasses = application.programClasses.getAllClasses();
- replaceDataResourceProviders(application.dataResourceProviders);
+ addProgramResourceProviders(application.programResourceProviders);
proguardMap = application.getProguardMap();
timing = application.timing;
highestSortingString = application.highestSortingString;
@@ -164,11 +164,10 @@
return self();
}
- public synchronized T replaceDataResourceProviders(
- List<DataResourceProvider> dataResourceProviders) {
- this.dataResourceProviders.clear();
- if (dataResourceProviders != null) {
- this.dataResourceProviders.addAll(dataResourceProviders);
+ public synchronized T addProgramResourceProviders(
+ List<ProgramResourceProvider> programResourceProviders) {
+ if (programResourceProviders != null) {
+ this.programResourceProviders.addAll(programResourceProviders);
}
return self();
}
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index a28d8ef..8d5f0d0 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -6,7 +6,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import com.android.tools.r8.DataResourceProvider;
+import com.android.tools.r8.ProgramResourceProvider;
import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.utils.ProgramClassCollection;
import com.android.tools.r8.utils.Timing;
@@ -25,12 +25,12 @@
private DirectMappedDexApplication(ClassNameMapper proguardMap,
ProgramClassCollection programClasses,
- ImmutableList<DataResourceProvider> dataResourceProviders,
+ ImmutableList<ProgramResourceProvider> programResourceProviders,
ImmutableMap<DexType, DexLibraryClass> libraryClasses,
ImmutableSet<DexType> mainDexList, String deadCode,
DexItemFactory dexItemFactory, DexString highestSortingString,
Timing timing) {
- super(proguardMap, programClasses, dataResourceProviders, mainDexList, deadCode,
+ super(proguardMap, programClasses, programResourceProviders, mainDexList, deadCode,
dexItemFactory, highestSortingString, timing);
this.libraryClasses = libraryClasses;
}
@@ -119,7 +119,7 @@
proguardMap,
ProgramClassCollection.create(
programClasses, ProgramClassCollection::resolveClassConflictImpl),
- ImmutableList.copyOf(dataResourceProviders),
+ ImmutableList.copyOf(programResourceProviders),
libraryClasses.stream().collect(ImmutableMap.toImmutableMap(c -> c.type, c -> c)),
ImmutableSet.copyOf(mainDexList),
deadCode,
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index 6eb9ce5..b648e41 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -6,7 +6,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import com.android.tools.r8.DataResourceProvider;
+import com.android.tools.r8.ProgramResourceProvider;
import com.android.tools.r8.dex.ApplicationReader.ProgramClassConflictResolver;
import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.utils.ClasspathClassCollection;
@@ -28,13 +28,13 @@
*/
private LazyLoadedDexApplication(ClassNameMapper proguardMap,
ProgramClassCollection programClasses,
- ImmutableList<DataResourceProvider> dataResourceProviders,
+ ImmutableList<ProgramResourceProvider> programResourceProviders,
ClasspathClassCollection classpathClasses,
LibraryClassCollection libraryClasses,
ImmutableSet<DexType> mainDexList, String deadCode,
DexItemFactory dexItemFactory, DexString highestSortingString,
Timing timing) {
- super(proguardMap, programClasses, dataResourceProviders, mainDexList, deadCode,
+ super(proguardMap, programClasses, programResourceProviders, mainDexList, deadCode,
dexItemFactory, highestSortingString, timing);
this.classpathClasses = classpathClasses;
this.libraryClasses = libraryClasses;
@@ -122,7 +122,7 @@
return new LazyLoadedDexApplication(
proguardMap,
ProgramClassCollection.create(programClasses, resolver),
- ImmutableList.copyOf(dataResourceProviders),
+ ImmutableList.copyOf(programResourceProviders),
classpathClasses,
libraryClasses,
ImmutableSet.copyOf(mainDexList),
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index 1bf193b..d8dffea 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.ArchiveClassFileProvider;
import com.android.tools.r8.ClassFileConsumer;
import com.android.tools.r8.ClassFileResourceProvider;
-import com.android.tools.r8.DataResourceProvider;
import com.android.tools.r8.DexFilePerClassFileConsumer;
import com.android.tools.r8.DexIndexedConsumer;
import com.android.tools.r8.DirectoryClassFileProvider;
@@ -49,7 +48,6 @@
public class AndroidApp {
private final ImmutableList<ProgramResourceProvider> programResourceProviders;
- private final ImmutableList<DataResourceProvider> dataResourceProviders;
private final ImmutableMap<Resource, String> programResourcesMainDescriptor;
private final ImmutableList<ClassFileResourceProvider> classpathResourceProviders;
private final ImmutableList<ClassFileResourceProvider> libraryResourceProviders;
@@ -61,7 +59,6 @@
// See factory methods and AndroidApp.Builder below.
private AndroidApp(
ImmutableList<ProgramResourceProvider> programResourceProviders,
- ImmutableList<DataResourceProvider> dataResourceProviders,
ImmutableMap<Resource, String> programResourcesMainDescriptor,
ImmutableList<ClassFileResourceProvider> classpathResourceProviders,
ImmutableList<ClassFileResourceProvider> libraryResourceProviders,
@@ -69,7 +66,6 @@
List<StringResource> mainDexListResources,
List<String> mainDexClasses) {
this.programResourceProviders = programResourceProviders;
- this.dataResourceProviders = dataResourceProviders;
this.programResourcesMainDescriptor = programResourcesMainDescriptor;
this.classpathResourceProviders = classpathResourceProviders;
this.libraryResourceProviders = libraryResourceProviders;
@@ -146,11 +142,6 @@
return programResourceProviders;
}
- /** Get non program resource providers. */
- public List<DataResourceProvider> getDataResourceProviders() {
- return dataResourceProviders;
- }
-
/** Get classpath resource providers. */
public List<ClassFileResourceProvider> getClasspathResourceProviders() {
return classpathResourceProviders;
@@ -276,7 +267,6 @@
private final List<ProgramResourceProvider> programResourceProviders = new ArrayList<>();
private final List<ProgramResource> programResources = new ArrayList<>();
- private final List<DataResourceProvider> dataResourceProviders = new ArrayList<>();
private final Map<ProgramResource, String> programResourcesMainDescriptor = new HashMap<>();
private final List<ClassFileResourceProvider> classpathResourceProviders = new ArrayList<>();
private final List<ClassFileResourceProvider> libraryResourceProviders = new ArrayList<>();
@@ -300,7 +290,6 @@
programResourceProviders.addAll(app.programResourceProviders);
classpathResourceProviders.addAll(app.classpathResourceProviders);
libraryResourceProviders.addAll(app.libraryResourceProviders);
- dataResourceProviders.addAll(app.dataResourceProviders);
mainDexListResources = app.mainDexListResources;
mainDexListClasses = app.mainDexClasses;
}
@@ -329,8 +318,6 @@
ArchiveResourceProvider archiveResourceProvider =
new ArchiveResourceProvider(archive, ignoreDexInArchive);
addProgramResourceProvider(archiveResourceProvider);
- addDataResourceProvider(archiveResourceProvider);
-
}
return this;
}
@@ -341,12 +328,6 @@
return this;
}
- public Builder addDataResourceProvider(DataResourceProvider provider) {
- assert provider != null;
- dataResourceProviders.add(provider);
- return this;
- }
-
/**
* Add classpath file resources.
*/
@@ -562,7 +543,6 @@
}
return new AndroidApp(
ImmutableList.copyOf(programResourceProviders),
- ImmutableList.copyOf(dataResourceProviders),
ImmutableMap.copyOf(programResourcesMainDescriptor),
ImmutableList.copyOf(classpathResourceProviders),
ImmutableList.copyOf(libraryResourceProviders),
@@ -583,7 +563,6 @@
ArchiveResourceProvider archiveResourceProvider = new ArchiveResourceProvider(
FilteredClassPath.unfiltered(file), ignoreDexInArchive);
addProgramResourceProvider(archiveResourceProvider);
- addDataResourceProvider(archiveResourceProvider);
} else {
throw new CompilationError("Unsupported source file type", new PathOrigin(file));
}
diff --git a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
index 9c33fc5..37aa208 100644
--- a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
@@ -99,6 +99,11 @@
}
@Override
+ public DataResourceProvider getDataResourceProvider() {
+ return this;
+ }
+
+ @Override
public void accept(Visitor resourceBrowser) throws ResourceException {
try (ZipFile zipFile = new ZipFile(archive.getPath().toFile())) {
final Enumeration<? extends ZipEntry> entries = zipFile.entries();