2014-03-27 4 views
2

다음과 같은 클래스가 있습니다.자바 클래스의 정규화 된 이름을 얻는 방법

public class Login { 
    private Keyword browser; 
    private String page; 
} 

Keyword은 다른 패키지의 클래스입니다. javaparser을 사용하여 Login 클래스를 구문 분석하는 동안 클래스 Keyword의 정규화 된 이름을 가져 오려고합니다.

+0

에게입니다. 예 : (1) 형식 참조가 이미 정규화 된 이름인지 확인하십시오. (2) 가져 오기가 있는지 확인하지 못하면 (3) 패키지 선언에 형식 이름을 추가하십시오. – Balder

+0

또한 JavaParser가 GitHub로 이동됨에 유의하십시오. https://github.com/javaparser/javaparser –

답변

1

아무도 지금까지 질문을 읽고 나타납니다,하지만 당신은 소스 코드를 분석하는 경우, 하나는 현재 패키지에 있거나이 import 문을 가져옵니다.

Java 파서 작성자 나 사용자가이를 알고 있어야합니다. 당신은 방문자를 사용하는 경우

+0

해당 유형이 와일드 카드 가져 오기 명령문에서 나온 경우 정규화 된 이름을 구문 분석하기가 매우 어려울 수 있습니다. – EdMelo

-2

를 사용하여 자바 반사 (java.lang.reflect의)는

0

, 당신은 단지 형식 이름을 가진에 대한 소스 파일 내부의 시작과 끝 인덱스를 얻을 것으로 보인다. 그건 당신에게 완전한 이름을주지 못할 것입니다.

따라서 맞춤 방문자에도 visit(ImportDeclaration, A) 메소드를 구현해야합니다. 이 메소드는 가져 오기 선언을 저장해야하므로 나중에 - visit(FieldDeclaration, A) 메소드가 호출 될 때 - 가져온 패키지를 참조하고 완전한 이름을 조합하십시오.

0

JavaParser는 가져 오기를 처리하지 않습니다 (어쨌든 일반적으로 작업으로 간주되지 않음). 수동으로 import 문을 단계별로 실행하고 Keyword이 속해 있는지 검색해야합니다. Java는 암시 적으로 import java.lang.*을 수행합니다. 그렇지 않으면 String과 같은 유형을 해결하지 않습니다.

스프링 루오는 방법 getJavaType(CompilationUnitServices compilationUnitServices, ClassOrInterfaceDeclaration cid)을 포함하는 JavaParserUtils 클래스를 가지고 있습니다. 이 클래스는 Roo 외부에서 사용하도록 설계되지 않았지만 문제 해결을위한 템플릿으로 사용할 수 있습니다.

3

JavaParser가 기호를 해석하지 않기 때문에 JavaParser를 사용하여이를 수행 할 수 없습니다. 이름 키워드를 몇 가지 작업을 수행해야하는 클래스로 해결하려면 다음을 수행하십시오. * 적절한 범위 규칙을 구현합니다 (내부 클래스를 찾은 다음 동일한 파일 내의 다른 클래스에 대해 가져 오기를 고려해야합니다 ...) * it 컴파일하는 데 사용 된 클래스 경로에 따라 다릅니다. 동일한 클래스를 변경하면 다르게 해결 될 수 있습니다.

이렇게하려면 기호 확인자를 작성해야합니다. 이는 사소한 것이 아니라 실행 가능해야합니다. 주제에 관심이 있다면 방금 How to build a symbol solver for Java, in Clojure이라고 적힌 글을 읽을 수 있습니다. 게시물에는 GitHub에서 무료로 제공되는 코드 링크가 포함되어 있습니다.

자료 : @EJP는 그의 대답에 암시로서 나는 당신이 소스를 분석 이외에 적어도 코드 분석의 최소 금액을해야 할 것입니다 JavaParser 사용자에