diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java index 7588992..0ca622d 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java @@ -268,7 +268,7 @@ public abstract class AbstractCallGraphEngine implements CallGraphEngine { constantExtractor.extractConstantsFromExpression(tracedSetter, setterEvents); } if (!setterEvents.isEmpty()) { - System.out.println("DEBUG Early return 1: setterEvents = " + setterEvents); + log.debug("Early return 1: setterEvents = {}", setterEvents); return TriggerPoint.builder() .event(tp.getEvent()) .className(tp.getClassName()) @@ -293,7 +293,7 @@ public abstract class AbstractCallGraphEngine implements CallGraphEngine { if (hasGetterOnReceiver) { List getterEvents = evaluateGetterOnReceiver(resolvedValue, methodSuffix, entryMethod, path, callGraph); if (getterEvents != null && !getterEvents.isEmpty()) { - System.out.println("DEBUG Early return 2: getterEvents = " + getterEvents); + log.debug("Early return 2: getterEvents = {}", getterEvents); return TriggerPoint.builder() .event(tp.getEvent()) .className(tp.getClassName()) @@ -323,7 +323,7 @@ public abstract class AbstractCallGraphEngine implements CallGraphEngine { } } - System.out.println("DEBUG resolvedValue before ENUM_SET check: " + resolvedValue + " for path: " + path); + log.debug("resolvedValue before ENUM_SET check: {} for path: {}", resolvedValue, path); List polymorphicEvents = new ArrayList<>(); if (resolvedValue.startsWith("ENUM_SET:")) { @@ -625,7 +625,7 @@ public abstract class AbstractCallGraphEngine implements CallGraphEngine { } } - System.out.println("DEBUG declaredType before getEnumValues: " + declaredType + " for exprNode: " + exprNode + " in " + entryMethod); + log.debug("declaredType before getEnumValues: {} for exprNode: {} in {}", declaredType, exprNode, entryMethod); if (declaredType != null) { List enumValues = context.getEnumValues(declaredType); if (enumValues != null && !enumValues.isEmpty()) { diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstantExtractor.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstantExtractor.java index e8e5a33..fa955ff 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstantExtractor.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstantExtractor.java @@ -89,7 +89,8 @@ public class ConstantExtractor { } else if (expr instanceof MethodInvocation mi) { String methodName = mi.getName().getIdentifier(); - System.out.println("Processing mi: " + mi); if (methodName.equals("get") || methodName.equals("getOrDefault")) { + log.trace("Processing mi: {}", mi); + if (methodName.equals("get") || methodName.equals("getOrDefault")) { if (mi.getExpression() != null) { if (variableTracer != null) { List traced = variableTracer.traceVariableAll(mi.getExpression()); @@ -281,7 +282,7 @@ public class ConstantExtractor { } public List resolveMethodReturnConstant(String className, String methodName, int depth, Set visited, CompilationUnit contextCu) { - System.out.println("DEBUG ConstantExtractor.resolveMethodReturnConstant CALLED: className=" + className + ", methodName=" + methodName); + log.debug("ConstantExtractor.resolveMethodReturnConstant CALLED: className={}, methodName={}", className, methodName); log.debug("Entering resolveMethodReturnConstant with className={}, methodName={}, depth={}", className, methodName, depth); if (depth > 20) { log.debug("Exiting resolveMethodReturnConstant early (depth limit) for {}.{}", className, methodName); @@ -392,7 +393,7 @@ public class ConstantExtractor { } } visited.remove(fqn); - System.out.println("DEBUG resolveMethodReturnConstant className=" + className + " methodName=" + methodName + " returns: " + constants); + log.debug("resolveMethodReturnConstant className={} methodName={} returns: {}", className, methodName, constants); log.debug("resolveMethodReturnConstant for class={}, method={} resolved constants: {}", className, methodName, constants); return constants; } diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstructorAnalyzer.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstructorAnalyzer.java index d724027..900df1c 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstructorAnalyzer.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ConstructorAnalyzer.java @@ -5,6 +5,9 @@ import click.kamil.springstatemachineexporter.ast.common.CodebaseContext; import org.eclipse.jdt.core.dom.*; import java.util.*; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class ConstructorAnalyzer { private final CodebaseContext context; private final ConstantResolver constantResolver; @@ -591,11 +594,11 @@ public class ConstructorAnalyzer { try { Map fieldValues = buildFieldValuesFromCIC(td, cic, context, this::evaluateMethodCallInConstructor); - System.out.println("RESOLVE_GETTER: td=" + context.getFqn(td) + ", fieldValues=" + fieldValues); + log.debug("RESOLVE_GETTER: td={}, fieldValues={}", context.getFqn(td), fieldValues); if (fieldValues.isEmpty()) return Collections.emptyList(); String result = constantResolver.evaluateMethodBodyWithLocals(getter, fieldValues, context, visited); - System.out.println("RESOLVE_GETTER: result=" + result); + log.debug("RESOLVE_GETTER: result={}", result); return result != null ? List.of(result) : Collections.emptyList(); } finally { visited.remove(getterKey); diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java index 2a24370..4adb003 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngine.java @@ -185,16 +185,16 @@ public class JdtCallGraphEngine extends AbstractCallGraphEngine { nameBinding = fa.resolveFieldBinding(); } if (nameBinding instanceof IVariableBinding varBinding) { - System.out.println("CALLGRAPH RESOLVING BEAN FOR BINDING: " + varBinding.getName() + " calling " + methodName); + log.debug("CALLGRAPH RESOLVING BEAN FOR BINDING: {} calling {}", varBinding.getName(), methodName); String concreteFqn = injectionAnalyzer.resolveInjectedBeanFqn(varBinding); if (concreteFqn != null) { - System.out.println(" -> RESOLVED CONCRETE FQN: " + concreteFqn); + log.debug(" -> RESOLVED CONCRETE FQN: {}", concreteFqn); return concreteFqn + "." + methodName; } else { - System.out.println(" -> RESOLVE FAILED, RETURNED NULL"); + log.debug(" -> RESOLVE FAILED, RETURNED NULL"); } } else { - System.out.println("CALLGRAPH NAME BINDING IS NOT VARIABLE: " + nameBinding + " calling " + methodName); + log.debug("CALLGRAPH NAME BINDING IS NOT VARIABLE: {} calling {}", nameBinding, methodName); } } diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java index 0a4086b..7215ee0 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/spring/SpringDependencyResolver.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class SpringDependencyResolver { private final SpringBeanRegistry registry; @@ -21,17 +24,17 @@ public class SpringDependencyResolver { */ public List resolve(String requiredTypeFqn, String qualifier, String injectionName) { if (requiredTypeFqn == null) return new ArrayList<>(); + log.debug("RESOLVING {} qual={} injectionName={}", requiredTypeFqn, qualifier, injectionName); // 1. Filter by Type (Exact FQN or Assignable Type) - System.out.println("RESOLVING " + requiredTypeFqn + " qual=" + qualifier + " injectionName=" + injectionName); List candidates = registry.getBeans().stream() .filter(bean -> requiredTypeFqn.equals(bean.getTypeFqn()) || bean.getAssignableTypes().contains(requiredTypeFqn)) .collect(Collectors.toList()); - System.out.println("CANDIDATES AFTER TYPE: " + candidates.stream().map(c -> c.getTypeFqn() + " (primary=" + c.isPrimary() + " names=" + c.getBeanNames() + " qual=" + c.getQualifiers() + ")").collect(Collectors.toList())); + log.debug("CANDIDATES AFTER TYPE: {}", candidates.stream().map(c -> c.getTypeFqn() + " (primary=" + c.isPrimary() + " names=" + c.getBeanNames() + " qual=" + c.getQualifiers() + ")").collect(Collectors.toList())); if (candidates.isEmpty() || candidates.size() == 1) { - System.out.println("RETURNING: " + candidates.size()); - return candidates; + log.debug("RETURNING: {}", candidates.size()); + return candidates; } // 2. Filter by Qualifier (if provided) @@ -81,7 +84,7 @@ public class SpringDependencyResolver { } // Return whatever candidates remain (could be ambiguous) - System.out.println("RETURNING: " + candidates.size()); + log.debug("RETURNING: {}", candidates.size()); return candidates; } } diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java index 917bbb7..a24e662 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/CodebaseContext.java @@ -378,7 +378,7 @@ public class CodebaseContext { String fqn = simpleNameToFqn.get(cleanName); if (fqn != null) values = enumValues.get(fqn); } - System.out.println("DEBUG getEnumValues called for: " + fqnOrSimpleName + " resolved to " + cleanName + ". Returns: " + values); + log.debug("getEnumValues called for: {} resolved to {}. Returns: {}", fqnOrSimpleName, cleanName, values); return values; } diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/JdtDataFlowModel.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/JdtDataFlowModel.java index 22d2975..8cfdd2d 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/JdtDataFlowModel.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/JdtDataFlowModel.java @@ -3,6 +3,9 @@ package click.kamil.springstatemachineexporter.ast.common; import org.eclipse.jdt.core.dom.*; import java.util.*; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class JdtDataFlowModel implements DataFlowModel { private final CodebaseContext context; private final Map cfgCache = new HashMap<>(); @@ -436,7 +439,8 @@ public class JdtDataFlowModel implements DataFlowModel { currentParamValues.put(paramVb, resolvedArg); } } - System.out.println("EVAL_CTOR: cd=" + cd.getName() + ", currentParamValues=" + currentParamValues); + + log.debug("EVAL_CTOR: cd={}, currentParamValues={}", cd.getName(), currentParamValues); List statements = cd.getBody().statements(); if (!statements.isEmpty()) {