Minor fixes
* add origin information to more diagnostics
* allow DEX input from files not just archives
* allow the empty string as true for system properties
Change-Id: I73c496f37b85460c0dbfb41f2d60ccb941071a02
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 47298f9..89a0826 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -165,7 +165,7 @@
private final ProguardConfigurationParserOptions.Builder parserOptionsBuilder =
ProguardConfigurationParserOptions.builder().readEnvironment();
- private final boolean allowDexInArchive =
+ private final boolean allowDexInputToR8 =
System.getProperty("com.android.tools.r8.allowDexInputToR8") != null;
// TODO(zerny): Consider refactoring CompatProguardCommandBuilder to avoid subclassing.
@@ -175,17 +175,17 @@
Builder(DiagnosticsHandler diagnosticsHandler) {
super(diagnosticsHandler);
- setIgnoreDexInArchive(!allowDexInArchive);
+ setIgnoreDexInArchive(!allowDexInputToR8);
}
private Builder(AndroidApp app) {
super(app);
- setIgnoreDexInArchive(!allowDexInArchive);
+ setIgnoreDexInArchive(!allowDexInputToR8);
}
private Builder(AndroidApp app, DiagnosticsHandler diagnosticsHandler) {
super(app, diagnosticsHandler);
- setIgnoreDexInArchive(!allowDexInArchive);
+ setIgnoreDexInArchive(!allowDexInputToR8);
}
// Internal
@@ -754,7 +754,7 @@
}
for (Path file : programFiles) {
- if (FileUtils.isDexFile(file)) {
+ if (FileUtils.isDexFile(file) && !allowDexInputToR8) {
reporter.error(new StringDiagnostic(
"R8 does not support compiling DEX inputs", new PathOrigin(file)));
}
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 2e5c1d4..5328880 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -232,7 +232,7 @@
Function<DexType, DexClass> getExisting,
InternalOptions options) {
if (classCollection != null) {
- Set<DexType> javaLibraryOverride = Sets.newIdentityHashSet();
+ Set<DexClass> javaLibraryOverride = Sets.newIdentityHashSet();
ImmutableMap.Builder<DexType, T> builder = ImmutableMap.builder();
classCollection.forEach(
(type, clazz) -> {
@@ -241,7 +241,7 @@
builder.put(type, clazz);
} else if (type.getPackageName().startsWith("java.")
&& (clazz.isLibraryClass() || other.isLibraryClass())) {
- javaLibraryOverride.add(type);
+ javaLibraryOverride.add(clazz.isLibraryClass() ? other : clazz);
}
});
if (!javaLibraryOverride.isEmpty()) {
@@ -254,17 +254,17 @@
}
private static void warnJavaLibraryOverride(
- InternalOptions options, Set<DexType> javaLibraryOverride) {
+ InternalOptions options, Set<DexClass> javaLibraryOverride) {
if (options.ignoreJavaLibraryOverride) {
return;
}
String joined =
javaLibraryOverride.stream()
.sorted()
- .map(DexType::toString)
+ .map(clazz -> clazz.toSourceString() + " (origin: " + clazz.getOrigin() + ")")
.collect(Collectors.joining(", "));
String message =
- "The following library types, prefixed by java.,"
+ "The following library types, prefixed by 'java.',"
+ " are present both as library and non library classes: "
+ joined
+ ". Library classes will be ignored.";
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 6244efe..4d0f480 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -2748,7 +2748,10 @@
+ context.type.toSourceString()
+ (clazz.isInterface() ? " implements " : " extends ")
+ "program class "
- + type.toSourceString());
+ + type.toSourceString()
+ + " (origin: "
+ + clazz.getOrigin()
+ + ")");
if (forceProguardCompatibility
|| options.getTestingOptions().allowLibraryExtendsProgramInFullMode) {
options.reporter.warning(message);
diff --git a/src/main/java/com/android/tools/r8/utils/StringUtils.java b/src/main/java/com/android/tools/r8/utils/StringUtils.java
index e657762..43a8d07 100644
--- a/src/main/java/com/android/tools/r8/utils/StringUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/StringUtils.java
@@ -399,7 +399,7 @@
}
public static boolean isTruthy(String string) {
- return string.equals("1") || StringUtils.toLowerCase(string).equals("true");
+ return string.isEmpty() || string.equals("1") || StringUtils.toLowerCase(string).equals("true");
}
public static boolean isWhitespace(int codePoint) {