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

Commit 090155e8 authored by Yiming Pan's avatar Yiming Pan
Browse files

Change API format in the map file.

* Parameter list should be a part of the API signature.
* Package, class, and method names are stored separately so they don't
  need to be parsed when being read.

Bug: 315412454
Test: mmm -j frameworks/base/api/coverage/tools/:extract-flagged-apis
      extract-flagged-apis <input api.text file> <output pb file>
Change-Id: I769cc10831f1c50c71e71cbaadec355f21258baf
parent f5d3064c
Loading
Loading
Loading
Loading
+34 −26
Original line number Diff line number Diff line
@@ -23,9 +23,10 @@ import java.io.FileWriter
/** Usage: extract-flagged-apis <api text file> <output .pb file> */
fun main(args: Array<String>) {
    var cb = ApiFile.parseApi(listOf(File(args[0])))
    val flagToApi = mutableMapOf<String, MutableList<String>>()
    cb.getPackages()
        .allClasses()
    var builder = FlagApiMap.newBuilder()
    for (pkg in cb.getPackages().packages) {
        var packageName = pkg.qualifiedName()
        pkg.allClasses()
            .filter { it.methods().size > 0 }
            .forEach {
                for (method in it.methods()) {
@@ -36,22 +37,29 @@ fun main(args: Array<String>) {
                            ?.value
                            ?.value()
                    if (flagValue != null && flagValue is String) {
                    val methodQualifiedName = "${it.qualifiedName()}.${method.name()}"
                    if (flagToApi.containsKey(flagValue)) {
                        flagToApi.get(flagValue)?.add(methodQualifiedName)
                    } else {
                        flagToApi.put(flagValue, mutableListOf(methodQualifiedName))
                        var api =
                            JavaMethod.newBuilder()
                                .setPackageName(packageName)
                                .setClassName(it.fullName())
                                .setMethodName(method.name())
                        for (param in method.parameters()) {
                            api.addParameterTypes(param.type().toTypeString())
                        }
                        if (builder.containsFlagToApi(flagValue)) {
                            var updatedApis =
                                builder
                                    .getFlagToApiOrThrow(flagValue)
                                    .toBuilder()
                                    .addJavaMethods(api)
                                    .build()
                            builder.putFlagToApi(flagValue, updatedApis)
                        } else {
                            var apis = FlaggedApis.newBuilder().addJavaMethods(api).build()
                            builder.putFlagToApi(flagValue, apis)
                        }
                    }
                }
    var builder = FlagApiMap.newBuilder()
    for (flag in flagToApi.keys) {
        var flaggedApis = FlaggedApis.newBuilder()
        for (method in flagToApi.get(flag).orEmpty()) {
            flaggedApis.addFlaggedApi(FlaggedApi.newBuilder().setQualifiedName(method))
            }
        builder.putFlagToApi(flag, flaggedApis.build())
    }
    val flagApiMap = builder.build()
    FileWriter(args[1]).use { it.write(flagApiMap.toString()) }
+6 −3
Original line number Diff line number Diff line
@@ -25,10 +25,13 @@ message FlagApiMap {
}

message FlaggedApis {
  repeated FlaggedApi flagged_api = 1;
  repeated JavaMethod java_methods = 1;
}

message FlaggedApi {
  string qualified_name = 1;
message JavaMethod {
  string package_name = 1;
  string class_name = 2;
  string method_name = 3;
  repeated string parameter_types = 4;
}