2012-03-28 2 views
2

JDT ASTParser를 사용하면 메소드 선언이 익명 내부 클래스에 있는지 확인할 수 있습니까?MethodDeclaration이 내부 클래스에 속하는지 확인하는 방법

프로젝트에서 사용되지 않는 공용 메소드를 찾으려면 Eclipse 플러그인을 작성합니다. MethodDeclaration 노드에서 ASTVisitor를 사용하고 JDT 검색을 사용하고 있습니다. 문제는 각 Java 클래스를 탐색하는 동안 Listener와 같은 익명 내부 클래스의 MethodDeclaration을 방문한다는 것입니다. 나는이 방법들을 피할 필요가있다.

미리 감사드립니다.

+0

익명의 클래스에서 메서드를 사용하면 어떻게 될까요? 당신이 그것을 보지 못한다면, 당신은 그 방법이 죽었다고 생각할 수 있습니다. 내면 수업을 건너 뛰고 싶지 않다고 생각합니다. –

+0

내부 검색 클래스에서 내부 클래스를 이동하지 않습니다. 사실 나는 프로젝트를 반복하고 특정 명명 표준을 따르는 자바 파일을 얻고있다. 그런 다음 ASTParser를 사용하여 논문 파일을 파싱하고 공용 메서드를 나열합니다. 그런 다음 전체 작업 공간을 범위로 사용하여 각 메소드에 대한 참조 검색을 수행합니다. 내 요구 사항은 내부 클래스 내부의 메서드에 대한 참조 검색을 수행 할 필요가 없다는 것입니다. 파일에 사용되는 파일은 ActionListeners, SelectionListeners 등뿐입니다. –

+0

'node.getParent(). getParent(). getNodeType() == ASTNode.CLASS_INSTANCE_CREATION'을 사용하여 메소드가 내부 클래스에 해당하는지 확인할 수있었습니다. 그러나 이것이 모든 경우에 효과가 있을지 확실하지 않습니다. 어떤 대답을 얻으려고 Stil ... –

답변

1

마침내 해결책을 찾았습니다. ASTParser에는 Java 파일의 익명 내부 클래스를 나타내는 AnonymousClassDeclaration ASTNode가 있습니다. 그러한 노드들을 방문 할 때, 우리는이 노드들을 (false를 반환함으로써) 전체적으로 방문 할 필요가 없다고 지정할 수 있습니다.

public boolean visit(AnonymousClassDeclaration classDeclarationStatement) { 

     return false; 

    } 
1

CLASS_INSTANCE_CREATION이 익명 클래스의 노드 유형이면 작동해야합니다. 나는 자바 전문가가 아니다. 나에게는 익명의 클래스를 만드는 몇 가지 방법이 있으므로이 노드 유형이 모두 다 커버하는지 확인해야합니다.

... 익명 수신기 (?) 클래스가 Listener 인터페이스를 상속/구현해야합니까? 그렇다면 inherits/implements 절인 CLASS_INSTANCE_CREATION 근처의 트리 부분으로 올라갈 수 있어야하고 실제로 예상 한 것을 구현/상속하는지 확인해야합니다. 이 작업을 올바르게 수행하려면 전체 이름과 형식 확인이 필요합니다. 인터페이스 이름의 철자가 있기 때문에 "Listener"가 의도 한 것이 아니라는 의미입니다.

+0

이 인터페이스를 직접 구현하지는 않습니다. 이미이 인터페이스를 구현 한 클래스를 인스턴스화하고 그 내부의 메소드를 대체합니다. 그러나 익숙한 클래스가 리스너를 상속 받았는지 여부를 알아야합니다. –