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);
...
댓글 없음:
댓글 쓰기