From ce1271b1bd1baa8a4110b4196c96a30baae315e3 Mon Sep 17 00:00:00 2001 From: Amit Mishra Date: Mon, 6 Jul 2026 23:06:34 +0530 Subject: [PATCH] fix: avoid replacing dots in directory path when building output filename JavaCodeSerializer.save() was calling name.replace('.', '/') on the entire name parameter, including any directory path prefix. This caused directory components containing dots (e.g. version numbers like reflections-0.9.16) to be treated as package separators, resulting in serialized data being written to the wrong location. The fix splits the name at the last '/' separator so that only the class name portion (which legitimately uses dots as package separators) is transformed. The directory prefix is kept unchanged. Fixes #478 --- .../org/reflections/serializers/JavaCodeSerializer.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/reflections/serializers/JavaCodeSerializer.java b/src/main/java/org/reflections/serializers/JavaCodeSerializer.java index 8ab5dc45..656bc55e 100644 --- a/src/main/java/org/reflections/serializers/JavaCodeSerializer.java +++ b/src/main/java/org/reflections/serializers/JavaCodeSerializer.java @@ -70,7 +70,11 @@ public File save(Reflections reflections, String name) { } //prepare file - String filename = name.replace('.', '/').concat(".java"); + // Only replace dots in the class name part (after the last '/'), not in any directory path components. + int lastSlash = name.lastIndexOf('/'); + String dirPart = lastSlash == -1 ? "" : name.substring(0, lastSlash + 1); + String classPart = name.substring(lastSlash + 1); + String filename = dirPart + classPart.replace('.', '/') + ".java"; File file = Serializer.prepareFile(filename); //get package and class names