Change CompilationError to not implement Diagnostics
Instances fo CompilationError previously reported as a Diagnostic is
not converted to a StringDiagnostic and that is reported instead.
Bug: 140073409
Change-Id: Iedd3668178fc6fa1132408e8fe4e64703205232c
diff --git a/src/main/java/com/android/tools/r8/BaseCommand.java b/src/main/java/com/android/tools/r8/BaseCommand.java
index 5eb8ce9..318305d 100644
--- a/src/main/java/com/android/tools/r8/BaseCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCommand.java
@@ -365,7 +365,7 @@
try {
action.run();
} catch (CompilationError e) {
- reporter.error(e);
+ reporter.error(e.toStringDiagnostic());
} catch (AbortException e) {
// Error was reported and exception will be thrown by build.
}
diff --git a/src/main/java/com/android/tools/r8/errors/CompilationError.java b/src/main/java/com/android/tools/r8/errors/CompilationError.java
index 5429b08..d165596 100644
--- a/src/main/java/com/android/tools/r8/errors/CompilationError.java
+++ b/src/main/java/com/android/tools/r8/errors/CompilationError.java
@@ -4,9 +4,9 @@
package com.android.tools.r8.errors;
import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.position.Position;
+import com.android.tools.r8.utils.StringDiagnostic;
/**
* Exception to signal an compilation error.
@@ -14,8 +14,7 @@
* <p>This is always an expected error and considered a user input issue. A user-understandable
* message must be provided.
*/
-@Keep
-public class CompilationError extends RuntimeException implements Diagnostic {
+public class CompilationError extends RuntimeException {
private final Origin origin;
private final Position position;
@@ -41,18 +40,19 @@
this.position = position;
}
- @Override
- public Origin getOrigin() {
- return origin;
+ public CompilationError withAdditionalOriginAndPositionInfo(Origin origin, Position position) {
+ if (this.origin == Origin.unknown() || this.position == Position.UNKNOWN) {
+ return new CompilationError(
+ getMessage(),
+ this,
+ this.origin != Origin.unknown() ? this.origin : origin,
+ this.position != Position.UNKNOWN ? this.position : position);
+ } else {
+ return this;
+ }
}
- @Override
- public Position getPosition() {
- return position;
- }
-
- @Override
- public String getDiagnosticMessage() {
- return getMessage();
+ public Diagnostic toStringDiagnostic() {
+ return new StringDiagnostic(getMessage(), origin, position);
}
}
\ No newline at end of file
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 2132dc7..6228ab1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -79,7 +79,6 @@
import com.android.tools.r8.naming.IdentifierNameStringMarker;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.position.MethodPosition;
-import com.android.tools.r8.position.Position;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.shaking.LibraryMethodOverrideAnalysis;
import com.android.tools.r8.shaking.MainDexClasses;
@@ -963,16 +962,7 @@
method, feedback, isProcessedConcurrently, callSiteInformation, outlineHandler, origin);
} catch (CompilationError e) {
// If rewriting throws a compilation error, attach the origin and method if missing.
- Origin errorOrigin = e.getOrigin();
- Position errorPosition = e.getPosition();
- if (errorOrigin == Origin.unknown() || errorPosition == Position.UNKNOWN) {
- throw new CompilationError(
- e.getMessage(),
- e,
- errorOrigin != Origin.unknown() ? errorOrigin : origin,
- errorPosition != Position.UNKNOWN ? errorPosition : new MethodPosition(method.method));
- }
- throw e;
+ throw e.withAdditionalOriginAndPositionInfo(origin, new MethodPosition(method.method));
}
}
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java b/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java
index 65bc602..dc01215 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNamingForMapApplier.java
@@ -59,16 +59,18 @@
if (signature.isQualified()) {
qualifiedMethodMembers.computeIfAbsent(signature, k -> new ArrayList<>(2)).add(entry);
} else if (methodMembers.put(signature, entry) != null) {
+ // TODO(b/140075815): Turn ApplyMappingError into a Diagnostic.
reporter.error(
ProguardMapError.duplicateSourceMember(
- signature.toString(), this.originalName, entry.position));
+ signature.toString(), this.originalName, entry.position).toStringDiagnostic());
}
} else {
FieldSignature signature = (FieldSignature) entry.getOriginalSignature();
if (!signature.isQualified() && fieldMembers.put(signature, entry) != null) {
+ // TODO(b/140075815): Turn ApplyMappingError into a Diagnostic.
reporter.error(
ProguardMapError.duplicateSourceMember(
- signature.toString(), this.originalName, entry.position));
+ signature.toString(), this.originalName, entry.position).toStringDiagnostic());
}
}
return this;
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index 49b58eb..0435887 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -306,9 +306,10 @@
appView
.options()
.reporter
+ // TODO(b/140075815): Turn ApplyMappingError into a Diagnostic.
.error(
ApplyMappingError.mapToExistingClass(
- type.toString(), mappedName.toString(), position));
+ type.toString(), mappedName.toString(), position).toStringDiagnostic());
} else {
mappedNames.put(type, mappedName);
}
diff --git a/src/main/java/com/android/tools/r8/naming/SeedMapper.java b/src/main/java/com/android/tools/r8/naming/SeedMapper.java
index d7f36da..a90566f 100644
--- a/src/main/java/com/android/tools/r8/naming/SeedMapper.java
+++ b/src/main/java/com/android/tools/r8/naming/SeedMapper.java
@@ -51,7 +51,8 @@
ClassNamingForMapApplier.builder(
javaTypeToDescriptor(renamedName), originalDescriptor, position, reporter);
if (map.put(originalDescriptor, classNamingBuilder) != null) {
- reporter.error(ProguardMapError.duplicateSourceClass(originalName, position));
+ // TODO(b/140075815): Turn ProguardMapError into a Diagnostic.
+ reporter.error(ProguardMapError.duplicateSourceClass(originalName, position).toStringDiagnostic());
}
return classNamingBuilder;
}
@@ -100,12 +101,13 @@
ClassNamingForMapApplier classNaming = mappings.get(key);
String existing = seenMappings.put(classNaming.renamedName, key);
if (existing != null) {
+ // TODO(b/140075815): Turn ApplyMappingError into a Diagnostic.
reporter.error(
ProguardMapError.duplicateTargetClass(
descriptorToJavaType(key),
descriptorToJavaType(existing),
descriptorToInternalName(classNaming.renamedName),
- classNaming.position));
+ classNaming.position).toStringDiagnostic());
}
// TODO(b/136694827) Enable when we have proper support
// Map<Signature, MemberNaming> seenMembers = new HashMap<>();
diff --git a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
index c63ef8b..16bde83 100644
--- a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
@@ -66,7 +66,7 @@
} catch (IOException e) {
throw reporter.fatalError(new ExceptionDiagnostic(e, extractIOExceptionOrigin(e)));
} catch (CompilationError e) {
- throw reporter.fatalError(e);
+ throw reporter.fatalError(e.toStringDiagnostic());
} catch (ResourceException e) {
throw reporter.fatalError(new ExceptionDiagnostic(e, e.getOrigin()));
} catch (AssertionError e) {
diff --git a/src/main/java/com/android/tools/r8/utils/Reporter.java b/src/main/java/com/android/tools/r8/utils/Reporter.java
index 928058e..2541f47 100644
--- a/src/main/java/com/android/tools/r8/utils/Reporter.java
+++ b/src/main/java/com/android/tools/r8/utils/Reporter.java
@@ -116,7 +116,7 @@
try {
action.run();
} catch (CompilationError e) {
- error(e);
+ error(e.toStringDiagnostic());
throw addSuppressedExceptions(new CompilationFailedException());
} catch (AbortException e) {
throw new CompilationFailedException(e);