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

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

check-flagged-apis: consider superclasses when looking up symbol

If a symbol can't be found in a class, (recursively) check the class'
superclass before reporting the symbol as missing.

Bug: 334870672
Test: atest --host check-flagged-apis-test
Change-Id: I8ef1fbfcc51e0c5ba00959536c087213d688fe39
parent c3f05a6d
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -220,6 +220,55 @@ class CheckFlaggedApisTest {
    assertEquals(expected, actual)
  }

  @Test
  fun testFindErrorsVerifySuperclass() {
    val apiSignature =
        """
          // Signature format: 2.0
          package android {
            @FlaggedApi("android.flag.foo") public final class C extends android.B {
              method @FlaggedApi("android.flag.foo") public boolean c();
              method @FlaggedApi("android.flag.foo") public boolean b();
              method @FlaggedApi("android.flag.foo") public boolean a();
            }
            public final class B extends android.A {
              method public boolean b();
            }
            public final class A {
              method public boolean a();
            }
          }
        """
            .trim()

    val apiVersions =
        """
          <?xml version="1.0" encoding="utf-8"?>
          <api version="3">
            <class name="android/C" since="1">
              <extends name="android/B"/>
              <method name="c()Z"/>
            </class>
            <class name="android/B" since="1">
              <extends name="android/A"/>
              <method name="b()Z"/>
            </class>
            <class name="android/A" since="1">
              <method name="a()Z"/>
            </class>
          </api>
        """
            .trim()

    val expected = setOf<ApiError>()
    val actual =
        findErrors(
            parseApiSignature("in-memory", apiSignature.byteInputStream()),
            parseFlagValues(generateFlagsProto(ENABLED, ENABLED)),
            parseApiVersions(apiVersions.byteInputStream()))
    assertEquals(expected, actual)
  }

  @Test
  fun testFindErrorsDisabledFlaggedApiIsPresent() {
    val expected =
+5 −0
Original line number Diff line number Diff line
@@ -378,6 +378,11 @@ internal fun findErrors(
      }
    }

    if (clazz.superclass != null) {
      val superclassSymbol = Symbol.createMethod(clazz.superclass, memberName)
      return containsSymbol(superclassSymbol)
    }

    return false
  }
  val errors = mutableSetOf<ApiError>()