-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathGeneratePackageInfo.java
More file actions
61 lines (54 loc) · 2.34 KB
/
GeneratePackageInfo.java
File metadata and controls
61 lines (54 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package io.github.opencubicchunks.gradle;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.gradle.api.file.SourceDirectorySet;
import org.gradle.api.tasks.SourceSet;
public class GeneratePackageInfo {
public static void generateFiles(SourceSet sourceSet) throws IOException {
Map<Path, Path> packages = getPackages(sourceSet.getAllJava());
String code = """
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package __PACKAGE__;
import javax.annotation.ParametersAreNonnullByDefault;
import io.github.opencubicchunks.cc_core.annotation.MethodsReturnNonnullByDefault;""";
for (Path pkg : packages.keySet()) {
Path absolutePath = packages.get(pkg);
Path file = absolutePath.resolve("package-info.java");
if (!Files.exists(file)) {
String packageName = code.replace("__PACKAGE__", pkg.toString().replaceAll("[/\\\\]", "."));
Files.write(absolutePath.resolve("package-info.java"), List.of(packageName));
}
}
}
private static Map<Path, Path> getPackages(SourceDirectorySet allJava) throws IOException {
Set<Path> srcPaths = new HashSet<>();
for (File file : allJava.getSrcDirs()) {
Path toPath = file.getCanonicalFile().toPath();
srcPaths.add(toPath);
}
Map<Path, Path> packages = new HashMap<>();
for (File it : allJava) {
Path javaClass = it.getCanonicalFile().toPath();
if (javaClass.toString().contains("mixin/test")) {
// junit will try to load package-info files (when scanning for tests) causing mixin to throw as classes in mixin packages must not be
// loaded.
continue;
}
for (Path srcPath : srcPaths) {
if (javaClass.startsWith(srcPath) && javaClass.toString().endsWith(".java")) {
Path relative = srcPath.relativize(javaClass);
packages.put(relative.getParent(), javaClass.getParent());
}
}
}
return packages;
}
}