From 810ef49464005c008d204e83d9b306efbf0b1080 Mon Sep 17 00:00:00 2001 From: Bjarne Koll Date: Wed, 18 Dec 2024 03:44:32 +0100 Subject: [PATCH] Allow folders as classpath entries The IJ parser allows for folders to be part of the classpath. This behaviour is useful for supplying folders of compiled .class or source files. --- .../net/neoforged/jst/cli/intellij/ClasspathSetup.java | 3 ++- .../folder_classpath_entry/accesstransformer.cfg | 1 + .../folder_classpath_entry/deps/a/b/c/Reference.java | 5 +++++ .../folder_classpath_entry/expected/C1.java | 7 +++++++ .../folder_classpath_entry/source/C1.java | 7 +++++++ .../test/java/net/neoforged/jst/tests/EmbeddedTest.java | 5 +++++ 6 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/data/accesstransformer/folder_classpath_entry/accesstransformer.cfg create mode 100644 tests/data/accesstransformer/folder_classpath_entry/deps/a/b/c/Reference.java create mode 100644 tests/data/accesstransformer/folder_classpath_entry/expected/C1.java create mode 100644 tests/data/accesstransformer/folder_classpath_entry/source/C1.java diff --git a/cli/src/main/java/net/neoforged/jst/cli/intellij/ClasspathSetup.java b/cli/src/main/java/net/neoforged/jst/cli/intellij/ClasspathSetup.java index ad19d4c..662e03f 100644 --- a/cli/src/main/java/net/neoforged/jst/cli/intellij/ClasspathSetup.java +++ b/cli/src/main/java/net/neoforged/jst/cli/intellij/ClasspathSetup.java @@ -104,7 +104,8 @@ public static void addLibrary(Logger logger, Path libraryPath, IntelliJEnvironme if (!Files.exists(libraryPath)) { throw new UncheckedIOException(new NoSuchFileException(libraryPath.toString())); } - ijEnv.addJarToClassPath(libraryPath); + if (Files.isDirectory(libraryPath)) ijEnv.addFolderToClasspath(libraryPath); + else ijEnv.addJarToClassPath(libraryPath); logger.debug("Added %s", libraryPath); } } diff --git a/tests/data/accesstransformer/folder_classpath_entry/accesstransformer.cfg b/tests/data/accesstransformer/folder_classpath_entry/accesstransformer.cfg new file mode 100644 index 0000000..14e8cc6 --- /dev/null +++ b/tests/data/accesstransformer/folder_classpath_entry/accesstransformer.cfg @@ -0,0 +1 @@ +public C1 get()La/b/c/Reference; diff --git a/tests/data/accesstransformer/folder_classpath_entry/deps/a/b/c/Reference.java b/tests/data/accesstransformer/folder_classpath_entry/deps/a/b/c/Reference.java new file mode 100644 index 0000000..3de7dfc --- /dev/null +++ b/tests/data/accesstransformer/folder_classpath_entry/deps/a/b/c/Reference.java @@ -0,0 +1,5 @@ +package a.b.c; + +public record Reference(int a) { + +} \ No newline at end of file diff --git a/tests/data/accesstransformer/folder_classpath_entry/expected/C1.java b/tests/data/accesstransformer/folder_classpath_entry/expected/C1.java new file mode 100644 index 0000000..dd66ac2 --- /dev/null +++ b/tests/data/accesstransformer/folder_classpath_entry/expected/C1.java @@ -0,0 +1,7 @@ +import a.b.c.Reference; + +public class C1 { + public Reference get() { + return new Reference(1); + } +} \ No newline at end of file diff --git a/tests/data/accesstransformer/folder_classpath_entry/source/C1.java b/tests/data/accesstransformer/folder_classpath_entry/source/C1.java new file mode 100644 index 0000000..3fe93a3 --- /dev/null +++ b/tests/data/accesstransformer/folder_classpath_entry/source/C1.java @@ -0,0 +1,7 @@ +import a.b.c.Reference; + +public class C1 { + private Reference get() { + return new Reference(1); + } +} \ No newline at end of file diff --git a/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java b/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java index bc8e05f..f0d5cd8 100644 --- a/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java +++ b/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java @@ -302,6 +302,11 @@ void testMethodsInheritance() throws Exception { void testHiddenPrefixes() throws Exception { runATTest("hidden_prefix", "--hidden-prefix=other"); } + + @Test + void testFolderClasspathEntries() throws Exception { + runATTest("folder_classpath_entry", "--classpath=" + testDataRoot.resolve("accesstransformer/folder_classpath_entry/deps")); + } } @Nested