check-flagged-apis: parse classes
Teach check-flagged-apis to parse classes, including inner classes.
Bug: 334870672
Test: atest --host check-flagged-apis-test
Change-Id: I17f65d3af55a20a1920b47f4c47fd0e92f9fa852
diff --git a/tools/check-flagged-apis/src/com/android/checkflaggedapis/CheckFlaggedApisTest.kt b/tools/check-flagged-apis/src/com/android/checkflaggedapis/CheckFlaggedApisTest.kt
index 5d87a4c..62c9cbb 100644
--- a/tools/check-flagged-apis/src/com/android/checkflaggedapis/CheckFlaggedApisTest.kt
+++ b/tools/check-flagged-apis/src/com/android/checkflaggedapis/CheckFlaggedApisTest.kt
@@ -16,6 +16,8 @@
package com.android.checkflaggedapis
import android.aconfig.Aconfig
+import android.aconfig.Aconfig.flag_state.DISABLED
+import android.aconfig.Aconfig.flag_state.ENABLED
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.InputStream
@@ -28,10 +30,12 @@
"""
// Signature format: 2.0
package android {
- public final class Clazz {
+ @FlaggedApi("android.flag.foo") public final class Clazz {
ctor public Clazz();
field @FlaggedApi("android.flag.foo") public static final int FOO = 1; // 0x1
}
+ @FlaggedApi("android.flag.bar") public static class Clazz.Builder {
+ }
}
"""
.trim()
@@ -44,12 +48,17 @@
<method name="<init>()V"/>
<field name="FOO"/>
</class>
+ <class name="android/Clazz${"$"}Builder" since="2">
+ </class>
</api>
"""
.trim()
-private fun generateFlagsProto(fooState: Aconfig.flag_state): InputStream {
- val parsed_flag =
+private fun generateFlagsProto(
+ fooState: Aconfig.flag_state,
+ barState: Aconfig.flag_state
+): InputStream {
+ val fooFlag =
Aconfig.parsed_flag
.newBuilder()
.setPackage("android.flag")
@@ -57,9 +66,18 @@
.setState(fooState)
.setPermission(Aconfig.flag_permission.READ_ONLY)
.build()
- val parsed_flags = Aconfig.parsed_flags.newBuilder().addParsedFlag(parsed_flag).build()
+ val barFlag =
+ Aconfig.parsed_flag
+ .newBuilder()
+ .setPackage("android.flag")
+ .setName("bar")
+ .setState(barState)
+ .setPermission(Aconfig.flag_permission.READ_ONLY)
+ .build()
+ val flags =
+ Aconfig.parsed_flags.newBuilder().addParsedFlag(fooFlag).addParsedFlag(barFlag).build()
val binaryProto = ByteArrayOutputStream()
- parsed_flags.writeTo(binaryProto)
+ flags.writeTo(binaryProto)
return ByteArrayInputStream(binaryProto.toByteArray())
}
@@ -67,21 +85,32 @@
class CheckFlaggedApisTest {
@Test
fun testParseApiSignature() {
- val expected = setOf(Pair(Symbol("android.Clazz.FOO"), Flag("android.flag.foo")))
+ val expected =
+ setOf(
+ Pair(Symbol("android.Clazz"), Flag("android.flag.foo")),
+ Pair(Symbol("android.Clazz.FOO"), Flag("android.flag.foo")),
+ Pair(Symbol("android.Clazz.Builder"), Flag("android.flag.bar")),
+ )
val actual = parseApiSignature("in-memory", API_SIGNATURE.byteInputStream())
assertEquals(expected, actual)
}
@Test
fun testParseFlagValues() {
- val expected: Map<Flag, Boolean> = mapOf(Flag("android.flag.foo") to true)
- val actual = parseFlagValues(generateFlagsProto(Aconfig.flag_state.ENABLED))
+ val expected: Map<Flag, Boolean> =
+ mapOf(Flag("android.flag.foo") to true, Flag("android.flag.bar") to true)
+ val actual = parseFlagValues(generateFlagsProto(ENABLED, ENABLED))
assertEquals(expected, actual)
}
@Test
fun testParseApiVersions() {
- val expected: Set<Symbol> = setOf(Symbol("android.Clazz.FOO"))
+ val expected: Set<Symbol> =
+ setOf(
+ Symbol("android.Clazz"),
+ Symbol("android.Clazz.FOO"),
+ Symbol("android.Clazz.Builder"),
+ )
val actual = parseApiVersions(API_VERSIONS.byteInputStream())
assertEquals(expected, actual)
}
@@ -92,7 +121,7 @@
val actual =
findErrors(
parseApiSignature("in-memory", API_SIGNATURE.byteInputStream()),
- parseFlagValues(generateFlagsProto(Aconfig.flag_state.ENABLED)),
+ parseFlagValues(generateFlagsProto(ENABLED, ENABLED)),
parseApiVersions(API_VERSIONS.byteInputStream()))
assertEquals(expected, actual)
}
@@ -101,11 +130,15 @@
fun testFindErrorsDisabledFlaggedApiIsPresent() {
val expected =
setOf<ApiError>(
- DisabledFlaggedApiIsPresentError(Symbol("android.Clazz.FOO"), Flag("android.flag.foo")))
+ DisabledFlaggedApiIsPresentError(Symbol("android.Clazz"), Flag("android.flag.foo")),
+ DisabledFlaggedApiIsPresentError(Symbol("android.Clazz.FOO"), Flag("android.flag.foo")),
+ DisabledFlaggedApiIsPresentError(
+ Symbol("android.Clazz.Builder"), Flag("android.flag.bar")),
+ )
val actual =
findErrors(
parseApiSignature("in-memory", API_SIGNATURE.byteInputStream()),
- parseFlagValues(generateFlagsProto(Aconfig.flag_state.DISABLED)),
+ parseFlagValues(generateFlagsProto(DISABLED, DISABLED)),
parseApiVersions(API_VERSIONS.byteInputStream()))
assertEquals(expected, actual)
}