Skip to content

Commit 823cabd

Browse files
committed
gradle is fucking weird bro
1 parent 7627e0b commit 823cabd

File tree

2 files changed

+33
-23
lines changed

2 files changed

+33
-23
lines changed

src/main/java/org/comroid/codegen/spigot/GenerateSpigotResourceClassesPlugin.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,19 @@
22

33
import org.gradle.api.Plugin;
44
import org.gradle.api.Project;
5-
import org.gradle.api.tasks.SourceSetContainer;
5+
import org.gradle.api.tasks.TaskContainer;
66

77
public class GenerateSpigotResourceClassesPlugin implements Plugin<Project> {
88
@Override
99
public void apply(Project project) {
10-
var task = project.getTasks().register("generateSpigotResourceClasses", GenerateSpigotResourceClassesTask.class, it -> {
10+
var tasks = project.getTasks();
11+
tasks.register("generateSpigotResourceClasses", GenerateSpigotResourceClassesTask.class, it -> {
1112
it.setGroup("build");
1213
it.setDescription("Generates Resource Accessors for Spigot plugin.yml and other resources");
14+
it.doLast(task->{
15+
var cgj = tasks.getByName("compileGeneratedJava").dependsOn(task);
16+
tasks.getByName("compileJava").dependsOn(cgj);
17+
});
1318
});
14-
15-
project.getTasks().named("compileJava", compileJavaTask -> compileJavaTask.dependsOn(task));
16-
17-
var outputDir = task.get().getGeneratedSourceCodeDirectory();
18-
project.getExtensions().getByType(SourceSetContainer.class)
19-
.getByName("main").getJava()
20-
.srcDir(outputDir.getAbsolutePath());
2119
}
2220
}

src/main/java/org/comroid/codegen/spigot/GenerateSpigotResourceClassesTask.java

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import org.comroid.api.attr.Named;
88
import org.comroid.api.java.gen.JavaSourcecodeWriter;
99
import org.gradle.api.DefaultTask;
10-
import org.gradle.api.tasks.InputDirectory;
11-
import org.gradle.api.tasks.OutputDirectory;
10+
import org.gradle.api.Task;
11+
import org.gradle.api.artifacts.ConfigurationContainer;
1212
import org.gradle.api.tasks.SourceSetContainer;
1313
import org.gradle.api.tasks.TaskAction;
1414
import org.intellij.lang.annotations.Language;
@@ -39,26 +39,38 @@
3939
public abstract class GenerateSpigotResourceClassesTask extends DefaultTask {
4040
private final Set<String> terminalNodes = new HashSet<>();
4141

42-
@InputDirectory
43-
public File getPluginResourcesDirectory() {
44-
return getProject().getExtensions().getByType(SourceSetContainer.class)
45-
.getByName("main").getResources()
46-
.getSrcDirs().iterator().next();
47-
}
42+
{
43+
var src = getProject().getExtensions().getByType(SourceSetContainer.class);
44+
var srcMain = src.getByName("main");
45+
46+
var outputDir = srcMain.getJava().getAsPath().replace("main", "generated");
47+
var srcGen = src.create("generated", it -> {
48+
it.getJava().srcDir(outputDir);
49+
it.setCompileClasspath(srcMain.getCompileClasspath());
50+
it.setRuntimeClasspath(srcMain.getRuntimeClasspath());
51+
});
52+
53+
var inputs = getInputs();
54+
inputs.dir(srcMain.getResources().getSourceDirectories());
55+
inputs.dir(getProject().getTasks().getByName("processResources").getOutputs());
56+
57+
var outputs = getOutputs();
58+
outputs.dir(outputDir);
4859

49-
@OutputDirectory
50-
public File getGeneratedSourceCodeDirectory() {
51-
return new File(getProject().getLayout().getBuildDirectory().getAsFile().get(), "generated/sources/r/");
60+
var cfgs = getProject().getConfigurations();
61+
var cfgMain = cfgs.getByName(srcMain.getCompileClasspathConfigurationName());
62+
var cfgGen = cfgs.getByName(srcGen.getCompileClasspathConfigurationName());
63+
cfgGen.extendsFrom(cfgMain);
5264
}
5365

5466
@TaskAction
5567
public void generate() {
56-
try (var pluginYml = new FileInputStream(new File(getPluginResourcesDirectory(), "plugin.yml"))) {
68+
try (var pluginYml = new FileInputStream(getInputs().getFiles().filter(f -> "plugin.yml".equals(f.getName())).getSingleFile())) {
5769
Map<String, Object> yml = new Yaml().load(pluginYml);
5870
var main = (String) yml.get("main");
5971
var lio = main.lastIndexOf('.');
6072
var pkg = main.substring(0, lio);
61-
var pkgDir = new File(getGeneratedSourceCodeDirectory(), pkg.replace('.', '/'));
73+
var pkgDir = new File(getOutputs().getFiles().filter(f -> "java".equals(f.getName())).getAsPath() + '/' + pkg.replace('.', '/'));
6274
if (!pkgDir.exists() && !pkgDir.mkdirs())
6375
throw new RuntimeException("Unable to create output directory");
6476
try (
@@ -143,7 +155,7 @@ private void generateCommandsEnum(JavaSourcecodeWriter java, Map<String, Object>
143155
private void cleanupKeys(Map<String, Map<String, Object>> permissions, String compoundKey, int depth) {
144156
for (var permissionKey : permissions.keySet().toArray(String[]::new)) {
145157
// only when path blob count differs from depth
146-
var count = permissionKey.chars().filter(x->x=='.').count();
158+
var count = permissionKey.chars().filter(x -> x == '.').count();
147159
if (count == depth) continue;
148160
if (count < depth) throw new IllegalArgumentException("Inner permissionKey does not have enough path blobs: " + permissionKey);
149161

0 commit comments

Comments
 (0)