2017-02-13 2 views
0

IJava-Quellcode-Analyse, Methodensignaturen mit vollständigen Typen findet

javaparser bin mit (https://github.com/javaparser/javaparser) und javasymbolsolver (https://github.com/javaparser/javasymbolsolver).

Java-Quellcode zu analysieren. Ich möchte einen Basisbericht aus einer .java-Datei erstellen, um die Methodensignaturen aufzulisten, und wäre nett, wenn sie die vollständigen Java-Typen enthalten würden.

so ist eine grundlegende Zusammenführung der javaparser 'Besuch' Demo und javasymbolsolver Demo, aber ich renne in die Wand.

Sprengung auf 'getType' Aufruf, mit

Exception in thread "main" java.lang.UnsupportedOperationException: com.github.javaparser.ast.type.ClassOrInterfaceType 
    at me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete(JavaParserFacade.java:392) 

Hier ist die (nicht funktionierenden) Code,

static CombinedTypeSolver combinedTypeSolver; 

public static void main(String[] args) throws Exception { 
    combinedTypeSolver = new CombinedTypeSolver(); 
    combinedTypeSolver.add(new JreTypeSolver()); 
    combinedTypeSolver.add(new JarTypeSolver("C:/source.jar")); 
    combinedTypeSolver.add(new JavaParserTypeSolver(new File("C:/src"))); 

    FileInputStream in = new FileInputStream("C:/src/source.java"); 
    CompilationUnit cu = JavaParser.parse(in); 
    new MethodVisitor().visit(cu, null); 
} 

private static class MethodVisitor extends VoidVisitorAdapter<Void> { 
    public void visit(MethodDeclaration n, Void arg) { 

     Node node = n.getType(); 
     System.out.println(node); 
     TypeUsage typeOfTheNode = JavaParserFacade.get(combinedTypeSolver).getType(node); 

     super.visit(n, arg); 
    } 


} 

Antwort

1

würde ich empfehlen eine ReflectionTypeSolver zu Ihrem CombinedTypeSolver hinzuzufügen. Dann eine Liste aller MethodDeclaration zu bekommen, würde ich

List<MethodDeclaration> l = Navigator.findAllNodesOfGivenClass(cu, MethodDeclaration.class); 

verwende Dann würde ich jede MethodDeclaration wickeln (JavaParser) in einem JavaParserMethodDeclaration wie die

for(MethodDeclaration md : l){ 
    System.out.println(new JavaParserMethodDeclaration(mdec, facade.getTypeSolver()).getQualifiedSignature()); 
} 
Verwandte Themen