88 * MIT License
99 */
1010
11+ import net.minecrell.gradle.licenser.header.HeaderFormat
12+ import net.minecrell.gradle.licenser.header.HeaderFormatRegistry
13+ import net.minecrell.gradle.licenser.header.HeaderStyle
1114import org.gradle.internal.jvm.Jvm
1215import org.jetbrains.intellij.tasks.PublishTask
1316import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
17+ import kotlin.reflect.KClass
1418
1519buildscript {
1620 repositories {
@@ -19,38 +23,38 @@ buildscript {
1923}
2024
2125plugins {
22- id(" org.jetbrains.kotlin.jvm" ) version " 1.2.50 " // kept in sync with IntelliJ's bundled dep
26+ id(" org.jetbrains.kotlin.jvm" ) version " 1.2.51 " // kept in sync with IntelliJ's bundled dep
2327 groovy
2428 idea
25- id(" org.jetbrains.intellij" ) version " 0.3.4 "
26- id(" net.minecrell.licenser" ) version " 0.4"
29+ id(" org.jetbrains.intellij" ) version " 0.3.9 "
30+ id(" net.minecrell.licenser" ) version " 0.4.1 "
2731}
2832
2933defaultTasks(" build" )
3034
3135val CI = System .getenv(" CI" ) != null
3236
33- val ideaVersion: String by extra
34- val downloadIdeaSources: String by extra
37+ val ideaVersion: String by project
38+ val downloadIdeaSources: String by project
3539
3640// for publishing nightlies
37- val repoUsername: String by extra
38- val repoPassword: String by extra
39- val repoChannel: String by extra
41+ val repoUsername: String by project
42+ val repoPassword: String by project
43+ val repoChannel: String by project
4044
41- val compileKotlin by tasks
42- val processResources: AbstractCopyTask by tasks
43- val test: Test by tasks
44- val runIde: JavaExec by tasks
45- val publishPlugin: PublishTask by tasks
46- val clean: Delete by tasks
45+ val compileKotlin by tasks.existing
46+ val processResources by tasks.existing< AbstractCopyTask >()
47+ val test by tasks.existing< Test >()
48+ val runIde by tasks.existing< JavaExec >()
49+ val publishPlugin by tasks.existing< PublishTask >()
50+ val clean by tasks.existing< Delete >()
4751
4852configurations {
49- " gradle-tooling-extension" { extendsFrom(" idea" () ) }
50- " jflex" ( )
51- " jflex-skeleton" ( )
52- " grammar-kit" ( )
53- " testLibs" { isTransitive = false }
53+ register( " gradle-tooling-extension" ) { extendsFrom(configurations[ " idea" ] ) }
54+ register( " jflex" )
55+ register( " jflex-skeleton" )
56+ register( " grammar-kit" )
57+ register( " testLibs" ) { isTransitive = false }
5458}
5559
5660repositories {
@@ -63,16 +67,14 @@ repositories {
6367java {
6468 sourceCompatibility = JavaVersion .VERSION_1_8
6569 targetCompatibility = JavaVersion .VERSION_1_8
70+ }
6671
67- sourceSets {
68- " gradle-tooling-extension" {
69- configurations[compileOnlyConfigurationName].extendsFrom(configurations[" gradle-tooling-extension" ])
70- }
72+ val gradleToolingExtension = sourceSets.create(" gradle-tooling-extension" ) {
73+ configurations.named<Configuration >(compileOnlyConfigurationName) {
74+ extendsFrom(configurations[" gradle-tooling-extension" ])
7175 }
7276}
73-
74- val gradleToolingExtension = java.sourceSets[" gradle-tooling-extension" ]!!
75- val gradleToolingExtensionJar = task<Jar >(gradleToolingExtension.jarTaskName) {
77+ val gradleToolingExtensionJar = tasks.register<Jar >(gradleToolingExtension.jarTaskName) {
7678 from(gradleToolingExtension.output)
7779 classifier = " gradle-tooling-extension"
7880}
@@ -83,26 +85,20 @@ dependencies {
8385
8486 compile(files(gradleToolingExtensionJar))
8587
88+ // gradle-intellij-plugin doesn't attach sources properly for Kotlin unless it's manually defined here
89+ // compileOnly since it's only here for reference
90+ compileOnly(kotlin(" stdlib-jdk8" ))
91+
8692 " jflex" (" org.jetbrains.idea:jflex:1.7.0-b7f882a" )
8793 " jflex-skeleton" (" org.jetbrains.idea:jflex:1.7.0-c1fdf11:idea@skeleton" )
8894 " grammar-kit" (" org.jetbrains.idea:grammar-kit:1.5.1" )
8995
9096 " testLibs" (" org.jetbrains.idea:mockJDK:1.7-4d76c50" )
9197 " testLibs" (" org.spongepowered:mixin:0.7-SNAPSHOT:thin" )
9298
93- // Better way to do this?
94- if (! ideaVersion.endsWith(" SNAPSHOT" )) {
95- afterEvaluate {
96- // This needs to happen after build number is resolved
97- // intellij.ideaDependency.buildNumber == intellij.type-<buildnumber>
98- // gradle-tooling-extension isn't released with major intellij versions like intellij is
99- // intellij.type is typically IC
100- // build number is IC-number, so + 1 is needed to remove the -
101- " gradle-tooling-extension" (" com.jetbrains.intellij.gradle:gradle-tooling-extension:${intellij.ideaDependency.buildNumber.substring(intellij.type.length + 1 )} " )
102- }
103- } else {
104- " gradle-tooling-extension" (" com.jetbrains.intellij.gradle:gradle-tooling-extension:$ideaVersion " )
105- }
99+ // For non-SNAPSHOT versions (unless Jetbrains fixes this...) find the version with:
100+ // intellij.ideaDependency.buildNumber.substring(intellij.type.length + 1)
101+ " gradle-tooling-extension" (" com.jetbrains.intellij.gradle:gradle-tooling-extension:183-EAP-SNAPSHOT" )
106102}
107103
108104intellij {
@@ -131,16 +127,16 @@ publishPlugin {
131127 }
132128}
133129
134- tasks.withType<JavaCompile > {
130+ tasks.withType<JavaCompile >().configureEach {
135131 options.encoding = " UTF-8"
136132 options.compilerArgs = listOf (" -proc:none" )
137133}
138134
139- tasks.withType<KotlinCompile > {
135+ tasks.withType<KotlinCompile >().configureEach {
140136 kotlinOptions.jvmTarget = JavaVersion .VERSION_1_8 .toString()
141137}
142138
143- tasks.withType<GroovyCompile > {
139+ tasks.withType<GroovyCompile >().configureEach {
144140 options.compilerArgs = listOf (" -proc:none" )
145141}
146142
@@ -168,22 +164,42 @@ idea {
168164 }
169165}
170166
171- // License header formatting
172167license {
173168 header = file(" copyright.txt" )
174- include(" **/*.java" , " **/*.kt" , " **/*.kts" , " **/*.groovy" , " **/*.gradle" , " **/*.xml" , " **/*.properties" , " **/*.html" )
175- exclude(" com/demonwav/mcdev/platform/mcp/at/gen/**" , " com/demonwav/mcdev/nbt/lang/gen/**" , " com/demonwav/mcdev/i18n/lang/gen/**" )
169+ style[" flex" ] = HeaderStyle .BLOCK_COMMENT .format
170+ style[" bnf" ] = HeaderStyle .BLOCK_COMMENT .format
171+
172+ include(
173+ " **/*.java" ,
174+ " **/*.kt" ,
175+ " **/*.kts" ,
176+ " **/*.groovy" ,
177+ " **/*.gradle" ,
178+ " **/*.xml" ,
179+ " **/*.properties" ,
180+ " **/*.html" ,
181+ " **/*.flex" ,
182+ " **/*.bnf"
183+ )
184+ exclude(
185+ " com/demonwav/mcdev/platform/mcp/at/gen/**" ,
186+ " com/demonwav/mcdev/nbt/lang/gen/**" ,
187+ " com/demonwav/mcdev/i18n/lang/gen/**"
188+ )
176189
177190 tasks {
178- " gradle" {
191+ register( " gradle" ) {
179192 files = project.files(" build.gradle.kts" , " settings.gradle.kts" , " gradle.properties" )
180193 }
194+ register(" grammars" ) {
195+ files = project.fileTree(" src/main/grammars" )
196+ }
181197 }
182198}
183199
184200// Credit for this intellij-rust
185201// https://github.com/intellij-rust/intellij-rust/blob/d6b82e6aa2f64b877a95afdd86ec7b84394678c3/build.gradle#L131-L181
186- fun generateLexer (name : String , flex : String , pack : String ) = task <JavaExec >(name) {
202+ fun generateLexer (name : String , flex : String , pack : String ) = tasks.register <JavaExec >(name) {
187203 val src = " src/main/grammars/$flex .flex"
188204 val dst = " gen/com/demonwav/mcdev/$pack "
189205 val output = " $dst /$flex .java"
@@ -206,12 +222,12 @@ fun generateLexer(name: String, flex: String, pack: String) = task<JavaExec>(nam
206222 outputs.file(output)
207223}
208224
209- fun generatePsiAndParser (name : String , bnf : String , pack : String ) = task <JavaExec >(name) {
210- val src = " src/main/grammars/$bnf .bnf" .replace(" / " , File .separator )
225+ fun generatePsiAndParser (name : String , bnf : String , pack : String ) = tasks.register <JavaExec >(name) {
226+ val src = " src/main/grammars/$bnf .bnf" .replace(' / ' , File .separatorChar )
211227 val dstRoot = " gen"
212- val dst = " $dstRoot /com/demonwav/mcdev/$pack " .replace(" / " , File .separator )
213- val psiDir = " $dst /psi/" .replace(" / " , File .separator )
214- val parserDir = " $dst /parser/" .replace(" / " , File .separator )
228+ val dst = " $dstRoot /com/demonwav/mcdev/$pack " .replace(' / ' , File .separatorChar )
229+ val psiDir = " $dst /psi/" .replace(' / ' , File .separatorChar )
230+ val parserDir = " $dst /parser/" .replace(' / ' , File .separatorChar )
215231
216232 doFirst {
217233 delete(psiDir, parserDir)
@@ -240,27 +256,34 @@ val generateI18nPsiAndParser = generatePsiAndParser("generateI18nPsiAndParser",
240256
241257val generateI18nTemplateLexer = generateLexer(" generateI18nTemplateLexer" , " I18nTemplateLexer" , " i18n/lang/gen/" )
242258
243- val generate = task (" generate" ) {
259+ val generate = tasks.register (" generate" ) {
244260 group = " minecraft"
245261 description = " Generates sources needed to compile the plugin."
246- dependsOn(generateAtLexer, generateAtPsiAndParser, generateNbttLexer, generateNbttPsiAndParser, generateI18nLexer, generateI18nPsiAndParser, generateI18nTemplateLexer)
262+ dependsOn(
263+ generateAtLexer,
264+ generateAtPsiAndParser,
265+ generateNbttLexer,
266+ generateNbttPsiAndParser,
267+ generateI18nLexer,
268+ generateI18nPsiAndParser,
269+ generateI18nTemplateLexer
270+ )
247271 outputs.dir(" gen" )
248272}
249273
250- java. sourceSets[ SourceSet . MAIN_SOURCE_SET_NAME ]. java.srcDir(generate)
274+ sourceSets.named< SourceSet >( " main " ) { java.srcDir(generate) }
251275
252276// Remove gen directory on clean
253- clean. delete(generate)
277+ clean { delete(generate) }
254278
255279runIde {
256280 maxHeapSize = " 2G"
257281
258- (findProperty(" intellijJre" ) as ? String )?.let (this ::setExecutable)
259-
260282 System .getProperty(" debug" )?.let {
261283 systemProperty(" idea.ProcessCanceledException" , " disabled" )
262284 systemProperty(" idea.debug.mode" , " true" )
263285 }
264286}
265287
266- inline operator fun <T : Task > T.invoke (a : T .() -> Unit ): T = apply (a)
288+ inline fun <reified T : Task > TaskContainer.existing () = existing(T ::class )
289+ inline fun <reified T : Task > TaskContainer.register (name : String , configuration : Action <in T >) = register(name, T ::class , configuration)
0 commit comments