Skip to content

Commit 52c4d26

Browse files
committed
Fix dev classpath when root directory is not "Sponge"
1 parent 2321a69 commit 52c4d26

File tree

4 files changed

+68
-53
lines changed

4 files changed

+68
-53
lines changed

bootstrap-dev/src/main/java/org/spongepowered/bootstrap/dev/SourceSet.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import java.util.ArrayList;
3030
import java.util.List;
3131

32-
public record SourceSet(String project, String name, String format) {
32+
public record SourceSet(Path project, String name, String format) {
3333

3434
@Override
3535
public String toString() {
@@ -57,32 +57,34 @@ public static SourceSet identify(Path path) {
5757
}
5858

5959
// from right to left
60-
final List<String> parts = new ArrayList<>();
60+
final List<String> names = new ArrayList<>();
61+
final List<Path> paths = new ArrayList<>();
6162
while (path != null) {
62-
parts.add(path.getFileName().toString());
63-
if (parts.size() >= 5) {
63+
names.add(path.getFileName().toString());
64+
paths.add(path);
65+
if (names.size() >= 5) {
6466
break;
6567
}
6668
path = path.getParent();
6769
}
6870

69-
if (parts.size() >= 4 && (parts.get(0).equals("classes") || parts.get(0).equals("resources"))) {
70-
final String name = parts.get(1);
71-
return new SourceSet(parts.get(3), name.equals("production") ? "main" : name, "IntelliJ");
71+
if (names.size() >= 4 && (names.get(0).equals("classes") || names.get(0).equals("resources"))) {
72+
final String name = names.get(1);
73+
return new SourceSet(paths.get(3), name.equals("production") ? "main" : name, "IntelliJ");
7274
}
7375

74-
if (parts.size() >= 4 && (parts.get(1).equals("resources") || parts.get(1).equals("generated"))) {
75-
return new SourceSet(parts.get(3), parts.get(0), "Gradle");
76+
if (names.size() >= 4 && (names.get(1).equals("resources") || names.get(1).equals("generated"))) {
77+
return new SourceSet(paths.get(3), names.get(0), "Gradle");
7678
}
7779

78-
if (parts.size() >= 5 && parts.get(2).equals("classes")) {
79-
return new SourceSet(parts.get(4), parts.get(0), "Gradle");
80+
if (names.size() >= 5 && names.get(2).equals("classes")) {
81+
return new SourceSet(paths.get(4), names.get(0), "Gradle");
8082
}
8183

82-
if (parts.size() >= 3 && parts.get(1).equals("bin")) {
83-
return new SourceSet(parts.get(2), parts.get(0), "Eclipse");
84+
if (names.size() >= 3 && names.get(1).equals("bin")) {
85+
return new SourceSet(paths.get(2), names.get(0), "Eclipse");
8486
}
8587

86-
return new SourceSet("", parts.get(0), "Unknown");
88+
return new SourceSet(paths.get(0), "?", "Unknown");
8789
}
8890
}

bootstrap-dev/src/main/java/org/spongepowered/bootstrap/dev/SpongeDevClasspathFixer.java

Lines changed: 50 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.io.File;
3030
import java.nio.file.Files;
3131
import java.nio.file.Path;
32+
import java.nio.file.Paths;
3233
import java.util.ArrayList;
3334
import java.util.List;
3435
import java.util.Set;
@@ -49,6 +50,7 @@ public String name() {
4950
*/
5051
@Override
5152
public boolean process(final List<Path[]> classpath) {
53+
final Path spongeRoot = Paths.get(System.getProperty("sponge.dev.root")).toAbsolutePath();
5254
final Set<String> ignoredLibs = Set.of("bootstrap-dev.jar");
5355
final Set<String> bootLibs = Set.of(System.getProperty("sponge.dev.boot").split(File.pathSeparator));
5456
final Set<String> gameShadedLibs = Set.of(System.getProperty("sponge.dev.gameShaded").split(File.pathSeparator));
@@ -70,46 +72,55 @@ public boolean process(final List<Path[]> classpath) {
7072
final Path path = paths[0];
7173
final SourceSet sourceSet = SourceSet.identify(path);
7274
if (sourceSet != null) {
73-
if (DEBUG) {
74-
System.out.println("SourceSet (" + sourceSet + "): " + path);
75-
}
75+
if (sourceSet.project().startsWith(spongeRoot)) {
76+
if (DEBUG) {
77+
System.out.println("Sponge SourceSet (" + sourceSet + "): " + path);
78+
}
7679

77-
switch (sourceSet.project()) {
78-
case "bootstrap-dev":
79-
// ignore
80-
break;
81-
case "modlauncher-transformers", "library-manager":
82-
bootUnions.add(sourceSet.project(), path);
83-
break;
84-
case "SpongeAPI":
85-
switch (sourceSet.name()) {
86-
case "ap":
87-
// ignore
88-
break;
89-
case "main":
90-
hasAPISourceSet.set(true);
91-
// no break
92-
default:
93-
unions.add("sponge", path);
94-
break;
95-
}
96-
break;
97-
case "Sponge", "vanilla", "forge":
98-
switch (sourceSet.name()) {
99-
case "applaunch":
100-
bootUnions.add("applaunch", path);
101-
break;
102-
case "lang":
103-
unions.add("lang", path);
104-
break;
105-
default:
106-
unions.add("sponge", path);
107-
break;
108-
}
109-
break;
110-
default:
111-
unions.add(sourceSet.project(), path);
112-
break;
80+
final String projectName = spongeRoot.relativize(sourceSet.project()).toString();
81+
switch (projectName) {
82+
case "bootstrap-dev":
83+
// ignore
84+
break;
85+
case "modlauncher-transformers", "library-manager":
86+
bootUnions.add(projectName, path);
87+
break;
88+
case "SpongeAPI":
89+
switch (sourceSet.name()) {
90+
case "ap":
91+
// ignore
92+
break;
93+
case "main":
94+
hasAPISourceSet.set(true);
95+
// no break
96+
default:
97+
unions.add("sponge", path);
98+
break;
99+
}
100+
break;
101+
case "", "vanilla", "forge":
102+
switch (sourceSet.name()) {
103+
case "applaunch":
104+
bootUnions.add("applaunch", path);
105+
break;
106+
case "lang":
107+
unions.add("lang", path);
108+
break;
109+
default:
110+
unions.add("sponge", path);
111+
break;
112+
}
113+
break;
114+
default:
115+
unions.add(projectName, path);
116+
break;
117+
}
118+
} else {
119+
if (DEBUG) {
120+
System.out.println("External SourceSet (" + sourceSet + "): " + path);
121+
}
122+
123+
unions.add(sourceSet.project().toString(), path);
113124
}
114125
return true;
115126
}

forge/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ afterEvaluate {
247247
val bootFileNames = spongeImpl.buildRuntimeFileNames(serviceLayerConfig.get()) // service in boot during dev
248248
val gameShadedFileNames = spongeImpl.buildRuntimeFileNames(gameShadedLibrariesConfig.get())
249249
runs.configureEach {
250+
jvmArgs("-Dsponge.dev.root=" + project.rootDir)
250251
jvmArgs("-Dsponge.dev.boot=$bootFileNames")
251252
jvmArgs("-Dsponge.dev.gameShaded=$gameShadedFileNames")
252253
}

vanilla/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ minecraft {
301301
// jvmArgs("-Dbsl.debug=true") // Uncomment to debug bootstrap classpath
302302
mainClass("net.minecraftforge.bootstrap.ForgeBootstrap")
303303

304+
jvmArgs("-Dsponge.dev.root=" + project.rootDir)
304305
jvmArgs("-Dsponge.dev.boot=$bootFileNames")
305306
jvmArgs("-Dsponge.dev.gameShaded=$gameShadedFileNames")
306307
}

0 commit comments

Comments
 (0)