2010년 3월 1일 월요일

IType의 getMethod 사용

getMethod 시 parameterTypeSignatures
org.eclipse.jdt.code.IType 인터페이스에 정의된 IMethod getMethod(String name, String[] parameterTypeSignatures) 사용하여 메소드를 가져오기 위해서는 파라미터 타입 정보를 넘겨줘야 한다.
하지만 이 타입정보라는 것이 int, String 과 같은 클래스 정보를 넘겨줘야 하는 것이 아니다.
JDT에서 사용하는 signature 문자열로 넘겨 줘야 하는데 org.eclipse.jdt.core.Signature api doc 을 참조하면 자세한 내용을 볼 수 있다.
타입정보를 아래와 같이 설정해 주어야 한다.
엄밀히 말하면 TypeSignature는 클래스의 bytecode에 저장되는 메소드의 파리미터 타입 지정 방식이다.



TypeSignature ::=
"B" // byte
| "C" // char
| "D" // double
| "F" // float
| "I" // int
| "J" // long
| "S" // short
| "V" // void
| "Z" // boolean
| "T" + Identifier + ";" // type variable
| "[" + TypeSignature // array X[]
| "!" + TypeSignature // capture-of ?
| ResolvedClassTypeSignature
| UnresolvedClassTypeSignature



파라미터의 클래스 정보를 위와 같이 변경하기에 다소 불편함이 있어서 JDT에서는 이와 관련된 유틸리티 클래스를 제공한다.

org.eclipse.jdt.internal.core.util.Util 클래스다.

다음은 사용 예다.
파라미터 클래스를 Signature로 변경하는 부분을 참조하기 바란다.


...

MethodDeclaration method = (MethodDeclaration) element;
String name = method.getName().getFullyQualifiedName();

List parameters = method.parameters();
String[] parameterTypeSignatures = new String[parameters.size()];

for(int i = 0; i < parameterTypeSignatures.length; i++) {
SingleVariableDeclaration var = (SingleVariableDeclaration) parameters.get(i);
parameterTypeSignatures[i] = Util.getSignature(var.getType());
}

IMethod javaMethod = type.getMethod(name, parameterTypeSignatures);

...

댓글 없음:

댓글 쓰기