2009-09-03 3 views
1

프로젝트를 위해 ASTVisitor를 수행하는 방법을 배우기 때문에 Eclipse에 대한 포괄적 인 API가 있습니다.Eclipse의 ASTVisitor

나는이 웹 사이트에서 압축 된 예제 프로젝트를 다운로드 한 : http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

하지만 코드가 main() 메소드가없는 것을 깨달았다, 그러나 나는 프로그램을 실행할 수 있어요! 왜 그 사람이 누군지 압니까? [qn 1]

그러나 코드가 제대로 작동하지 않을 것으로 보이고 기본적인 작업을 수행하기위한 지침이 분명하지 않습니다.

그래서 나는이보고했다 : http://www.vogella.de/articles/EclipsePreferences/article.html

누구든지 내가 main 메소드 (ExecutionEvent 이벤트) 실행 호출을 쓸 수있는 방법을 알고? - 샘플 코드 스 니펫을 제공 하시겠습니까? [qn 2] ExecutionEvent를 사용하는 방법을 모르겠다 ...

"스레드가"예외로 계속 메인 "java.lang.IllegalStateException : 작업 영역이 닫혀 있습니다." 심지어 실행 이벤트에 대한 매개 변수를 제거 (확장 부분을 제거해야합니다)하거나 내 메인에있는 코드의 일부를 사용하더라도. 그것은 "IWorkspaceRoot root = ResourcesPlugin.getWorkspace(). getRoot();"에서 "ResourcesPlugin"과 관련이있는 것으로 보입니다. 왜 그 사람이 누군지 압니까? [qn 3]

감사합니다.

답변

3

ASTVisitor를 사용하기 위해 플러그인을 작성해야한다고 분명히 말할 수는 없지만 가장 쉬운 방법입니다. 버튼을 누르는 간단한 플러그인 코드를 찾아 코드 실행을 시작하고 시작할 수 있습니다. 플러그인 개발 환경에는 샘플 플러그인이 있습니다 (이 플러그인이 없으면 적절한 버전의 Eclipse를 다운로드하십시오). 플러그인 프로젝트 만들기

:

는 플러그인 프로젝트를 생성하려면 패키지 탐색기 마우스 오른쪽 클릭에 도착하거나 파일 메뉴를 엽니 다. 상단 항목 "new ..."를 선택하면 하위 메뉴가 열리고 "기타 ..."가 표시됩니다. "새"대화 상자가 열립니다. "plug-in development"폴더를 열고 "plug-in project"를 선택하십시오. 당신이 다음 페이지에 도달 할 때까지

alt text

클릭 몇 번 옆에 입력이 필요한 정보 : 여기

alt text

을 첫 번째 샘플에 "Hello World"는 당신의 2 수준에서 메뉴를 생성 식. 새 프로젝트의 plugin.xml로 이동하여 두 번째 레벨 Eclipse를 실행하고 탭 개요로 이동하십시오.

alt text

클릭은 "일식 응용 프로그램을 실행", 또 다른 일식 및 실행 새로운 플러그인이 시작됩니다 :

는이 같은 페이지가 표시됩니다. 이 2 단계 이클립스에서 샘플 액션 버튼을 클릭하면 달콤한 액션을 볼 수 있습니다.

이제 액션 코드를 원하는대로 바꿀 수 있습니다. 이 경우 방문 작업을 만들고 시작합니다.

는 ASTVisitor를 만들려면 :

당신이 자신의 코드를 추가 할 수 있도록 ASTVisitor를 확장하는 클래스를 만듭니다.

  • preVisit (ASTNode)는 특정 노드

에게 검사 대서양 표준시

  • postVisit (ASTNode)의 전순 주사는 AST
  • 방문 (...)의 postorder 통과를하지 않습니다 당신의 방문자에게이 같은 추가 :

    private void startVisit(IFile file) { 
        ICompilationUnit icu = JavaCore.createCompilationUnitFrom(file); 
    
        ASTParser parser = ASTParser.newParser(AST.JLS3); 
        parser.setResolveBindings(true); 
        parser.setSource(icu); 
    
        CompilationUnit cu = (CompilationUnit) parser.createAST(null); 
        cu.accept(this); 
    } 
    

    이제 당신의 방문자 a를 생성하여 버튼을 누른 동작에 코드를 추가 ND이 함수를 호출 :

    MyVisitor mv = new MyVisitor(); 
    mv.startVisit(...); 
    

    얻을하려면를 IFILE(다음은 플러그인으로해야합니다 또는 당신이보고 한 오류 얻을 것이다):

    ResourcesPlugin.getWorkspace().getRoot().getProject(...).getFile(...); 
    

    줄임표에 해당하는 프로젝트 및 파일 이름 (문자열)을 바꿉니다.

    이제 버튼을 누를 때마다 파일이 방문되고 입력 한 코드가 적절한 시간에 실행됩니다 (사전 또는 사후에 모든 ASTNode를 인쇄하는 것은 매우 통찰력이 있습니다).

  • +0

    그러나 IFile을 어떻게 만듭니 까? 나는 여전히 "IWorkspaceRoot root = ResourcesPlugin.getWorkspace(). getRoot();"가 필요하다. 권리? 하지만 그 일을 나를 "스레드에서 예외"주 "java.lang.IllegalStateException : 작업 영역이 닫힙니다." 이클립스에서 플러그인 프로젝트를 만들어야하나요? Cos 현재 실행하는 메인 사용하고 있습니다. 플러그인 프로젝트는 어떻게 만듭니 까? – yeeen

    1

    프로젝트는 main() 메소드가있는 간단한 Java 프로젝트가 아닌 Eclipse 플러그인 프로젝트 여야합니다.

    다음은 제안입니다. AST View 도구를 살펴보십시오. 그것은 AST를 검사하기위한 도구입니다. 소스에 대한 작업, 실행, 디버그, 중단 점 설정, 코드 수정, 작동 방법 확인.

    또한 모든 JDT 소스가 있는지 확인하십시오. ASTVisitors의 많은 예제가 있습니다 (내부 메소드를 사용하지 않도록하십시오).

    +0

    나는 년이 지났음을 알고 있지만 사용자 정의 Java 유효성 검사기 ("사용자 정의 프레임 워크를 올바르게 사용"한다고 생각하는)에 적합한 노드를 찾는 데 어려움을 겪고있었습니다. 디버거가 올바른 노드를 방문하려고 할 때 시행 착오를 겪으면서 몇 시간을 보냈습니다. 이 플러그인을 사용하여 Eclipse보기에서 동일한 작업을 수행 할 수 있었고 시간의 일부만 쓸 수있었습니다. 이것을 지적 해 주셔서 대단히 감사합니다. –