org.eclipse.jdt.core.dom.ITypeBinding
인스턴스를 org.eclipse.jdt.core.dom.Type
인스턴스로 변환하는 일반적인 방법을 찾고 있습니다. 이 작업을 수행하기 위해 API 호출이 있어야한다고 판단 되더라도 찾을 수 없습니다.Eclipse JDT ITypeBinding을 Type으로 변환하십시오.
특정 유형에 따라이 작업을 수동으로 수행하는 방법은 다양합니다.
ITypeBinding
을 복용하고 Type
을받는 일반적인 방법이 있습니까? String
을 가지고 Type
을 반환하는 것도 허용됩니다.
업데이트 지금까지 응답에서
, 내가 모든 특별한 경우를 처리해야합니까 나타납니다. 이렇게하는 첫 시도입니다. 나는이 그렇게 조사가 감사 완전히 정확하지 않습니다 확신 :
public static Type typeFromBinding(AST ast, ITypeBinding typeBinding) {
if(ast == null)
throw new NullPointerException("ast is null");
if(typeBinding == null)
throw new NullPointerException("typeBinding is null");
if(typeBinding.isPrimitive()) {
return ast.newPrimitiveType(
PrimitiveType.toCode(typeBinding.getName()));
}
if(typeBinding.isCapture()) {
ITypeBinding wildCard = typeBinding.getWildcard();
WildcardType capType = ast.newWildcardType();
ITypeBinding bound = wildCard.getBound();
if(bound != null) {
capType.setBound(typeFromBinding(ast, bound)),
wildCard.isUpperbound());
}
return capType;
}
if(typeBinding.isArray()) {
Type elType = typeFromBinding(ast, typeBinding.getElementType());
return ast.newArrayType(elType, typeBinding.getDimensions());
}
if(typeBinding.isParameterizedType()) {
ParameterizedType type = ast.newParameterizedType(
typeFromBinding(ast, typeBinding.getErasure()));
@SuppressWarnings("unchecked")
List<Type> newTypeArgs = type.typeArguments();
for(ITypeBinding typeArg : typeBinding.getTypeArguments()) {
newTypeArgs.add(typeFromBinding(ast, typeArg));
}
return type;
}
// simple or raw type
String qualName = typeBinding.getQualifiedName();
if("".equals(qualName)) {
throw new IllegalArgumentException("No name for type binding.");
}
return ast.newSimpleType(ast.newName(qualName));
}
작은 버그가 있습니다 : _capType.setBound (typeFromBinding (AST, ** wildCard.getBound() **), wildCard.isUpperbound()); _ typeBinding은 원료 수집, wildCard.getBound 인 경우()는 null를 돌려 주어, 메소드는 유효한 상황의 형태를 생성하지 않습니다. 바운드를 확인하고 코드를 수정하도록 설정하지 않아도됩니다. – taksan