Skip to content

Commit f7cff0a

Browse files
committed
Added some gradle properties
`net.minecraftforge.gradleutils.ide.automatic.sources` - Enabled if set to `true`. - Automatically downloads sources and JavaDocs on IntelliJ IDEA or Eclipse. `net.minecraftforge.gradleutils.compilation.defaults` - Enabled if set to `true`. - Sets all Java, Groovy, and Javadoc compilation tasks to encode in UTF-8. - Sets Groovy compilation tasks to compile with the Indy optimization. - Sets a human-readable window title for Javadoc and Groovydoc tasks using either `gradleutils.displayName` or `project.name`. - Sets the apiNote, implNote, and implSpec tags for Javadoc tasks. - Emits a warning if there is an enabled Groovydoc task but the default charset is not UTF-8. - It is a Gradle limitation that Groovydoc is invoked via its internal ant builder rather than in a forked JVM.
1 parent a01f401 commit f7cff0a

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

src/main/groovy/net/minecraftforge/gradleutils/GradleUtilsExtensionImpl.groovy

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,20 @@ import org.gradle.api.publish.PublishingExtension
2424
import org.gradle.api.publish.maven.MavenPublication
2525
import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
2626
import org.gradle.api.tasks.TaskProvider
27+
import org.gradle.api.tasks.compile.GroovyCompile
28+
import org.gradle.api.tasks.compile.JavaCompile
29+
import org.gradle.api.tasks.javadoc.Groovydoc
30+
import org.gradle.api.tasks.javadoc.Javadoc
2731
import org.gradle.authentication.http.BasicAuthentication
32+
import org.gradle.external.javadoc.StandardJavadocDocletOptions
2833
import org.gradle.initialization.layout.BuildLayout
34+
import org.gradle.plugins.ide.eclipse.model.EclipseClasspath
35+
import org.gradle.plugins.ide.idea.model.IdeaModule
2936
import org.jetbrains.annotations.Nullable
3037

3138
import javax.inject.Inject
39+
import java.nio.charset.Charset
40+
import java.nio.charset.StandardCharsets
3241

3342
import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
3443

@@ -157,6 +166,41 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
157166
it.artifactId = project.extensions.getByType(BasePluginExtension).archivesName
158167
}
159168
}
169+
170+
if (this.problems.test('net.minecraftforge.gradleutils.ide.automatic.sources')) {
171+
project.extensions.findByType(IdeaModule)?.tap { downloadSources = downloadJavadoc = true }
172+
project.extensions.findByType(EclipseClasspath)?.tap { downloadSources = downloadJavadoc = true }
173+
}
174+
175+
if (this.problems.test('net.minecraftforge.gradleutils.compilation.defaults')) {
176+
project.tasks.withType(JavaCompile).configureEach { task ->
177+
task.options.encoding = 'UTF-8'
178+
}
179+
180+
project.tasks.withType(GroovyCompile).configureEach { task ->
181+
task.options.encoding = 'UTF-8'
182+
task.groovyOptions.optimizationOptions.indy = true
183+
}
184+
185+
final windowTitle = "${this.displayName.orElse(this.project.name).get()} ${this.project.version ?: ''}"
186+
187+
project.tasks.withType(Javadoc).configureEach { task ->
188+
task.options { StandardJavadocDocletOptions options ->
189+
options.encoding = 'UTF-8'
190+
options.windowTitle = windowTitle
191+
options.tags 'apiNote:a:API Note:', 'implNote:a:Implementation Note:', 'implSpec:a:Implementation Requirements:'
192+
}
193+
}
194+
195+
project.tasks.withType(Groovydoc).configureEach { task ->
196+
task.windowTitle = windowTitle
197+
198+
if (task.enabled && Charset.defaultCharset() !== StandardCharsets.UTF_8) {
199+
project.logger.warn('WARNING: Current charset is not UTF-8 but {}! This will affect the output of Groovydoc task {}', Charset.defaultCharset(), task.name)
200+
this.problems.reportGroovydocIncorrectCharset(task)
201+
}
202+
}
203+
}
160204
}
161205

162206
@Override

src/main/groovy/net/minecraftforge/gradleutils/GradleUtilsProblems.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66

77
import net.minecraftforge.gradleutils.shared.EnhancedProblems;
88
import org.gradle.api.problems.Severity;
9+
import org.gradle.api.tasks.javadoc.Groovydoc;
910

1011
import javax.inject.Inject;
1112
import java.io.Serial;
13+
import java.nio.charset.Charset;
1214

1315
abstract class GradleUtilsProblems extends EnhancedProblems {
1416
private static final @Serial long serialVersionUID = 3278085642147772954L;
@@ -63,4 +65,18 @@ This can be done by declaring it as so (in Groovy DSL):
6365
.solution(HELP_MESSAGE));
6466
}
6567
//endregion
68+
69+
//region
70+
void reportGroovydocIncorrectCharset(Groovydoc task) {
71+
this.getReporter().report(id("groovydoc-incorrect-charset", "Groovydoc charset is incorrect"), spec -> spec
72+
.details("""
73+
Groovydoc tasks cannot have their charsets manually set, and your default charset is not UTF-8.
74+
This may cause problems in the output of your Groovydoc.
75+
Affected task: %s
76+
Current charset: %s""".formatted(task.getName(), Charset.defaultCharset()))
77+
.severity(Severity.WARNING)
78+
.stackLocation()
79+
.solution("Set the JVM's default charset to UTF-8 using `propName.file.encoding=UTF-8` in your gradle.properties."));
80+
}
81+
//endregion
6682
}

0 commit comments

Comments
 (0)