Get all java classes before TransformAction

I want to get a class graph (including jars in dependencies) to build full classes hierarchy. The hierarchy help to do some bytecode operation by ASM in my custom TransformAction. I tried ArtifactView but it will lead Cannot change attributes of dependency configuration ':app:releaseRuntime' after it has been resolved

        val minified = Attribute.of("minified", Boolean::class.javaObjectType)
        val keepPatterns = mapOf(
            "guava" to setOf(
                "com.google.common.base.Optional",
                "com.google.common.base.AbstractIterator"
            )
        )
        project.dependencies.attributesSchema {
            it.attribute(minified)
        }

        project.dependencies.artifactTypes.getByName("jar") {
            it.attributes.attribute(minified, false)
        }

        project.configurations.all { conf ->
            project.afterEvaluate {
                if (conf.isCanBeResolved) {
                    conf.attributes.attribute(minified, true)
                }
            }
        }

        project.dependencies.registerTransform(Minify::class.java) { spec ->
            spec.from.attribute(minified, false)
                .attribute(ARTIFACT_FORMAT, "jar")
            spec.to.attribute(minified, true).attribute(
                ARTIFACT_FORMAT,
                "jar"
            )

            spec.parameters {
                it.keepClassesByArtifact = keepPatterns
            }
        }

        project.afterEvaluate {
            project.extensions.getByType(AppExtension::class.java).applicationVariants.all { variant ->
                getArtifactCollection(variant.runtimeConfiguration).forEach {
                    println("=== artifact:" + it)
                }
            }
        }
private fun getArtifactCollection(configuration: Configuration): FileCollection =
    configuration.incoming.artifactView { config ->
        config.attributes {
            it.attribute(
                ArtifactAttributes.ARTIFACT_FORMAT,
                ArtifactTypeDefinition.JAR_TYPE
            )
        }
    }.artifacts.artifactFiles
1 Like