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

Commit d336704e authored by Winson's avatar Winson Committed by Winson Chiu
Browse files

Add generic import support for Codegen

Supports any kind of DataClass or NonNull-type annotations instead of
enforcing the Android framework package.

Bug: 195012034

Test: manual, generate for DomainVerificationInfo, verify no change
Test: manual, generate for mainline class, verify no internal import

Change-Id: I0360281aa20b7f2c6e75dec88a92b810fa69b9b7
parent fb33c430
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -53,10 +53,25 @@ interface ImportsProvider {
     * Optionally shortens a class reference if there's a corresponding import present
     */
    fun classRef(fullName: String): String {

        val pkg = fullName.substringBeforeLast(".")
        val simpleName = fullName.substringAfterLast(".")
        if (fileAst.imports.any { imprt ->
        val imports = fileAst.imports

        // If an import of the same class name is available,
        // use it instead of the internal Android package variants.
        if (fullName.startsWith("com.android.internal.util.")
            && imports.any {
                it.nameAsString.endsWith(fullName.removePrefix("com.android.internal.util."))
            }
        ) {
            return fullName.removePrefix("com.android.internal.util.")
        } else if (fullName.startsWith("android.annotation")
            && imports.any { it.nameAsString.endsWith(simpleName) }
        ) {
            return simpleName
        }

        if (imports.any { imprt ->
                    imprt.nameAsString == fullName
                            || (imprt.isAsterisk && imprt.nameAsString == pkg)
                }) {