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

name.remal.gradle_plugins.plugins.prohibited_classes.ProhibitedClassesPlugin.kt Maven / Gradle / Ivy

There is a newer version: 1.9.2
Show newest version
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))
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy