Skip to content

Commit af29020

Browse files
authored
Merge pull request #218 from fujaba/fix/case-sensitive-class-resolution
Resolve classes from classpath directories case-sensitively
2 parents 4ae9261 + 762cd08 commit af29020

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

src/main/java/org/fulib/scenarios/library/DirLibrary.java

+27-5
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,43 @@ public DirLibrary(File source)
1616

1717
// =============== Methods ===============
1818

19-
private File getFile(String className)
19+
private File getValidFileOrNull(String className)
2020
{
21-
return new File(this.getSource().getPath() + File.separatorChar + className + ".class");
21+
final String classFileName = className.replace('/', File.separatorChar) + ".class";
22+
final File file = new File(this.getSource(), classFileName);
23+
if (!file.exists())
24+
{
25+
return null;
26+
}
27+
28+
final String canonicalFile;
29+
try
30+
{
31+
canonicalFile = file.getCanonicalPath();
32+
}
33+
catch (IOException e)
34+
{
35+
return null;
36+
}
37+
38+
// case sensitive check
39+
if (!canonicalFile.endsWith(classFileName))
40+
{
41+
return null;
42+
}
43+
return file;
2244
}
2345

2446
@Override
2547
public boolean hasClass(String name)
2648
{
27-
return this.getFile(name).exists();
49+
return this.getValidFileOrNull(name) != null;
2850
}
2951

3052
@Override
3153
public InputStream loadClass(String name) throws IOException
3254
{
33-
final File file = this.getFile(name);
34-
return file.exists() ? new FileInputStream(file) : null;
55+
final File file = this.getValidFileOrNull(name);
56+
return file != null ? new FileInputStream(file) : null;
3557
}
3658
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.fulib.scenarios.library;
2+
3+
import org.junit.Test;
4+
5+
import java.io.File;
6+
7+
import static org.junit.Assert.*;
8+
9+
public class DirLibraryTest
10+
{
11+
12+
@Test
13+
public void hasClass()
14+
{
15+
final File classesDir = new File("build/classes/java/test");
16+
final DirLibrary library = new DirLibrary(classesDir);
17+
18+
assertTrue(library.hasClass("org/fulib/scenarios/library/DirLibraryTest"));
19+
assertFalse(library.hasClass("org/fulib/scenarios/library/ClassThatDoesNotExist"));
20+
assertFalse(library.hasClass("org/fulib/scenarios/library/dirlibrarytest"));
21+
assertFalse(library.hasClass("Org/Fulib/Scenarios/Library/DirLibraryTest"));
22+
}
23+
}

0 commit comments

Comments
 (0)