2012-06-11 1 views
2

Eclipse JDT 라이브러리를 사용하여 Java 소스 코드를 구문 분석하여 클래스에 정의 된 모든 메소드를 찾는다. 코드에 메서드 본문에 "// xxxx"와 같은 주석이 포함되어 있으면 파서가 주석 앞에 멈추고 main (String [] args) 메서드는 무시됩니다. 그것을 할 수있는, 내가 코드를 구문 분석하는 데 사용하는 경우Eclipse JDT를 사용하여 Java 파일 구문 분석

public class Parser { 

/** 
* Parse java program in given file path 
* @param filePath 
*/ 
public void parseFile(String filePath) { 
    System.out.println("Starting to parse " + filePath); 
    char[] source = readCharFromFile(filePath); 
    ASTParser parser = ASTParser.newParser(AST.JLS3); 
    parser.setKind(ASTParser.K_COMPILATION_UNIT); 
    parser.setSource(source); 
    parser.setResolveBindings(true); 
    CompilationUnit cu = (CompilationUnit) parser.createAST(null); 

    cu.accept(new ASTVisitor() { 

     @Override 
     public boolean visit(MethodDeclaration node) { 
      return true; 
     } 

     @Override 
     public void endVisit(MethodDeclaration node) { 
      System.out.println("Method " + node.getName().getFullyQualifiedName() + " is visited"); 
     } 

    }); 
} 
} 

:

public class HelloWorld { 

    private String name; 
    private int age; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
       //Set the age 
     this.age = age; 
     System.out.println(); 
    } 

    public static void main(String[] args) { 

     HelloWorld hw = new HelloWorld(); 
     if(true) { 
      hw.setAge(10); 
     } 

    } 
} 

이 내가 위의 샘플 케이스를 분석하기 위해 작성하는 코드는 다음과 같습니다

구문 분석을위한 시료의 경우입니다 결과는 getName(), setName(), getAge()getAge()이며, main()은 무시됩니다.

답변을 기다리십시오. 감사.

답변

1

소스를 읽는 데 사용하는 코드에 문제가있는 것 같습니다.

File javaFile = new File(filePath); 
BufferedReader in = new BufferedReader(new FileReader(javaFile)); 
final StringBuffer buffer = new StringBuffer(); 
String line = null; 
while (null != (line = in.readLine())) { 
    buffer.append(line).append("\n"); 
} 

을하고 파서 소스 설정하려면이 옵션을 사용합니다 :

이 파일을 읽을 아래 코드를 사용해보십시오 다른

parser.setSource(buffer.toString().toCharArray()); 

모든 코드와 잘 될 것입니다.

1

readCharFromFile(filePath) 메서드는 파일에서 \n 또는 줄 끝 문자를 제거하는 것이 문제입니다. 이것은 주석 뒤의 모든 행이 실제로 주석의 일부라는 것을 의미합니다.

+0

정말 \ n 문자를 제거합니까? 왜 이것이 유용한 기능입니까? 사실이라면 꽤 우습다. –