2012-09-20 4 views
1

간단한 코드 생성을 위해 Eclipse 플러그인을 작성하고 있습니다. 내가 수정해야하는 메소드를 나타내는 IMethod를 잡을 수는 있지만 실제로 코드를 추가하는 방법은 확실하지 않습니다. 이 AST 노드로 할 수있는 알고, 그래서 거기에 메서드와 MethodDeclaration 또는 그런 식으로 변환하는 방법은 무엇입니까?IMethod에 몸체 추가

답변

0

IMethod는 JDT의 Java 모델 클래스이며 MethodDeclaration은 JDT AST의 노드 클래스입니다. Java 모델은 AST에 연결되어 있지 않습니다. 그러나 모델을 사용하여 AST를 만들 수 있습니다. 일반적으로 ICompilationUnit (Java 소스 파일을 나타냄)이 사용되지만 문자열에서 AST를 만들 수도 있습니다.

내가


this article 체크 아웃 제안 편집 :

은 아마도 "더 직접 연결이"더 나은 표현 없었을 것이다.

어떻게 IBinding, IJavaElement, 다른 ASTNode 중 하나를 이동하려면 다음 JDT FAQ에서 다음인가?

[...]에 IJavaElement에서

IBinding

만의 방법 ') (하는 getKey'는 찾아, 바인딩 개체 자체 바인딩 키가 아니라 필요한 경우 IJavaElement의 서브 타입 이 메소드는 많은 상황에서 유용 할 수있는 바인딩 키를 반환합니다. 다음 지점을 참조하십시오. IJavaElement의 모든 하위 유형에 해당 바인딩이있는 것은 아닙니다. IType과 IMethod에는 하나가 있지만 IPackageFragment와 IImportContainer에는 없습니다.

바인딩 개체가 실제로 필요한 경우 'org.eclipse.jdt.core.dom.ASTParser.createBindings (IJavaElement [], IProgressMonitor)'를 사용할 수 있습니다. 이 작업은 바인딩을 생성해야하기 때문에 바인딩 키를 가져 오는 것과 비교하면 약간 비쌉니다. 그 선언 ASTNode

org.eclipse.jdt.core.dom.CompilationUnit.findDeclaringNode (문자열)에 IJavaElement에서

는 - 문자열 매개 변수는 바인딩 키, 이전 점을 볼 수있다.

+0

좋은 기사, 감사합니다. Java 모델에서 메서드를 검색하는 것은 매우 쉬웠 기 때문에 IM 메서드를 포착했습니다. 그런 다음 ICompilationUnit을 AST로 구문 분석하고 그로부터 mehod 선언을 가져 와서 해당 Java 요소 (MethodDeclaration.resolvebinding(). getJavaElement())를 원본 IMethod와 비교했습니다. 그것들이 매치했을 때, 나는 MethodDeclaration (AST)가 원래의 IMethod (JavaModel)과 일치한다는 것을 알았다. 이것이 올바른 방법이 아니라고 확신하지만 효과가 있습니다. –

+0

당신은 오신 것을 환영합니다. CompilationUnit.findDeclaringNode() 메서드가 언급 된 JDT FAQ에서 발췌 한 내용을 추가했습니다. 아마도 코드를 단순화 할 수 있습니다. – sevenforce