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

Commit b4a14bfa authored by Mårten Kongstad's avatar Mårten Kongstad
Browse files

check-flagged-apis: add support for method with parameters

Teach check-flagged-apis to parse methods containing parameters.

Bug: 334870672
Test: atest --host check-flagged-apis-test
Change-Id: I171660b914b73fd85e03ed9300c2c81f33d80d61
parent ece054c8
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ private val API_SIGNATURE =
          ctor @FlaggedApi("android.flag.foo") public Clazz();
          field @FlaggedApi("android.flag.foo") public static final int FOO = 1; // 0x1
          method @FlaggedApi("android.flag.foo") public int getErrorCode();
          method @FlaggedApi("android.flag.foo") public boolean setData(int, int[][], @NonNull android.util.Utility<T, U>);
          method @FlaggedApi("android.flag.foo") public boolean setVariableData(int, android.util.Atom...);
          method @FlaggedApi("android.flag.foo") public boolean innerClassArg(android.Clazz.Builder);
        }
        @FlaggedApi("android.flag.bar") public static class Clazz.Builder {
        }
@@ -49,6 +52,9 @@ private val API_VERSIONS =
          <method name="&lt;init>()V"/>
          <field name="FOO"/>
          <method name="getErrorCode()I"/>
          <method name="setData(I[[ILandroid/util/Utility;)Z"/>
          <method name="setVariableData(I[Landroid/util/Atom;)Z"/>
          <method name="innerClassArg(Landroid/Clazz${"$"}Builder;)"/>
        </class>
        <class name="android/Clazz${"$"}Builder" since="2">
        </class>
@@ -93,6 +99,15 @@ class CheckFlaggedApisTest {
            Pair(Symbol("android/Clazz/Clazz()"), Flag("android.flag.foo")),
            Pair(Symbol("android/Clazz/FOO"), Flag("android.flag.foo")),
            Pair(Symbol("android/Clazz/getErrorCode()"), Flag("android.flag.foo")),
            Pair(
                Symbol("android/Clazz/setData(I[[ILandroid/util/Utility;)"),
                Flag("android.flag.foo")),
            Pair(
                Symbol("android/Clazz/setVariableData(I[Landroid/util/Atom;)"),
                Flag("android.flag.foo")),
            Pair(
                Symbol("android/Clazz/innerClassArg(Landroid/Clazz/Builder;)"),
                Flag("android.flag.foo")),
            Pair(Symbol("android/Clazz/Builder"), Flag("android.flag.bar")),
        )
    val actual = parseApiSignature("in-memory", API_SIGNATURE.byteInputStream())
@@ -115,6 +130,9 @@ class CheckFlaggedApisTest {
            Symbol("android/Clazz/Clazz()"),
            Symbol("android/Clazz/FOO"),
            Symbol("android/Clazz/getErrorCode()"),
            Symbol("android/Clazz/setData(I[[ILandroid/util/Utility;)"),
            Symbol("android/Clazz/setVariableData(I[Landroid/util/Atom;)"),
            Symbol("android/Clazz/innerClassArg(Landroid/Clazz/Builder;)"),
            Symbol("android/Clazz/Builder"),
        )
    val actual = parseApiVersions(API_VERSIONS.byteInputStream())
@@ -142,6 +160,15 @@ class CheckFlaggedApisTest {
            DisabledFlaggedApiIsPresentError(Symbol("android/Clazz/FOO"), Flag("android.flag.foo")),
            DisabledFlaggedApiIsPresentError(
                Symbol("android/Clazz/getErrorCode()"), Flag("android.flag.foo")),
            DisabledFlaggedApiIsPresentError(
                Symbol("android/Clazz/setData(I[[ILandroid/util/Utility;)"),
                Flag("android.flag.foo")),
            DisabledFlaggedApiIsPresentError(
                Symbol("android/Clazz/setVariableData(I[Landroid/util/Atom;)"),
                Flag("android.flag.foo")),
            DisabledFlaggedApiIsPresentError(
                Symbol("android/Clazz/innerClassArg(Landroid/Clazz/Builder;)"),
                Flag("android.flag.foo")),
            DisabledFlaggedApiIsPresentError(
                Symbol("android/Clazz/Builder"), Flag("android.flag.bar")),
        )
+1 −6
Original line number Diff line number Diff line
@@ -178,7 +178,6 @@ The tool will exit with a non-zero exit code if any flagged APIs are found to be
}

internal fun parseApiSignature(path: String, input: InputStream): Set<Pair<Symbol, Flag>> {
  // TODO(334870672): add support for metods
  val output = mutableSetOf<Pair<Symbol, Flag>>()
  val visitor =
      object : BaseItemVisitor() {
@@ -203,11 +202,7 @@ internal fun parseApiSignature(path: String, input: InputStream): Set<Pair<Symbo
              append(".")
              append(method.name())
              append("(")
              // TODO(334870672): replace this early return with proper parsing of the command line
              // arguments, followed by translation to Lname/of/class; + III format
              if (!method.parameters().isEmpty()) {
                return
              }
              method.parameters().joinTo(this, separator = "") { it.type().internalName() }
              append(")")
            }
            val symbol = Symbol.create(name)