Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9acbefe2 authored by Paul Duffin's avatar Paul Duffin
Browse files

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
parent 94d50220
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -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))
          }
        }