diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/VariableTracer.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/VariableTracer.java index aaf18a1..eb21c15 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/VariableTracer.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/VariableTracer.java @@ -258,7 +258,7 @@ public class VariableTracer { for (Expression expr : initializers) { Expression traced = traceVariable(expr); if (traced instanceof MethodInvocation mi) { - Expression innerMost = unwrapMethodInvocation(mi, 0, methodFqn); + Expression innerMost = unwrapMethodInvocation(mi, 0); stringified.add(innerMost.toString()); } else if (traced instanceof ArrayInitializer) { stringified.add("new Object[]" + traced.toString()); @@ -513,61 +513,13 @@ public class VariableTracer { return (TypeDeclaration) parent; } - private int getReturnedParameterIndex(MethodDeclaration md) { - if (md.getBody() == null) return -1; - List parameters = md.parameters(); - if (parameters.isEmpty()) return -1; - - final List returnedExprs = new ArrayList<>(); - md.getBody().accept(new ASTVisitor() { - @Override - public boolean visit(ReturnStatement node) { - if (node.getExpression() != null) { - returnedExprs.add(node.getExpression().toString()); - } - return super.visit(node); - } - }); - - if (returnedExprs.size() == 1) { - String retStr = returnedExprs.get(0); - for (int i = 0; i < parameters.size(); i++) { - if (parameters.get(i) instanceof SingleVariableDeclaration svd) { - if (svd.getName().getIdentifier().equals(retStr)) { - return i; - } - } - } - } - return -1; - } - - private Expression unwrapMethodInvocation(MethodInvocation mi, int depth, String methodFqn) { + private Expression unwrapMethodInvocation(MethodInvocation mi, int depth) { if (depth > 5) return mi; if (mi.getExpression() != null) { String exprStr = mi.getExpression().toString(); if (!exprStr.equals("Optional") && !exprStr.equals("Stream") && !exprStr.equals("List") && !exprStr.equals("Set") && !exprStr.equals("Arrays") && !exprStr.equals("Objects") && !exprStr.equals("Mono") && !exprStr.equals("Flux")) { return mi; } - } else { - if (methodFqn != null && methodFqn.contains(".")) { - String className = methodFqn.substring(0, methodFqn.lastIndexOf('.')); - TypeDeclaration td = context.getTypeDeclaration(className); - if (td != null) { - MethodDeclaration localMd = context.findMethodDeclaration(td, mi.getName().getIdentifier(), true); - if (localMd != null) { - int paramIdx = getReturnedParameterIndex(localMd); - if (paramIdx >= 0 && paramIdx < mi.arguments().size()) { - Expression arg = (Expression) mi.arguments().get(paramIdx); - if (arg instanceof MethodInvocation innerMi) { - return unwrapMethodInvocation(innerMi, depth + 1, methodFqn); - } - return arg; - } - } - } - } - return mi; } if (!mi.arguments().isEmpty()) { @@ -582,13 +534,13 @@ public class VariableTracer { lowerName.startsWith("derive") || lowerName.startsWith("determine") || lowerName.startsWith("calculate") || lowerName.startsWith("decode") || lowerName.startsWith("extract") || lowerName.startsWith("get") || - lowerName.startsWith("find")) { + lowerName.startsWith("find") || lowerName.startsWith("validate")) { return mi; } Expression arg = (Expression) mi.arguments().get(0); if (arg instanceof MethodInvocation innerMi) { - return unwrapMethodInvocation(innerMi, depth + 1, methodFqn); + return unwrapMethodInvocation(innerMi, depth + 1); } return arg; }