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
This commit is contained in:
Paul Duffin
2024-07-16 13:35:31 +01:00
parent 94d502200c
commit 9acbefe223

View File

@@ -19,10 +19,10 @@ package com.android.checkflaggedapis
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 @@ internal fun parseApiSignature(path: String, input: InputStream): Set<Pair<Symbo
}
}
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))
}
}