more bugs

This commit is contained in:
2026-06-27 15:24:07 +02:00
parent 60c666f7a1
commit 7008f162b5
3 changed files with 113 additions and 1 deletions

View File

@@ -0,0 +1,79 @@
package click.kamil.springstatemachineexporter.analysis.service;
import click.kamil.springstatemachineexporter.analysis.model.CallChain;
import click.kamil.springstatemachineexporter.analysis.model.EntryPoint;
import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint;
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class BuilderBugTest {
@Test
void shouldResolveEventFromBuilder() throws IOException {
String source = """
package com.example;
public class Controller {
private StateMachine machine;
public void process() {
EventWrapper wrapper = EventWrapper.builder()
.event(TransitionEnum.STATE_X)
.build();
machine.fire(wrapper.getEvent());
}
}
class StateMachine {
public void fire(TransitionEnum event) {}
}
class EventWrapper {
private TransitionEnum event;
public TransitionEnum getEvent() { return event; }
public static Builder builder() { return new Builder(); }
public static class Builder {
private TransitionEnum event;
public Builder event(TransitionEnum e) { this.event = e; return this; }
public EventWrapper build() {
EventWrapper w = new EventWrapper();
w.event = this.event;
return w;
}
}
}
enum TransitionEnum { STATE_X, STATE_Y }
""";
Path tempDir = Files.createTempDirectory("callgraph_test_builder");
Files.writeString(tempDir.resolve("Config.java"), source);
CodebaseContext context = new CodebaseContext();
context.scan(tempDir);
HeuristicCallGraphEngine engine = new HeuristicCallGraphEngine(context);
EntryPoint entryPoint = EntryPoint.builder()
.className("com.example.Controller")
.methodName("process")
.build();
TriggerPoint trigger = TriggerPoint.builder()
.className("com.example.StateMachine")
.methodName("fire")
.event("event")
.build();
List<CallChain> chains = engine.findChains(List.of(entryPoint), List.of(trigger));
assertThat(chains).hasSize(1);
System.out.println("Poly events: " + chains.get(0).getTriggerPoint().getPolymorphicEvents());
assertThat(chains.get(0).getTriggerPoint().getPolymorphicEvents()).contains("TransitionEnum.STATE_X");
}
}