From 11737e67f8b475376927848d0b265f7418513ae0 Mon Sep 17 00:00:00 2001 From: Olivia Brooks <109807080+Cutieguwu@users.noreply.github.com> Date: Mon, 26 Jan 2026 14:29:43 -0500 Subject: [PATCH] Fix Java project structure. --- assets/{ => src/main}/Main.java | 6 +++++ assets/src/test/Main.java | 12 +++++++++ src/fs.rs | 7 +++++- src/main.rs | 43 +++++++++++++++++++++++---------- 4 files changed, 54 insertions(+), 14 deletions(-) rename assets/{ => src/main}/Main.java (58%) create mode 100644 assets/src/test/Main.java diff --git a/assets/Main.java b/assets/src/main/Main.java similarity index 58% rename from assets/Main.java rename to assets/src/main/Main.java index 0e49608..e2c340f 100644 --- a/assets/Main.java +++ b/assets/src/main/Main.java @@ -1,6 +1,12 @@ +package main; + public class Main { public static void main(String[] args) { System.out.println("Hello, world!"); } + + public static int add(int a, int b) { + return a + b; + } } diff --git a/assets/src/test/Main.java b/assets/src/test/Main.java new file mode 100644 index 0000000..4da99a4 --- /dev/null +++ b/assets/src/test/Main.java @@ -0,0 +1,12 @@ +package test; + +public class Main { + + public static void main(String[] args) { + testAdd(); + } + + public static void testAdd() { + assert main.Main.add(2, 2) == 4; + } +} diff --git a/src/fs.rs b/src/fs.rs index 83d0142..34d55a8 100644 --- a/src/fs.rs +++ b/src/fs.rs @@ -10,7 +10,12 @@ pub fn expand_files>(path: P) -> anyhow::Result> { Ok(std::fs::read_dir(path)? .filter_map(|entry| { let path = entry.ok()?.path(); - if path.is_file() { Some(path) } else { None } + if path.is_dir() { + Some(expand_files(path).ok()?) + } else { + Some(vec![path]) + } }) + .flatten() .collect()) } diff --git a/src/main.rs b/src/main.rs index 797447a..19566d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,8 +18,14 @@ use anyhow::Context; use bytesize::ByteSize; const DIR_TARGET: LazyLock = LazyLock::new(|| PathBuf::from("target/")); -const DIR_TEST: LazyLock = LazyLock::new(|| PathBuf::from("test/")); const DIR_SRC: LazyLock = LazyLock::new(|| PathBuf::from("src/")); +/// Cannot flatten this dir out of existence due to IDEs, Linters, +/// and probably also Java expecting it to exist. +const DIR_MAIN: LazyLock = LazyLock::new(|| DIR_SRC.join("main/")); +/// Once again, I would love to pull this out of src/ and into parent, but +/// I can't do that due to IDEs, linters, and probably also Java expecting it to exist in src/. +const DIR_TEST: LazyLock = LazyLock::new(|| DIR_SRC.join("test/")); + const F_NEST_TOML: LazyLock = LazyLock::new(|| PathBuf::from("Nest.toml")); const F_NEST_LOCK: LazyLock = LazyLock::new(|| PathBuf::from("Nest.lock")); @@ -77,8 +83,8 @@ fn init() -> anyhow::Result<()> { .to_owned(); // Make src, target, tests - for dir in [DIR_SRC, DIR_TARGET, DIR_TEST] { - std::fs::create_dir(dir.clone())?; + for dir in [DIR_SRC, DIR_MAIN, DIR_TARGET, DIR_TEST] { + std::fs::create_dir_all(dir.clone())?; } // Make config file. @@ -114,13 +120,24 @@ fn init() -> anyhow::Result<()> { )?; } - // Make Main.java - if let Result::Ok(mut f) = OpenOptions::new() - .write(true) - .create_new(is_empty) - .open(DIR_SRC.clone().join("Main").with_extension(JAVA_EXT_SOURCE)) - { - f.write_all(include_bytes!("../assets/Main.java"))?; + // Make src/main/Main.java + if let Result::Ok(mut f) = OpenOptions::new().write(true).create_new(is_empty).open( + DIR_MAIN + .clone() + .join("Main") + .with_extension(JAVA_EXT_SOURCE), + ) { + f.write_all(include_bytes!("../assets/src/main/Main.java"))?; + } + + // Make src/test/Main.java + if let Result::Ok(mut f) = OpenOptions::new().write(true).create_new(is_empty).open( + DIR_TEST + .clone() + .join("Main") + .with_extension(JAVA_EXT_SOURCE), + ) { + f.write_all(include_bytes!("../assets/src/test/Main.java"))?; } // git init . @@ -133,7 +150,6 @@ fn init() -> anyhow::Result<()> { .read(true) .open(".gitignore") { - dbg!(); let mut buf = String::new(); f.read_to_string(&mut buf)?; @@ -141,7 +157,7 @@ fn init() -> anyhow::Result<()> { DIR_TARGET.as_path().display().to_string(), format!("*.{}", JAVA_EXT_CLASS), ] { - if dbg!(!buf.contains(&ignored)) { + if !buf.contains(&ignored) { f.write(format!("{}\n", ignored).as_bytes())?; } } @@ -192,7 +208,7 @@ fn build() -> anyhow::Result<()> { for target in targets { println!("Compiling {}", target.display()); - if javac.clone().compile(target.as_path()).is_ok() + if javac.clone().compile(dbg!(target.as_path())).is_ok() && let Result::Ok(class) = Class::try_from(target.clone()) { nest_lock.0.insert(target, class); @@ -212,6 +228,7 @@ fn run>( entry_point: P, assertions: bool, ) -> anyhow::Result<(Option, Option)> { + // JRE pathing will be messed up without this. crate::env::set_cwd(DIR_TARGET.as_path())?; java::JVMBuilder::new()