better enricher attempt

This commit is contained in:
2026-06-19 21:21:44 +02:00
parent 7077214c81
commit bf9208d529
4 changed files with 115 additions and 7 deletions

View File

@@ -168,7 +168,7 @@ class TransitionLinkerEnricherTest {
}
@Test
void shouldIgnoreWildcardWhenContextMachineIdIsMissing() {
void shouldAllowWildcardWhenContextMachineIdIsMissing() {
Transition t1 = new Transition();
t1.setSourceStates(List.of(State.of("NEW", "NEW")));
t1.setTargetStates(List.of(State.of("PAID", "PAID")));
@@ -176,7 +176,7 @@ class TransitionLinkerEnricherTest {
CallChain chain = CallChain.builder()
.triggerPoint(TriggerPoint.builder().event("event").build())
// Intentionally NO contextMachineId or stateMachineId
// NO contextMachineId or stateMachineId
.build();
AnalysisResult result = AnalysisResult.builder()
@@ -188,6 +188,6 @@ class TransitionLinkerEnricherTest {
enricher.enrich(result, null, null);
CallChain updatedChain = result.getMetadata().getCallChains().get(0);
assertThat(updatedChain.getMatchedTransitions()).isNullOrEmpty();
assertThat(updatedChain.getMatchedTransitions()).hasSize(1);
}
}

View File

@@ -165,4 +165,58 @@ class CallGraphBuilderTest {
CallChain chain = chains.get(0);
assertThat(chain.getTriggerPoint().getEvent()).isEqualTo("OrderEvents.CREATE");
}
@Test
void shouldResolveTriggerPointLocalVariableAcrossChain() throws IOException {
String source = """
package com.example;
public class OrderController {
private OrderService service;
public void processOrderEvent(MyOrderEvent domainEvent) {
doProcessOrderEvent(domainEvent);
}
private void doProcessOrderEvent(MyOrderEvent domainEvent) {
OrderEvents eventType = domainEvent.getType();
service.updateOrderState(eventType);
}
}
class OrderService {
public void updateOrderState(OrderEvents event) {
// sendEvent
}
}
class MyOrderEvent {
public OrderEvents getType() { return OrderEvents.PAY; }
}
enum OrderEvents { CREATE, PAY }
""";
Path tempDir = Files.createTempDirectory("callgraph_test2");
Files.writeString(tempDir.resolve("OrderConfig.java"), source);
CodebaseContext context = new CodebaseContext();
context.scan(tempDir);
CallGraphBuilder builder = new CallGraphBuilder(context);
EntryPoint entryPoint = EntryPoint.builder()
.className("com.example.OrderController")
.methodName("processOrderEvent")
.build();
TriggerPoint trigger = TriggerPoint.builder()
.className("com.example.OrderService")
.methodName("updateOrderState")
.event("event")
.build();
List<CallChain> chains = builder.findChains(List.of(entryPoint), List.of(trigger));
assertThat(chains).hasSize(1);
CallChain chain = chains.get(0);
assertThat(chain.getTriggerPoint().getEvent()).isEqualTo("domainEvent.getType()");
}
}