Merge "Improve the error messages for invalid locals information"
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 9b893d1..dc0cd0f 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -225,7 +225,8 @@
private final Map<Origin, List<InvalidParameterAnnotationInfo>> warningInvalidParameterAnnotations
= new HashMap<>();
- private final Map<Origin, List<DexEncodedMethod>> warningInvalidDebugInfo = new HashMap<>();
+ private final Map<Origin, List<Pair<DexEncodedMethod, String>>> warningInvalidDebugInfo
+ = new HashMap<>();
// Don't read code from dex files. Used to extract non-code information from vdex files where
// the code contains unsupported byte codes.
@@ -268,7 +269,8 @@
public void warningInvalidDebugInfo(
DexEncodedMethod method, Origin origin, InvalidDebugInfoException e) {
synchronized (warningInvalidDebugInfo) {
- warningInvalidDebugInfo.computeIfAbsent(origin, k -> new ArrayList<>()).add(method);
+ warningInvalidDebugInfo.computeIfAbsent(
+ origin, k -> new ArrayList<>()).add(new Pair<>(method, e.getMessage()));
}
}
@@ -299,7 +301,7 @@
}
if (warningInvalidDebugInfo.size() > 0) {
int count = 0;
- for (List<DexEncodedMethod> methods : warningInvalidDebugInfo.values()) {
+ for (List<Pair<DexEncodedMethod, String>> methods : warningInvalidDebugInfo.values()) {
count += methods.size();
}
reporter.warning(
@@ -309,10 +311,11 @@
+ (count == 1 ? " method." : " methods.")));
for (Origin origin : new TreeSet<>(warningInvalidDebugInfo.keySet())) {
StringBuilder builder = new StringBuilder("Methods with invalid locals information:");
- for (DexEncodedMethod method : warningInvalidDebugInfo.get(origin)) {
- builder.append("\n ").append(method.toSourceString());
+ for (Pair<DexEncodedMethod, String> method : warningInvalidDebugInfo.get(origin)) {
+ builder.append("\n ").append(method.getFirst().toSourceString());
+ builder.append("\n ").append(method.getSecond());
}
- reporter.info(new StringDiagnostic(builder.toString(), origin));
+ reporter.warning(new StringDiagnostic(builder.toString(), origin));
}
printed = true;
printOutdatedToolchain = true;