From 13938c12d1fbae5b1cc2c51def9bc52458f3d954 Mon Sep 17 00:00:00 2001 From: kelmith Date: Wed, 26 Aug 2026 22:44:49 +0530 Subject: [PATCH 1/3] fix: capture Java enums as Class and DataModel nodes --- ast/src/lang/queries/java.rs | 6 +++++ .../stakgraph/java/nonweb/DomainTypes.java | 2 ++ .../graph/stakgraph/java/nonweb/Enums.java | 23 +++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/Enums.java diff --git a/ast/src/lang/queries/java.rs b/ast/src/lang/queries/java.rs index c985b7f0d..668c2b36b 100644 --- a/ast/src/lang/queries/java.rs +++ b/ast/src/lang/queries/java.rs @@ -125,6 +125,9 @@ impl Stack for Java { ) )? )@{CLASS_DEFINITION} + (enum_declaration + name: (identifier)@{CLASS_NAME} + )@{CLASS_DEFINITION} "# ) } @@ -410,6 +413,9 @@ impl Stack for Java { (record_declaration name: (identifier) @{STRUCT_NAME} ) @{STRUCT} + (enum_declaration + name: (identifier) @{STRUCT_NAME} + ) @{STRUCT} (class_declaration (modifiers) @modifier (#match? @modifier ".final$") name: (identifier) @{STRUCT_NAME} diff --git a/ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/DomainTypes.java b/ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/DomainTypes.java index 34d7055f3..1a7732ca8 100644 --- a/ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/DomainTypes.java +++ b/ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/DomainTypes.java @@ -4,6 +4,8 @@ public record InvoiceRecord(String id, long amount) { } +// @ast node: Class "BillingStatus" +// @ast node: DataModel "BillingStatus" enum BillingStatus { PENDING, PAID, diff --git a/ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/Enums.java b/ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/Enums.java new file mode 100644 index 000000000..183332149 --- /dev/null +++ b/ast/src/testing/java/src/main/java/graph/stakgraph/java/nonweb/Enums.java @@ -0,0 +1,23 @@ +package graph.stakgraph.java.nonweb; + +// Enum types must be captured as BOTH a Class and a DataModel (mirroring how +// records and Rust enums are handled). Covers package-private and public enums. + +// package-private enum +// @ast node: Class "Suit" +// @ast node: DataModel "Suit" +enum Suit { + HEARTS, + DIAMONDS, + CLUBS, + SPADES +} + +// public enum +// @ast node: Class "Priority" +// @ast node: DataModel "Priority" +public enum Priority { + LOW, + MEDIUM, + HIGH +} From 0d795eb95f6486d52fef90a55f561f7a5b11bf10 Mon Sep 17 00:00:00 2001 From: kelmith Date: Wed, 26 Aug 2026 22:58:38 +0530 Subject: [PATCH 2/3] test: update java coverage counts for enum Class/DataModel capture --- ast/src/testing/coverage/java.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ast/src/testing/coverage/java.rs b/ast/src/testing/coverage/java.rs index 7c6ee159c..0a2ceb64f 100644 --- a/ast/src/testing/coverage/java.rs +++ b/ast/src/testing/coverage/java.rs @@ -83,10 +83,10 @@ async fn test_btreemap_graph_structure() -> Result<()> { assert_eq!(e2e_tests.len(), 0); let classes = graph.find_nodes_by_type(NodeType::Class); - assert_eq!(classes.len(), 20); + assert_eq!(classes.len(), 23); let data_models = graph.find_nodes_by_type(NodeType::DataModel); - assert_eq!(data_models.len(), 2); + assert_eq!(data_models.len(), 5); let traits = graph.find_nodes_by_type(NodeType::Trait); assert_eq!(traits.len(), 2); @@ -111,7 +111,7 @@ async fn test_btreemap_test_to_function_edges() -> Result<()> { assert_eq!(calls_edges, 35); let contains_edges = graph.count_edges_of_type(EdgeType::Contains); - assert_eq!(contains_edges, 252); + assert_eq!(contains_edges, 260); let handler_edges = graph.count_edges_of_type(EdgeType::Handler); assert_eq!(handler_edges, 11); From 8053440b7c3231560aaa7f8f8b6a65e4b3351961 Mon Sep 17 00:00:00 2001 From: kelmith Date: Wed, 26 Aug 2026 23:09:09 +0530 Subject: [PATCH 3/3] test: update java CLI parse-stats import count for new enum fixture file --- cli/tests/cli/java.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/tests/cli/java.rs b/cli/tests/cli/java.rs index 23b5086a1..3192e650e 100644 --- a/cli/tests/cli/java.rs +++ b/cli/tests/cli/java.rs @@ -41,7 +41,7 @@ fn parse_stats_java_dir() { assert_eq!(out.exit_code, 0, "stderr: {}", out.stderr); assert!(out.stdout.contains("Class 15"), "stdout: {}", out.stdout); - assert!(out.stdout.contains("Import 18"), "stdout: {}", out.stdout); + assert!(out.stdout.contains("Import 19"), "stdout: {}", out.stdout); } // ── search ────────────────────────────────────────────────────────────────────