com.autonomousapps.internal.analyzer.DependencyAnalyzer.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dependency-analysis-gradle-plugin Show documentation
Show all versions of dependency-analysis-gradle-plugin Show documentation
Analyzes dependency usage in Android and JVM projects
@file:Suppress("UnstableApiUsage")
package com.autonomousapps.internal.analyzer
import com.autonomousapps.services.InMemoryCache
import com.autonomousapps.tasks.*
import org.gradle.api.Project
import org.gradle.api.UnknownTaskException
import org.gradle.api.attributes.Attribute
import org.gradle.api.file.FileTree
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.kotlin.dsl.named
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
/**
* Abstraction for differentiating between android-app, android-lib, and java-lib projects.
*/
internal interface DependencyAnalyzer {
/**
* E.g., `flavorDebug`
*/
val variantName: String
/**
* E.g., 'flavor'
*/
val flavorName: String?
/**
* E.g., `FlavorDebug`
*/
val variantNameCapitalized: String
val compileConfigurationName: String
val runtimeConfigurationName: String
val attribute: Attribute
val attributeValue: String
val attributeValueRes: String?
val kotlinSourceFiles: FileTree
val javaSourceFiles: FileTree?
val javaAndKotlinSourceFiles: FileTree?
val isDataBindingEnabled: Boolean
val isViewBindingEnabled: Boolean
val testJavaCompileName: String
val testKotlinCompileName: String
fun registerCreateVariantFilesTask(): TaskProvider
/**
* This produces a report that lists all of the used classes (FQCN) in the project.
*/
fun registerClassAnalysisTask(createVariantFiles: TaskProvider): TaskProvider
fun registerManifestPackageExtractionTask(): TaskProvider? = null
fun registerAndroidResToSourceAnalysisTask(
manifestPackageExtractionTask: TaskProvider
): TaskProvider? = null
fun registerAndroidResToResAnalysisTask(): TaskProvider? = null
fun registerFindNativeLibsTask(
locateDependenciesTask: TaskProvider
): TaskProvider? = null
fun registerFindDeclaredProcsTask(
inMemoryCacheProvider: Provider,
locateDependenciesTask: TaskProvider
): TaskProvider
fun registerFindUnusedProcsTask(
findDeclaredProcs: TaskProvider,
importFinder: TaskProvider
): TaskProvider
/**
* This is a no-op for `com.android.application` and JVM `application` projects (including
* Spring Boot), since they have no meaningful ABI.
*/
fun registerAbiAnalysisTask(
findClassesTask: TaskProvider,
abiExclusions: Provider
): TaskProvider? = null
}
internal abstract class AbstractDependencyAnalyzer(
protected val project: Project
) : DependencyAnalyzer {
protected val testJavaCompile by lazy {
try {
project.tasks.named(testJavaCompileName)
} catch (e: UnknownTaskException) {
null
}
}
protected val testKotlinCompile by lazy {
try {
project.tasks.named(testKotlinCompileName)
} catch (e: UnknownTaskException) {
null
} catch (e: NoClassDefFoundError) {
null
}
}
}