Improve "Incompatible class" message
Includes file location in the message.
Bug: 295737759
Test: ./gradlew
Change-Id: I365ca6c721377a0a946ea7f3612ad34bd56a6b12
diff --git a/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiFile.kt b/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiFile.kt
index f811446..d4ff58f 100644
--- a/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiFile.kt
+++ b/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiFile.kt
@@ -42,7 +42,8 @@
import java.io.StringReader
import kotlin.text.Charsets.UTF_8
-class ApiFile(
+class ApiFile
+private constructor(
/** Implements [ResolverContext] interface */
override val classResolver: ClassResolver?
) : ResolverContext {
@@ -366,7 +367,10 @@
null -> maybeExistingClass
else -> {
if (!foundClass.isCompatible(maybeExistingClass)) {
- throw ApiParseException("Incompatible $foundClass definitions")
+ throw ApiParseException(
+ "Incompatible $foundClass definitions",
+ maybeExistingClass.position
+ )
} else {
foundClass
}
diff --git a/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiParseException.kt b/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiParseException.kt
index e70a545..c02ca6d 100644
--- a/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiParseException.kt
+++ b/metalava-model-text/src/main/java/com/android/tools/metalava/model/text/ApiParseException.kt
@@ -30,6 +30,11 @@
line = tokenizer.line
}
+ internal constructor(message: String, position: SourcePositionInfo) : super(message) {
+ file = position.file
+ line = position.line
+ }
+
override val message: String
get() {
val sb = StringBuilder()
diff --git a/src/test/java/com/android/tools/metalava/ApiFileTest.kt b/src/test/java/com/android/tools/metalava/ApiFileTest.kt
index 62e963e..cda9dbc 100644
--- a/src/test/java/com/android/tools/metalava/ApiFileTest.kt
+++ b/src/test/java/com/android/tools/metalava/ApiFileTest.kt
@@ -4181,7 +4181,7 @@
check(
signatureSources = arrayOf(source1, source2),
expectedFail =
- "Aborting: Unable to parse signature file: Incompatible class Test.pkg.Class1 definitions"
+ "Aborting: Unable to parse signature file: TESTROOT/project/load-api2.txt:2: Incompatible class Test.pkg.Class1 definitions"
)
}