Use CallableItem in place of MethodItem
The `MethodItem` type represents both a normal method as well as being
the super type of `ConstructorItem`. That organization causes a number
of issues in Metalava and has lead to quite a few issues where code
that only expected to be run on methods and not constructors was run on
both. So, a new type `CallableItem` has been added that will eventually
become the super type of both `MethodItem` and `ConstructorItem` and
`ConstructorItem` will no longer extend `MethodItem`.
This change prepares this code for that change by overriding
`visitCallable(CallableItem)` instead of `visitMethod(MethodItem)`
because the latter is only called for methods not constructors.
Bug: 352481366
Test: atest check-flagged-apis-test
Change-Id: I3039bc0154b00ca57cb48c7447c5901b991b57e5
diff --git a/tools/check-flagged-apis/src/com/android/checkflaggedapis/Main.kt b/tools/check-flagged-apis/src/com/android/checkflaggedapis/Main.kt
index 1125d39..d323c20 100644
--- a/tools/check-flagged-apis/src/com/android/checkflaggedapis/Main.kt
+++ b/tools/check-flagged-apis/src/com/android/checkflaggedapis/Main.kt
@@ -19,10 +19,10 @@
import android.aconfig.Aconfig
import com.android.tools.metalava.model.BaseItemVisitor
+import com.android.tools.metalava.model.CallableItem
import com.android.tools.metalava.model.ClassItem
import com.android.tools.metalava.model.FieldItem
import com.android.tools.metalava.model.Item
-import com.android.tools.metalava.model.MethodItem
import com.android.tools.metalava.model.text.ApiFile
import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.core.ProgramResult
@@ -274,15 +274,15 @@
}
}
- override fun visitMethod(method: MethodItem) {
- getFlagOrNull(method)?.let { flag ->
- val methodName = buildString {
- append(method.name())
+ override fun visitCallable(callable: CallableItem) {
+ getFlagOrNull(callable)?.let { flag ->
+ val callableSignature = buildString {
+ append(callable.name())
append("(")
- method.parameters().joinTo(this, separator = "") { it.type().internalName() }
+ callable.parameters().joinTo(this, separator = "") { it.type().internalName() }
append(")")
}
- val symbol = Symbol.createMethod(method.containingClass().qualifiedName(), methodName)
+ val symbol = Symbol.createMethod(callable.containingClass().qualifiedName(), callableSignature)
output.add(Pair(symbol, flag))
}
}