1515 */
1616package io.netifi.flatbuffers.plugin
1717
18- import io.netifi.flatbuffers.plugin.tasks.CleanFlatBuffers
18+ import groovy.transform.CompileStatic
1919import io.netifi.flatbuffers.plugin.tasks.FlatBuffers
2020import org.gradle.api.Plugin
2121import org.gradle.api.Project
22- import org.gradle.api.plugins.JavaPlugin
23- import org.gradle.api.tasks.SourceSetContainer
24- import org.gradle.plugins.ide.idea.IdeaPlugin
22+ import org.gradle.api.artifacts.Configuration
23+ import org.gradle.api.file.SourceDirectorySet
24+ import org.gradle.api.plugins.BasePlugin
25+ import org.gradle.api.plugins.JavaPluginConvention
26+ import org.gradle.api.tasks.Delete
27+ import org.gradle.api.tasks.SourceSet
28+ import org.gradle.plugins.ide.idea.model.IdeaModel
2529import org.gradle.util.GUtil
2630
31+ import static org.gradle.api.plugins.JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME
32+
33+ @CompileStatic
2734class FlatBuffersPlugin implements Plugin<Project > {
2835
2936 public static final String GROUP = ' FlatBuffers'
37+ public static final String FLAT_BUFFERS_EXTENSION_NAME = ' flatbuffers'
38+
39+ private FlatBuffersPluginExtension extension
40+ private Project project
3041
3142 @Override
3243 void apply (Project project ) {
33- project. extensions. create(' flatbuffers' , FlatBuffersPluginExtension . class)
44+ this . project = project
45+ configureProject()
46+ }
3447
35- def fbTasks = []
36- project. afterEvaluate({
37- project. tasks. withType(FlatBuffers ). each {
38- fbTasks << it
39- applySourceSets(project, it)
40- reconfigurePlugins(project, it)
41- }
48+ void configureProject () {
49+ extension = project. extensions. create(FLAT_BUFFERS_EXTENSION_NAME ,
50+ FlatBuffersPluginExtension )
51+ project. pluginManager. apply(BasePlugin )
4252
43- fbTasks. each {
44- addCleanTask(project, it)
53+ project. afterEvaluate {
54+ project. tasks. withType(FlatBuffers ). each {
55+ applySourceSets(it)
56+ reconfigurePlugins(it)
57+ addCleanTask(it)
4558 }
46-
4759 applyDependencies(project)
48- })
60+ }
4961 }
5062
5163 /**
52- * Adds a 'clean' task for any FlatBuffers tasks in the project.
64+ * Adds a 'clean' flatBuffers for any FlatBuffers tasks in the project.
5365 *
54- * @param project Gradle project
55- * @param task {@link FlatBuffers} task
66+ * @param flatBuffersTask {@link FlatBuffers} flatBuffers
5667 */
57- void addCleanTask (Project project , FlatBuffers task ) {
58- def taskName = ' clean' + GUtil . toCamelCase(task . name)
59- project. tasks. create(taskName, CleanFlatBuffers ) {
60- outputDir = task. outputDir
68+ void addCleanTask (FlatBuffers flatBuffersTask ) {
69+ def taskName = " clean${ GUtil.toCamelCase(flatBuffersTask .name)} "
70+ project. tasks. create(name : taskName, type : Delete ) { Delete task ->
71+ task. delete flatBuffersTask . outputDir
6172 }
6273 }
6374
6475 /**
6576 * Adds source sets for the FlatBuffers input and output directories.
6677 *
67- * @param project Gradle project
6878 * @param task {@link FlatBuffers} task
6979 */
70- void applySourceSets (Project project , FlatBuffers task ) {
71- SourceSetContainer sourceSets = (SourceSetContainer ) project. getProperties(). get(" sourceSets" )
72-
73- if (project. plugins. hasPlugin(JavaPlugin )) {
74- if (! sourceSets. getByName(" main" ). java. srcDirs. contains(task. getInputDir())) {
75- sourceSets. getByName(" main" ). java. srcDirs. add(task. getInputDir())
76- }
77-
78- if (! sourceSets. getByName(" main" ). java. srcDirs. contains(task. getOutputDir())) {
79- sourceSets. getByName(" main" ). java. srcDirs. add(task. getOutputDir())
80+ void applySourceSets (FlatBuffers task ) {
81+ project. pluginManager. withPlugin(' java' ) {
82+ def javaPlugin = project. convention. getPlugin(JavaPluginConvention )
83+ def sourceSets = javaPlugin. sourceSets
84+ sourceSets. getByName(SourceSet . MAIN_SOURCE_SET_NAME ). java { SourceDirectorySet java ->
85+ java. srcDirs task. inputDir, task. outputDir
8086 }
8187 }
8288 }
8389
8490 /**
8591 * Reconfigures certain plugins to know about the FlatBuffers project structure.
8692 *
87- * @param project Gradle project
8893 * @param task {@link FlatBuffers} task
8994 */
90- void reconfigurePlugins (Project project , FlatBuffers task ) {
95+ void reconfigurePlugins (FlatBuffers task ) {
9196 // Intellij specific configurations
92- if (project. plugins. hasPlugin(IdeaPlugin )) {
93- if (! project. idea. module. generatedSourceDirs. contains(task. outputDir)) {
94- project. idea. module. generatedSourceDirs. add(task. outputDir)
95- }
97+ project. pluginManager. withPlugin(' idea' ) {
98+ def idea = project. extensions. getByType(IdeaModel )
99+ idea. module. generatedSourceDirs + = task. outputDir
96100 }
97101 }
98102
@@ -103,11 +107,11 @@ class FlatBuffersPlugin implements Plugin<Project> {
103107 */
104108 void applyDependencies (Project project ) {
105109 // Java specific dependencies
106- if (project. plugins. hasPlugin(JavaPlugin )) {
107- project. dependencies {
108- compile ' com.google.flatbuffers:flatbuffers-java:1.8.0'
110+ project. pluginManager. withPlugin(' java' ) {
111+ project. configurations. getByName(IMPLEMENTATION_CONFIGURATION_NAME ) { Configuration config ->
112+ def flatBufferVersion = " com.google.flatbuffers:flatbuffers-java:${ extension.flatBuffersVersion ?: '1.10.0'} "
113+ config. dependencies. add(project. dependencies. create(flatBufferVersion))
109114 }
110115 }
111116 }
112-
113117}
0 commit comments