name.remal.gradle_plugins.plugins.prohibited_classes.ProhibitedClassesPlugin.kt Maven / Gradle / Ivy
package name.remal.gradle_plugins.plugins.prohibited_classes
import name.remal.gradle_plugins.api.AutoService
import name.remal.gradle_plugins.api.classes_processing.ClassesProcessor
import name.remal.gradle_plugins.api.classes_processing.ClassesProcessorsGradleTaskFactory
import name.remal.gradle_plugins.dsl.ApplyPluginClasses
import name.remal.gradle_plugins.dsl.BaseReflectiveProjectPlugin
import name.remal.gradle_plugins.dsl.CreateExtensionsPluginAction
import name.remal.gradle_plugins.dsl.Plugin
import name.remal.gradle_plugins.dsl.extensions.get
import name.remal.gradle_plugins.dsl.extensions.getOrNull
import name.remal.gradle_plugins.dsl.extensions.isCompilingSourceSet
import name.remal.gradle_plugins.dsl.extensions.isPluginApplied
import name.remal.gradle_plugins.plugins.classes_processing.ClassesProcessingPlugin
import org.gradle.api.plugins.ExtensionContainer
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.compile.AbstractCompile
@Plugin(
id = "name.remal.prohibited-classes",
description = "Plugin that checks that prohibited classes are not used in compiled class files.",
tags = ["java", "prohibited-classes"]
)
@ApplyPluginClasses(ClassesProcessingPlugin::class)
class ProhibitedClassesPlugin : BaseReflectiveProjectPlugin() {
@CreateExtensionsPluginAction
fun ExtensionContainer.`Create 'prohibitedClasses' extension`() {
create("prohibitedClasses", ProhibitedClassesExtension::class.java)
}
}
@AutoService
class ProhibitedClassesProcessorFactory : ClassesProcessorsGradleTaskFactory {
override fun createClassesProcessors(compileTask: AbstractCompile): List {
val project = compileTask.project
if (!project.isPluginApplied(ProhibitedClassesPlugin::class.java)) return emptyList()
val settings = project[ProhibitedClassesExtension::class.java]
val classpathConfiguration = project.getOrNull(JavaPluginConvention::class.java)
?.sourceSets
?.firstOrNull(compileTask::isCompilingSourceSet)
?.compileClasspathConfigurationName
?.let { project.configurations.findByName(it) }
return listOf(ProhibitedClassesProcessor(settings, classpathConfiguration))
}
}