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

com.github.goldin.plugins.gradle.kotlin.KotlinPlugin.groovy Maven / Gradle / Ivy

The newest version!
package com.github.goldin.plugins.gradle.kotlin

import org.gcontracts.annotations.Requires
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.FileTreeElement
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.SourceSet
import org.jetbrains.jet.cli.jvm.K2JVMCompilerArguments


/**
 * Gradle Kotlin plugin.
 */
class KotlinPlugin implements Plugin
{
    static final String KDOC_TASK_NAME = 'kdoc'
    static final String EXTENSION_NAME = 'kotlin'


    @Requires({ project })
    @Override
    void apply( Project project )
    {
        final javaBasePlugin       = project.plugins.apply( JavaBasePlugin )
        final javaPluginConvention = project.convention.getPlugin( JavaPluginConvention )

        project.extensions.create  ( EXTENSION_NAME, K2JVMCompilerArguments )
        project.plugins.apply      ( JavaPlugin )
        configureSourceSetDefaults ( project, javaPluginConvention, javaBasePlugin );
        configureKDoc              ( project, javaPluginConvention );
    }


    @Requires({ project && javaPluginConvention && javaBasePlugin })
    private void configureSourceSetDefaults( Project              project,
                                             JavaPluginConvention javaPluginConvention,
                                             JavaBasePlugin       javaBasePlugin )
    {
        javaPluginConvention.sourceSets.all {
            SourceSet sourceSet ->

            sourceSet.convention.plugins.kotlin = new KotlinSourceSetImpl( sourceSet.displayName, project.fileResolver )

            // "src/main/kotlin", "src/test/kotlin"
            sourceSet.kotlin.srcDir   { project.file( "src/${ sourceSet.name }/kotlin" ) }
            sourceSet.allJava.source  ( sourceSet.kotlin )
            sourceSet.allSource.source( sourceSet.kotlin )

            sourceSet.resources.filter.exclude { FileTreeElement elem -> sourceSet.kotlin.contains( elem.file ) }

            // "compileKotlin", "compileTestKotlin"
            String            kotlinTaskName = sourceSet.getCompileTaskName( 'kotlin' )
            KotlinCompileTask kotlinTask     = project.tasks.add( kotlinTaskName, KotlinCompileTask )

            javaBasePlugin.configureForSourceSet( sourceSet, kotlinTask )

            kotlinTask.description = "Compiles the $sourceSet.kotlin."
            kotlinTask.source      = sourceSet.kotlin
        }
    }


    @Requires({ project && javaPluginConvention })
    private void configureKDoc( Project              project,
                                JavaPluginConvention javaPluginConvention )
    {
        SourceSet mainSourceSet = javaPluginConvention.sourceSets.getByName( SourceSet.MAIN_SOURCE_SET_NAME )
        KotlinKDocTask kdoc     = project.tasks.add( KDOC_TASK_NAME, KotlinKDocTask )
        kdoc.description        = 'Generates KDoc API documentation for the main source code.'
        kdoc.group              = JavaBasePlugin.DOCUMENTATION_GROUP;
        kdoc.source             = mainSourceSet.kotlin

        project.tasks.withType( KotlinKDocTask, {
            KotlinKDocTask param ->
            param.conventionMapping.map( 'destinationDir', { new File( javaPluginConvention.docsDir, 'kdoc' ) })
        })
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy