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

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

check-flagged-apis: allow / chars in Symbol names

Allow forward slash characters (/) in Symbol names: when adding support
for method arguments, this will be needed.

The current implementation does not change; forward slash conversions to
dots still happen, but now explicitly at the call site of Symbol.create.

Bug: 334870672
Test: atest --host check-flagged-apis-test
Change-Id: Ia860d7b0c8703fcc56fec6ea722cf995ccf20cd0
parent 40da9704
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ import org.w3c.dom.Node
@JvmInline
internal value class Symbol(val name: String) {
  companion object {
    private val FORBIDDEN_CHARS = listOf('/', '#', '$')
    private val FORBIDDEN_CHARS = listOf('#', '$')

    /** Create a new Symbol from a String that may include delimiters other than dot. */
    fun create(name: String): Symbol {
@@ -243,7 +243,7 @@ internal fun parseApiVersions(input: InputStream): Set<Symbol> {
        requireNotNull(cls.getAttribute("name")) {
          "Bad XML: <class> element without name attribute"
        }
    output.add(Symbol.create(className))
    output.add(Symbol.create(className.replace("/", ".")))
  }

  val fields = document.getElementsByTagName("field")
@@ -255,9 +255,8 @@ internal fun parseApiVersions(input: InputStream): Set<Symbol> {
          "Bad XML: <field> element without name attribute"
        }
    val className =
        requireNotNull(field.getParentNode()) { "Bad XML: top level <field> element" }
            .getAttribute("name")
    output.add(Symbol.create("$className.$fieldName"))
        requireNotNull(field.getParentNode()?.getAttribute("name")) { "Bad XML: top level <field> element" }
    output.add(Symbol.create("${className.replace("/", ".")}.$fieldName"))
  }

  val methods = document.getElementsByTagName("method")
@@ -280,7 +279,7 @@ internal fun parseApiVersions(input: InputStream): Set<Symbol> {
    if (methodName == "<init>") {
      methodName = packageAndClassName.split("/").last()
    }
    output.add(Symbol.create("$packageAndClassName.$methodName($methodArgs)"))
    output.add(Symbol.create("${packageAndClassName.replace("/", ".")}.$methodName($methodArgs)"))
  }

  return output