Fail closed on ambiguous simple enum names

Track enum name collisions during scan and refuse to resolve enum values by simple name when multiple enums share the same identifier across packages.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-13 21:51:22 +02:00
parent bbfb54c51b
commit f3c82d5d7f
2 changed files with 28 additions and 1 deletions

View File

@@ -231,6 +231,25 @@ class CodebaseContextTest {
assertThat(context.findEntryPointClasses(List.of("EnableStateMachine"))).isEmpty();
}
@Test
void getEnumValuesShouldFailClosedForAmbiguousSimpleEnumName() throws IOException {
Files.createDirectories(tempDir.resolve("a"));
Files.createDirectories(tempDir.resolve("b"));
Files.writeString(tempDir.resolve("a/OrderEvent.java"),
"package a; public enum OrderEvent { PAY }");
Files.writeString(tempDir.resolve("b/OrderEvent.java"),
"package b; public enum OrderEvent { SHIP }");
CodebaseContext context = new CodebaseContext();
context.scan(tempDir);
assertThat(context.getEnumValues("OrderEvent"))
.as("ambiguous simple enum name must not resolve to arbitrary package")
.isNull();
assertThat(context.getEnumValues("a.OrderEvent")).containsExactly("a.OrderEvent.PAY");
assertThat(context.getEnumValues("b.OrderEvent")).containsExactly("b.OrderEvent.SHIP");
}
@Test
void shouldFindClassWithFullyQualifiedAnnotation() throws IOException {
String source = """