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

Commit bdbd648d authored by Makoto Onuki's avatar Makoto Onuki Committed by Android (Google) Code Review
Browse files

Merge changes from topic "cherrypicker-L55300030005690752:N74900030088923708" into aosp-main-future

* changes:
  [Ravenwood] Poorman's sharding
  [Ravenwood] Stop using jarjar for framework-minus-apex
  Fix comment
parents bd65b499 fcf5cde2
Loading
Loading
Loading
Loading
+211 −24
Original line number Diff line number Diff line
@@ -26,10 +26,105 @@ java_library {
}

// Generate the stub/impl from framework-all, with hidden APIs.
java_genrule {
    name: "framework-minus-apex.ravenwood-base",
// This step takes several tens of seconds, so we manually shard it to multiple modules.
// All the copies have to be kept in sync.
// TODO: Do the sharding better.

genrule_defaults {
    name: "framework-minus-apex.ravenwood-base_defaults",
    tools: ["hoststubgen"],
    srcs: [
        ":framework-minus-apex-for-hoststubgen",
        ":ravenwood-framework-policies",
        ":ravenwood-standard-options",
        ":ravenwood-annotation-allowed-classes",
    ],
    out: [
        "ravenwood.jar",

        // Following files are created just as FYI.
        "hoststubgen_framework-minus-apex_keep_all.txt",
        "hoststubgen_framework-minus-apex_dump.txt",

        "hoststubgen_framework-minus-apex.log",
        "hoststubgen_framework-minus-apex_stats.csv",
        "hoststubgen_framework-minus-apex_apis.csv",
    ],
    visibility: ["//visibility:private"],
}

java_genrule {
    name: "framework-minus-apex.ravenwood-base_X0",
    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
    cmd: "$(location hoststubgen) " +
        "--num-shards 6 --shard-index 0 " + // Only this line differs

        "@$(location :ravenwood-standard-options) " +

        "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
        "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " +
        "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " +

        "--out-impl-jar $(location ravenwood.jar) " +

        "--gen-keep-all-file $(location hoststubgen_framework-minus-apex_keep_all.txt) " +
        "--gen-input-dump-file $(location hoststubgen_framework-minus-apex_dump.txt) " +

        "--in-jar $(location :framework-minus-apex-for-hoststubgen) " +
        "--policy-override-file $(location :ravenwood-framework-policies) " +
        "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
}

java_genrule {
    name: "framework-minus-apex.ravenwood-base_X1",
    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
    cmd: "$(location hoststubgen) " +
        "--num-shards 6 --shard-index 1 " + // Only this line differs

        "@$(location :ravenwood-standard-options) " +

        "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
        "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " +
        "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " +

        "--out-impl-jar $(location ravenwood.jar) " +

        "--gen-keep-all-file $(location hoststubgen_framework-minus-apex_keep_all.txt) " +
        "--gen-input-dump-file $(location hoststubgen_framework-minus-apex_dump.txt) " +

        "--in-jar $(location :framework-minus-apex-for-hoststubgen) " +
        "--policy-override-file $(location :ravenwood-framework-policies) " +
        "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
}

java_genrule {
    name: "framework-minus-apex.ravenwood-base_X2",
    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
    cmd: "$(location hoststubgen) " +
        "--num-shards 6 --shard-index 2 " + // Only this line differs

        "@$(location :ravenwood-standard-options) " +

        "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
        "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " +
        "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " +

        "--out-impl-jar $(location ravenwood.jar) " +

        "--gen-keep-all-file $(location hoststubgen_framework-minus-apex_keep_all.txt) " +
        "--gen-input-dump-file $(location hoststubgen_framework-minus-apex_dump.txt) " +

        "--in-jar $(location :framework-minus-apex-for-hoststubgen) " +
        "--policy-override-file $(location :ravenwood-framework-policies) " +
        "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
}

java_genrule {
    name: "framework-minus-apex.ravenwood-base_X3",
    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
    cmd: "$(location hoststubgen) " +
        "--num-shards 6 --shard-index 3 " + // Only this line differs

        "@$(location :ravenwood-standard-options) " +

        "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
@@ -44,39 +139,130 @@ java_genrule {
        "--in-jar $(location :framework-minus-apex-for-hoststubgen) " +
        "--policy-override-file $(location :ravenwood-framework-policies) " +
        "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
}

java_genrule {
    name: "framework-minus-apex.ravenwood-base_X4",
    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
    cmd: "$(location hoststubgen) " +
        "--num-shards 6 --shard-index 4 " + // Only this line differs

        "@$(location :ravenwood-standard-options) " +

        "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
        "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " +
        "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " +

        "--out-impl-jar $(location ravenwood.jar) " +

        "--gen-keep-all-file $(location hoststubgen_framework-minus-apex_keep_all.txt) " +
        "--gen-input-dump-file $(location hoststubgen_framework-minus-apex_dump.txt) " +

        "--in-jar $(location :framework-minus-apex-for-hoststubgen) " +
        "--policy-override-file $(location :ravenwood-framework-policies) " +
        "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
}

java_genrule {
    name: "framework-minus-apex.ravenwood-base_X5",
    defaults: ["framework-minus-apex.ravenwood-base_defaults"],
    cmd: "$(location hoststubgen) " +
        "--num-shards 6 --shard-index 5 " + // Only this line differs

        "@$(location :ravenwood-standard-options) " +

        "--debug-log $(location hoststubgen_framework-minus-apex.log) " +
        "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " +
        "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " +

        "--out-impl-jar $(location ravenwood.jar) " +

        "--gen-keep-all-file $(location hoststubgen_framework-minus-apex_keep_all.txt) " +
        "--gen-input-dump-file $(location hoststubgen_framework-minus-apex_dump.txt) " +

        "--in-jar $(location :framework-minus-apex-for-hoststubgen) " +
        "--policy-override-file $(location :ravenwood-framework-policies) " +
        "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) ",
}

// Marge all the sharded jars
java_genrule {
    name: "framework-minus-apex.ravenwood",
    defaults: ["ravenwood-internal-only-visibility-java"],
    cmd: "$(location merge_zips) $(out) $(in)",
    tools: ["merge_zips"],
    srcs: [
        ":framework-minus-apex-for-hoststubgen",
        ":ravenwood-framework-policies",
        ":ravenwood-standard-options",
        ":ravenwood-annotation-allowed-classes",
        ":framework-minus-apex.ravenwood-base_X0{ravenwood.jar}",
        ":framework-minus-apex.ravenwood-base_X1{ravenwood.jar}",
        ":framework-minus-apex.ravenwood-base_X2{ravenwood.jar}",
        ":framework-minus-apex.ravenwood-base_X3{ravenwood.jar}",
        ":framework-minus-apex.ravenwood-base_X4{ravenwood.jar}",
        ":framework-minus-apex.ravenwood-base_X5{ravenwood.jar}",
    ],
    out: [
        "ravenwood.jar",

        // Following files are created just as FYI.
        "hoststubgen_framework-minus-apex_keep_all.txt",
        "hoststubgen_framework-minus-apex_dump.txt",
        "framework-minus-apex.ravenwood.jar",
    ],
}

        "hoststubgen_framework-minus-apex.log",
        "hoststubgen_framework-minus-apex_stats.csv",
        "hoststubgen_framework-minus-apex_apis.csv",
// Merge the sharded text files
genrule {
    name: "hoststubgen_framework-minus-apex_stats.csv",
    defaults: ["ravenwood-internal-only-visibility-genrule"],
    cmd: "cat $(in) > $(out)",
    srcs: [
        ":framework-minus-apex.ravenwood-base_X0{hoststubgen_framework-minus-apex_stats.csv}",
        ":framework-minus-apex.ravenwood-base_X1{hoststubgen_framework-minus-apex_stats.csv}",
        ":framework-minus-apex.ravenwood-base_X2{hoststubgen_framework-minus-apex_stats.csv}",
        ":framework-minus-apex.ravenwood-base_X3{hoststubgen_framework-minus-apex_stats.csv}",
        ":framework-minus-apex.ravenwood-base_X4{hoststubgen_framework-minus-apex_stats.csv}",
        ":framework-minus-apex.ravenwood-base_X5{hoststubgen_framework-minus-apex_stats.csv}",
    ],
    out: ["hoststubgen_framework-minus-apex_stats.csv"],
}

genrule {
    name: "hoststubgen_framework-minus-apex_apis.csv",
    defaults: ["ravenwood-internal-only-visibility-genrule"],
    cmd: "cat $(in) > $(out)",
    srcs: [
        ":framework-minus-apex.ravenwood-base_X0{hoststubgen_framework-minus-apex_apis.csv}",
        ":framework-minus-apex.ravenwood-base_X1{hoststubgen_framework-minus-apex_apis.csv}",
        ":framework-minus-apex.ravenwood-base_X2{hoststubgen_framework-minus-apex_apis.csv}",
        ":framework-minus-apex.ravenwood-base_X3{hoststubgen_framework-minus-apex_apis.csv}",
        ":framework-minus-apex.ravenwood-base_X4{hoststubgen_framework-minus-apex_apis.csv}",
        ":framework-minus-apex.ravenwood-base_X5{hoststubgen_framework-minus-apex_apis.csv}",
    ],
    out: ["hoststubgen_framework-minus-apex_apis.csv"],
}

// Extract the impl jar from "framework-minus-apex.ravenwood-base" for subsequent build rules.
// Note this emits a "device side" output, so that ravenwood tests can (implicitly)
// depend on it.
java_genrule {
    name: "framework-minus-apex.ravenwood",
genrule {
    name: "hoststubgen_framework-minus-apex_keep_all.txt",
    defaults: ["ravenwood-internal-only-visibility-genrule"],
    cmd: "cp $(in) $(out)",
    cmd: "cat $(in) > $(out)",
    srcs: [
        ":framework-minus-apex.ravenwood-base{ravenwood.jar}",
        ":framework-minus-apex.ravenwood-base_X0{hoststubgen_framework-minus-apex_keep_all.txt}",
        ":framework-minus-apex.ravenwood-base_X1{hoststubgen_framework-minus-apex_keep_all.txt}",
        ":framework-minus-apex.ravenwood-base_X2{hoststubgen_framework-minus-apex_keep_all.txt}",
        ":framework-minus-apex.ravenwood-base_X3{hoststubgen_framework-minus-apex_keep_all.txt}",
        ":framework-minus-apex.ravenwood-base_X4{hoststubgen_framework-minus-apex_keep_all.txt}",
        ":framework-minus-apex.ravenwood-base_X5{hoststubgen_framework-minus-apex_keep_all.txt}",
    ],
    out: [
        "framework-minus-apex.ravenwood.jar",
    out: ["hoststubgen_framework-minus-apex_keep_all.txt"],
}

genrule {
    name: "hoststubgen_framework-minus-apex_dump.txt",
    defaults: ["ravenwood-internal-only-visibility-genrule"],
    cmd: "cat $(in) > $(out)",
    srcs: [
        ":framework-minus-apex.ravenwood-base_X0{hoststubgen_framework-minus-apex_dump.txt}",
        ":framework-minus-apex.ravenwood-base_X1{hoststubgen_framework-minus-apex_dump.txt}",
        ":framework-minus-apex.ravenwood-base_X2{hoststubgen_framework-minus-apex_dump.txt}",
        ":framework-minus-apex.ravenwood-base_X3{hoststubgen_framework-minus-apex_dump.txt}",
        ":framework-minus-apex.ravenwood-base_X4{hoststubgen_framework-minus-apex_dump.txt}",
        ":framework-minus-apex.ravenwood-base_X5{hoststubgen_framework-minus-apex_dump.txt}",
    ],
    out: ["hoststubgen_framework-minus-apex_dump.txt"],
}

java_library {
@@ -159,7 +345,8 @@ java_library {
        "framework-minus-apex.ravenwood",
    ],
    sdk_version: "core_platform",
    jarjar_rules: ":ravenwood-framework-jarjar-rules",
    // See b/313930116. Jarjar is too slow on this jar. We use HostStubGen to do the rename.
    // jarjar_rules: ":ravenwood-framework-jarjar-rules",
}

java_genrule {
+8 −8
Original line number Diff line number Diff line
@@ -181,13 +181,13 @@ java_library {
    visibility: ["//visibility:public"],
}

// Carefully compiles against only test_current to support tests that
// Carefully compiles against only module_current to support tests that
// want to verify they're unbundled.  The "impl" library above is what
// ships inside the Ravenwood environment to actually drive any API
// access to implementation details.
// This library needs to be statically linked to mainline tests as well,
// which need to be able to run on multiple API levels, so we can't use
// test APIs in this module.
// We can't use test_current here because this library needs to be statically
// linked to mainline tests as well, which can't use test APIs because they
// need to be able to run on multiple API levels.
java_library {
    name: "ravenwood-junit",
    srcs: [
@@ -280,10 +280,10 @@ sh_test_host {
    src: "scripts/ravenwood-stats-checker.sh",
    test_suites: ["general-tests"],
    data: [
        ":framework-minus-apex.ravenwood-base{hoststubgen_framework-minus-apex_stats.csv}",
        ":framework-minus-apex.ravenwood-base{hoststubgen_framework-minus-apex_apis.csv}",
        ":framework-minus-apex.ravenwood-base{hoststubgen_framework-minus-apex_keep_all.txt}",
        ":framework-minus-apex.ravenwood-base{hoststubgen_framework-minus-apex_dump.txt}",
        ":hoststubgen_framework-minus-apex_stats.csv",
        ":hoststubgen_framework-minus-apex_apis.csv",
        ":hoststubgen_framework-minus-apex_keep_all.txt",
        ":hoststubgen_framework-minus-apex_dump.txt",
        ":services.core.ravenwood-base{hoststubgen_services.core_stats.csv}",
        ":services.core.ravenwood-base{hoststubgen_services.core_apis.csv}",
        ":services.core.ravenwood-base{hoststubgen_services.core_keep_all.txt}",
+1 −2
Original line number Diff line number Diff line
# To avoid VerifyError on nano proto files (b/324063814)
rule com.**.nano.**   devicenano.@0
# Applying jarjar on framework-minux-apex is too slow, so we don't use jarjar for now. b/313930116
 No newline at end of file
+5 −0
Original line number Diff line number Diff line
@@ -9,6 +9,11 @@ class :feature_flags keepclass
# Keep all sysprops generated code implementations
class :sysprops keepclass

# To avoid VerifyError on nano proto files (b/324063814), we rename nano proto classes.
# Note: The "rename" directive must use shashes (/) as a package name separator.
rename com/.*/nano/   devicenano/
rename android/.*/nano/   devicenano/

# Exported to Mainline modules; cannot use annotations
class com.android.internal.util.FastXmlSerializer keepclass
class com.android.internal.util.FileRotator keepclass
+60 −15
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import com.android.hoststubgen.visitors.PackageRedirectRemapper
import org.objectweb.asm.ClassReader
import org.objectweb.asm.ClassVisitor
import org.objectweb.asm.ClassWriter
import org.objectweb.asm.commons.ClassRemapper
import org.objectweb.asm.commons.Remapper
import org.objectweb.asm.util.CheckClassAdapter
import java.io.BufferedInputStream
import java.io.FileOutputStream
@@ -70,7 +72,7 @@ class HostStubGen(val options: HostStubGenOptions) {
        }

        // Build the filters.
        val filter = buildFilter(errors, allClasses, options)
        val (filter, policyFileRemapper) = buildFilter(errors, allClasses, options)

        // Transform the jar.
        convert(
@@ -82,6 +84,9 @@ class HostStubGen(val options: HostStubGenOptions) {
                allClasses,
                errors,
                stats,
                policyFileRemapper,
                options.numShards.get,
                options.shard.get,
        )

        // Dump statistics, if specified.
@@ -107,7 +112,7 @@ class HostStubGen(val options: HostStubGenOptions) {
            errors: HostStubGenErrors,
            allClasses: ClassNodes,
            options: HostStubGenOptions,
            ): OutputFilter {
            ): Pair<OutputFilter, Remapper?> {
        // We build a "chain" of multiple filters here.
        //
        // The filters are build in from "inside", meaning the first filter created here is
@@ -160,10 +165,14 @@ class HostStubGen(val options: HostStubGenOptions) {
            filter,
        )

        var policyFileRemapper: Remapper? = null

        // Next, "text based" filter, which allows to override polices without touching
        // the target code.
        options.policyOverrideFile.ifSet {
            filter = createFilterFromTextPolicyFile(it, allClasses, filter)
            val (f, p) = createFilterFromTextPolicyFile(it, allClasses, filter)
            filter = f
            policyFileRemapper = p
        }

        // If `--intersect-stub-jar` is provided, load from these jar files too.
@@ -178,7 +187,7 @@ class HostStubGen(val options: HostStubGenOptions) {
        // Apply the implicit filter.
        filter = ImplicitOutputFilter(errors, allClasses, filter)

        return filter
        return Pair(filter, policyFileRemapper)
    }

    /**
@@ -205,6 +214,9 @@ class HostStubGen(val options: HostStubGenOptions) {
            classes: ClassNodes,
            errors: HostStubGenErrors,
            stats: HostStubGenStats,
            remapper: Remapper?,
            numShards: Int,
            shard: Int,
            ) {
        log.i("Converting %s into [stub: %s, impl: %s] ...", inJar, outStubJar, outImplJar)
        log.i("ASM CheckClassAdapter is %s", if (enableChecker) "enabled" else "disabled")
@@ -213,17 +225,32 @@ class HostStubGen(val options: HostStubGenOptions) {

        val packageRedirector = PackageRedirectRemapper(options.packageRedirects)

        var itemIndex = 0
        var numItemsProcessed = 0
        var numItems = -1 // == Unknown

        log.withIndent {
            // Open the input jar file and process each entry.
            ZipFile(inJar).use { inZip ->

                numItems = inZip.size()
                val shardStart = numItems * shard / numShards
                val shardNextStart = numItems * (shard + 1) / numShards

                maybeWithZipOutputStream(outStubJar) { stubOutStream ->
                    maybeWithZipOutputStream(outImplJar) { implOutStream ->
                        val inEntries = inZip.entries()
                        while (inEntries.hasMoreElements()) {
                            val entry = inEntries.nextElement()
                            val inShard = (shardStart <= itemIndex) && (itemIndex < shardNextStart)
                            itemIndex++
                            if (!inShard) {
                                continue
                            }
                            convertSingleEntry(inZip, entry, stubOutStream, implOutStream,
                                    filter, packageRedirector, enableChecker, classes, errors,
                                    stats)
                                    filter, packageRedirector, remapper,
                                    enableChecker, classes, errors, stats)
                            numItemsProcessed++
                        }
                        log.i("Converted all entries.")
                    }
@@ -233,7 +260,8 @@ class HostStubGen(val options: HostStubGenOptions) {
            }
        }
        val end = System.currentTimeMillis()
        log.i("Done transforming the jar in %.1f second(s).", (end - start) / 1000.0)
        log.i("Done transforming the jar in %.1f second(s). %d / %d item(s) processed.",
            (end - start) / 1000.0, numItemsProcessed, numItems)
    }

    private fun <T> maybeWithZipOutputStream(filename: String?, block: (ZipOutputStream?) -> T): T {
@@ -253,6 +281,7 @@ class HostStubGen(val options: HostStubGenOptions) {
            implOutStream: ZipOutputStream?,
            filter: OutputFilter,
            packageRedirector: PackageRedirectRemapper,
            remapper: Remapper?,
            enableChecker: Boolean,
            classes: ClassNodes,
            errors: HostStubGenErrors,
@@ -270,7 +299,7 @@ class HostStubGen(val options: HostStubGenOptions) {
            // If it's a class, convert it.
            if (name.endsWith(".class")) {
                processSingleClass(inZip, entry, stubOutStream, implOutStream, filter,
                        packageRedirector, enableChecker, classes, errors, stats)
                        packageRedirector, remapper, enableChecker, classes, errors, stats)
                return
            }

@@ -321,6 +350,7 @@ class HostStubGen(val options: HostStubGenOptions) {
            implOutStream: ZipOutputStream?,
            filter: OutputFilter,
            packageRedirector: PackageRedirectRemapper,
            remapper: Remapper?,
            enableChecker: Boolean,
            classes: ClassNodes,
            errors: HostStubGenErrors,
@@ -332,16 +362,24 @@ class HostStubGen(val options: HostStubGenOptions) {
            log.d("Removing class: %s %s", classInternalName, classPolicy)
            return
        }
        // If we're applying a remapper, we need to rename the file too.
        var newName = entry.name
        remapper?.mapType(classInternalName)?.let { remappedName ->
            if (remappedName != classInternalName) {
                log.d("Renaming class file: %s -> %s", classInternalName, remappedName)
                newName = remappedName + ".class"
            }
        }
        // Generate stub first.
        if (stubOutStream != null && classPolicy.policy.needsInStub) {
            log.v("Creating stub class: %s Policy: %s", classInternalName, classPolicy)
            log.withIndent {
                BufferedInputStream(inZip.getInputStream(entry)).use { bis ->
                    val newEntry = ZipEntry(entry.name)
                    val newEntry = ZipEntry(newName)
                    stubOutStream.putNextEntry(newEntry)
                    convertClass(classInternalName, /*forImpl=*/false, bis,
                            stubOutStream, filter, packageRedirector, enableChecker, classes,
                            errors, null)
                            stubOutStream, filter, packageRedirector, remapper,
                            enableChecker, classes, errors, null)
                    stubOutStream.closeEntry()
                }
            }
@@ -350,11 +388,11 @@ class HostStubGen(val options: HostStubGenOptions) {
            log.v("Creating impl class: %s Policy: %s", classInternalName, classPolicy)
            log.withIndent {
                BufferedInputStream(inZip.getInputStream(entry)).use { bis ->
                    val newEntry = ZipEntry(entry.name)
                    val newEntry = ZipEntry(newName)
                    implOutStream.putNextEntry(newEntry)
                    convertClass(classInternalName, /*forImpl=*/true, bis,
                            implOutStream, filter, packageRedirector, enableChecker, classes,
                            errors, stats)
                            implOutStream, filter, packageRedirector, remapper,
                            enableChecker, classes, errors, stats)
                    implOutStream.closeEntry()
                }
            }
@@ -371,6 +409,7 @@ class HostStubGen(val options: HostStubGenOptions) {
            out: OutputStream,
            filter: OutputFilter,
            packageRedirector: PackageRedirectRemapper,
            remapper: Remapper?,
            enableChecker: Boolean,
            classes: ClassNodes,
            errors: HostStubGenErrors,
@@ -387,6 +426,12 @@ class HostStubGen(val options: HostStubGenOptions) {
        if (enableChecker) {
            outVisitor = CheckClassAdapter(outVisitor)
        }

        // Remapping should happen at the end.
        remapper?.let {
            outVisitor = ClassRemapper(outVisitor, remapper)
        }

        val visitorOptions = BaseAdapter.Options(
                enablePreTrace = options.enablePreTrace.get,
                enablePostTrace = options.enablePostTrace.get,
@@ -395,7 +440,7 @@ class HostStubGen(val options: HostStubGenOptions) {
                stats = stats,
        )
        outVisitor = BaseAdapter.getVisitor(classInternalName, classes, outVisitor, filter,
                packageRedirector, forImpl, visitorOptions)
                packageRedirector, remapper, forImpl, visitorOptions)

        cr.accept(outVisitor, ClassReader.EXPAND_FRAMES)
        val data = cw.toByteArray()
Loading