2013-01-30 2 views
0

코드 조각을 선택했으며 선택한 코드의 메서드 식별 방법을 사용하여 AST를 구문 분석하려고합니다. 당신이 볼 수 있듯이AST로 선택된 코드 구문 분석

public void run(IAction action) { 
    SelectedText selectedText;  
    IEditorPart editor = getActiveEditor(); 

    if (editor instanceof AbstractTextEditor) { 
     selectedText = getSelectedText(editor); 
     creteAST(selectedText); 
    }   
} 

private void creteAST(SelectedText selectedText) { 
    CompilationUnit parse = parse(selectedText); 
    MethodVisitor visitor = new MethodVisitor(); 
    parse.accept(visitor); 

    System.out.println("Printing methods from the selected code"); 
    for (MethodDeclaration method : visitor.getMethods()) { 
     System.out.println("Method name: " + method.getName()+ ". Return type: " + method.getReturnType2()); 
     System.out.println(method); 
    } 
} 

private static CompilationUnit parse(SelectedText selectedText) { 
    String s_text = selectedText.getSelectedText(); 
    char[] c_text = s_text.toCharArray(); 
    ASTParser parser = ASTParser.newParser(AST.JLS3); 
    parser.setKind(ASTParser.K_COMPILATION_UNIT); 
    parser.setSource(c_text); 
    parser.setResolveBindings(true); 
    return (CompilationUnit) parser.createAST(null); 
    } 

, 나는 구문 분석하기 전에 char[]SelectedText에서 유형을 변경해야합니다.

파서가 어떤 방법도 찾지 못해서 뭔가 잘못하고 있습니다.

내가 뭘 잘못하고 있니? ASTParser.setResolveBindings에 대한

답변

0

의 javadoc()는 말한다 :

바인딩 정보는 자바 모델에서 얻을 수있다. 즉, 컴파일 단위는 Java 모델과 관련되어 있어야합니다. 이 은 소스 코드가 setSource (ICompilationUnit) 또는 setSource (IClassFile)에서 오는 경우 자동으로 발생합니다. setSource (char [])로 소스가 인 경우 setProject (IJavaProject) 및 setUnitName (String)을 호출하여 위치를 명시 적으로 확장해야합니다. 의사 주석 검사에 영향을주는 컴파일러 옵션은 문서 주석 내에서 노드에 대한 바인딩이 해석되는지 여부에 영향을 줄 수 있습니다.

IJavaProject javaProject = ...obtain it somehow, possibly through getAdapter() on editor? 
String name = ...from editor?... 

ASTParser parser = ASTParser.newParser(AST.JLS3); 
parser.setKind(ASTParser.K_COMPILATION_UNIT); 
parser.setSource(c_text); 
parser.setResolveBindings(true); 
parser.setProject(javaProject); 
parser.setUnitName(name); 
return (CompilationUnit) parser.createAST(null); 
+0

감사합니다. 유용한 정보 !!! 하지만 javaProject와 name을 얻는 방법을 알고 있습니까 ??? 나는 어떤 정보를 찾으려고하지만, 어떤 방법으로도 찾지 않으려 고한다 .- ( – Jose

+0

아마도'JavaModelManager.getJavaModelManager(). getJavaModel(). getJavaProject()'는 활성 프로젝트를 반환해야한다. grepcode에서 ASTParser 사용에 대한 예제를 찾아라 : http : // grepcode .com/search/usages? id = repo1.maven.org $ maven2 @ org.eclipse.tycho $ org.eclipse.jdt.core @ 3.8.2.v20120814-155456 @ org $ eclipse $ jdt $ core $ dom @ ASTParser & 형식 = 유형 & k = u – mantrid