diff --git a/src/main/java/click/kamil/callgraphexporter/JdtResolvedCallGraph.java b/src/main/java/click/kamil/callgraphexporter/JdtResolvedCallGraph.java index e307a97..08b9a8e 100644 --- a/src/main/java/click/kamil/callgraphexporter/JdtResolvedCallGraph.java +++ b/src/main/java/click/kamil/callgraphexporter/JdtResolvedCallGraph.java @@ -1,5 +1,8 @@ package click.kamil.callgraphexporter; +import click.kamil.callgraphexporter.domain.MethodMetadata; +import click.kamil.callgraphexporter.domain.MethodSignature; +import click.kamil.callgraphexporter.domain.Modifiers; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.dom.*; @@ -93,9 +96,8 @@ public class JdtResolvedCallGraph { }); } + // Fixed: matches your MethodSignature record with only methodName and paramTypes private static MethodSignature toSignature(IMethodBinding binding) { - String packageName = binding.getDeclaringClass().getPackage().getName(); - String className = binding.getDeclaringClass().getName(); String methodName = binding.getName(); List paramTypes = new ArrayList<>(); @@ -103,7 +105,7 @@ public class JdtResolvedCallGraph { paramTypes.add(param.getName()); } - return new MethodSignature(packageName, className, methodName, paramTypes); + return new MethodSignature(methodName, paramTypes); } private static MethodMetadata toMetadata(IMethodBinding binding, MethodDeclaration method) { @@ -123,18 +125,25 @@ public class JdtResolvedCallGraph { private static void generateDotFile(String filename) throws IOException { StringBuilder sb = new StringBuilder("digraph G {\n"); for (MethodSignature caller : callGraph.keySet()) { + String callerLabel = formatSignature(caller); for (MethodSignature callee : callGraph.get(caller)) { - sb.append(" \"").append(caller).append("\" -> \"").append(callee).append("\";\n"); + String calleeLabel = formatSignature(callee); + sb.append(" \"").append(callerLabel).append("\" -> \"").append(calleeLabel).append("\";\n"); } } sb.append("}"); Files.writeString(new File(filename).toPath(), sb.toString()); } + + private static String formatSignature(MethodSignature sig) { + // Build a readable label (methodName + param list) + return sig.methodName() + sig.parameterTypes(); + } + private static Set extractModifiers(IMethodBinding binding, MethodDeclaration method) { Set result = new HashSet<>(); int mods = binding.getModifiers(); - // 1. From bitmask if (Modifier.isPublic(mods)) result.add(Modifiers.PUBLIC); if (Modifier.isPrivate(mods)) result.add(Modifiers.PRIVATE); if (Modifier.isProtected(mods)) result.add(Modifiers.PROTECTED); @@ -145,13 +154,10 @@ public class JdtResolvedCallGraph { if (Modifier.isSynchronized(mods)) result.add(Modifiers.SYNCHRONIZED); if (Modifier.isStrictfp(mods)) result.add(Modifiers.STRICTFP); - // 2. From modifiers list for special cases for (Object mod : method.modifiers()) { if (mod instanceof Modifier keyword) { if (keyword.isDefault()) result.add(Modifiers.DEFAULT); - // NOTE: isSealed and isNonSealed are class-level only } - // If needed, check for annotation modifiers here } return result; diff --git a/src/main/java/click/kamil/callgraphexporter/Method.java b/src/main/java/click/kamil/callgraphexporter/domain/Method.java similarity index 85% rename from src/main/java/click/kamil/callgraphexporter/Method.java rename to src/main/java/click/kamil/callgraphexporter/domain/Method.java index 415ef24..6e34adf 100644 --- a/src/main/java/click/kamil/callgraphexporter/Method.java +++ b/src/main/java/click/kamil/callgraphexporter/domain/Method.java @@ -1,4 +1,4 @@ -package click.kamil.callgraphexporter; +package click.kamil.callgraphexporter.domain; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/click/kamil/callgraphexporter/MethodMetadata.java b/src/main/java/click/kamil/callgraphexporter/domain/MethodMetadata.java similarity index 85% rename from src/main/java/click/kamil/callgraphexporter/MethodMetadata.java rename to src/main/java/click/kamil/callgraphexporter/domain/MethodMetadata.java index 237b6d9..241a23c 100644 --- a/src/main/java/click/kamil/callgraphexporter/MethodMetadata.java +++ b/src/main/java/click/kamil/callgraphexporter/domain/MethodMetadata.java @@ -1,4 +1,4 @@ -package click.kamil.callgraphexporter; +package click.kamil.callgraphexporter.domain; import java.util.List; import java.util.Set; diff --git a/src/main/java/click/kamil/callgraphexporter/MethodSignature.java b/src/main/java/click/kamil/callgraphexporter/domain/MethodSignature.java similarity index 57% rename from src/main/java/click/kamil/callgraphexporter/MethodSignature.java rename to src/main/java/click/kamil/callgraphexporter/domain/MethodSignature.java index f0e7630..dd7f275 100644 --- a/src/main/java/click/kamil/callgraphexporter/MethodSignature.java +++ b/src/main/java/click/kamil/callgraphexporter/domain/MethodSignature.java @@ -1,10 +1,8 @@ -package click.kamil.callgraphexporter; +package click.kamil.callgraphexporter.domain; import java.util.List; public record MethodSignature( - String packageName, - String className, String methodName, List parameterTypes ) { diff --git a/src/main/java/click/kamil/callgraphexporter/Modifiers.java b/src/main/java/click/kamil/callgraphexporter/domain/Modifiers.java similarity index 82% rename from src/main/java/click/kamil/callgraphexporter/Modifiers.java rename to src/main/java/click/kamil/callgraphexporter/domain/Modifiers.java index 36e9a1a..9090284 100644 --- a/src/main/java/click/kamil/callgraphexporter/Modifiers.java +++ b/src/main/java/click/kamil/callgraphexporter/domain/Modifiers.java @@ -1,4 +1,4 @@ -package click.kamil.callgraphexporter; +package click.kamil.callgraphexporter.domain; public enum Modifiers { PUBLIC, @@ -16,4 +16,3 @@ public enum Modifiers { SEALED, NON_SEALED, } - diff --git a/src/main/java/click/kamil/callgraphexporter/domain/TypeGroup.java b/src/main/java/click/kamil/callgraphexporter/domain/TypeGroup.java new file mode 100644 index 0000000..3b84adb --- /dev/null +++ b/src/main/java/click/kamil/callgraphexporter/domain/TypeGroup.java @@ -0,0 +1,26 @@ +package click.kamil.callgraphexporter.domain; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class TypeGroup { + private String packageName; + private String typeName; + private TypeKind typeKind; + private EnumSet modifiers = EnumSet.noneOf(Modifiers.class); + private List methods = new ArrayList<>(); + + public void addMethod(Method method) { + methods.add(method); + } +} diff --git a/src/main/java/click/kamil/callgraphexporter/domain/TypeKind.java b/src/main/java/click/kamil/callgraphexporter/domain/TypeKind.java new file mode 100644 index 0000000..966166d --- /dev/null +++ b/src/main/java/click/kamil/callgraphexporter/domain/TypeKind.java @@ -0,0 +1,9 @@ +package click.kamil.callgraphexporter.domain; + +public enum TypeKind { + CLASS, + INTERFACE, + RECORD, + ENUM, + ANNOTATION +} diff --git a/src/main/java/click/kamil/filecombine/JavaConcatenator.java b/src/main/java/click/kamil/filecombine/JavaConcatenator.java index 4dd7d19..da4ab12 100644 --- a/src/main/java/click/kamil/filecombine/JavaConcatenator.java +++ b/src/main/java/click/kamil/filecombine/JavaConcatenator.java @@ -14,7 +14,7 @@ import java.util.*; public class JavaConcatenator { public static void main(String[] args) throws IOException { - Path sourceDir = Path.of("./src/main/java/click/kamil/springstatemachineexporter/ast"); + Path sourceDir = Path.of("./src/main/java/click/kamil/callgraphexporter/domain"); Path outputFile = Path.of("./Combined.java"); String targetPackage = "click.kamil";