All Downloads are FREE. Search and download functionalities are using the official Maven repository.

name.remal.gradle_plugins.dsl.utils.DependenciesCollectorClassVisitor.kt Maven / Gradle / Ivy

There is a newer version: 1.9.2
Show newest version
package name.remal.gradle_plugins.dsl.utils

import name.remal.uncheckedCast
import org.objectweb.asm.ClassVisitor
import org.objectweb.asm.commons.ClassRemapper
import org.objectweb.asm.commons.Remapper

class DependenciesCollectorClassVisitor(delegate: ClassVisitor?) : ClassRemapper(delegate, DependenciesCollectorRemapper()) {

    val dependencyInternalClassNames: Set
        get() = remapper.uncheckedCast()
            .dependencyInternalClassNames
            .toSortedSet()
            .apply { internalClassName?.let(this::remove) }

    private var internalClassName: String? = null
    override fun visit(version: Int, access: Int, name: String, signature: String?, superName: String?, interfaces: Array?) {
        internalClassName = name
        super.visit(version, access, name, signature, superName, interfaces)
    }

    private class DependenciesCollectorRemapper : Remapper() {
        val dependencyInternalClassNames: MutableSet = hashSetOf()
        override fun map(internalName: String?): String? {
            internalName?.let(dependencyInternalClassNames::add)
            return null
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy