com.autonomousapps.extension.ProjectIssueHandler.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("unused")
package com.autonomousapps.extension
import org.gradle.api.Action
import org.gradle.api.Named
import org.gradle.api.model.ObjectFactory
import org.gradle.kotlin.dsl.property
import org.gradle.kotlin.dsl.setProperty
import javax.inject.Inject
/**
* ```
* dependencyAnalysis {
* issues {
* project(":lib") {
* // One or more source sets (by name) to ignore in dependency analysis.
* ignoreSourceSet(...)
*
* // Specify severity and exclude rules for all types of dependency violations.
* onAny { ... }
*
* // Specify severity and exclude rules for unused dependencies.
* onUnusedDependencies { ... }
*
* // Specify severity and exclude rules for undeclared transitive dependencies.
* onUsedTransitiveDependencies { ... }
*
* // Specify severity and exclude rules for dependencies declared on the wrong configuration.
* onIncorrectConfiguration { ... }
*
* // Specify severity and exclude rules for dependencies that could be compileOnly but are
* // otherwise declared.
* onCompileOnly { ... }
*
* // Specify severity and exclude rules for dependencies that could be runtimeOnly but are
* // otherwise declared.
* onRuntimeOnly { ... }
*
* // Specify severity and exclude rules for unused annotation processors.
* onUnusedAnnotationProcessors { ... }
*
* // Specify severity and exclude rules for redundant plugins.
* onRedundantPlugins { ... }
*
* // Specify severity and exclude rules for module structure advice.
* onModuleStructure {
* severity(<'fail'|'warn'|'ignore'>)
* exclude('android')
* }
* }
* }
* }
* ```
*/
open class ProjectIssueHandler @Inject constructor(
private val name: String,
objects: ObjectFactory
) : Named {
override fun getName(): String = name
internal val anyIssue = objects.newInstance(Issue::class.java)
internal val unusedDependenciesIssue = objects.newInstance(Issue::class.java)
internal val usedTransitiveDependenciesIssue = objects.newInstance(Issue::class.java)
internal val incorrectConfigurationIssue = objects.newInstance(Issue::class.java)
internal val unusedAnnotationProcessorsIssue = objects.newInstance(Issue::class.java)
internal val compileOnlyIssue = objects.newInstance(Issue::class.java)
internal val runtimeOnlyIssue = objects.newInstance(Issue::class.java)
internal val redundantPluginsIssue = objects.newInstance(Issue::class.java)
internal val moduleStructureIssue = objects.newInstance(Issue::class.java)
// TODO this should be removed or simply redirect to the DependenciesHandler
internal val ignoreKtx = objects.property().also {
it.convention(false)
}
internal val ignoreSourceSets = objects.setProperty()
fun ignoreKtx(ignore: Boolean) {
ignoreKtx.set(ignore)
ignoreKtx.disallowChanges()
}
fun ignoreSourceSet(vararg ignore: String) {
ignoreSourceSets.addAll(ignore.toSet())
}
fun onAny(action: Action) {
action.execute(anyIssue)
}
fun onUnusedDependencies(action: Action) {
action.execute(unusedDependenciesIssue)
}
fun onUsedTransitiveDependencies(action: Action) {
action.execute(usedTransitiveDependenciesIssue)
}
fun onIncorrectConfiguration(action: Action) {
action.execute(incorrectConfigurationIssue)
}
fun onCompileOnly(action: Action) {
action.execute(compileOnlyIssue)
}
fun onRuntimeOnly(action: Action) {
action.execute(runtimeOnlyIssue)
}
fun onUnusedAnnotationProcessors(action: Action) {
action.execute(unusedAnnotationProcessorsIssue)
}
fun onRedundantPlugins(action: Action) {
action.execute(redundantPluginsIssue)
}
fun onModuleStructure(action: Action) {
action.execute(moduleStructureIssue)
}
}