org.eclipse.jdt.core.dom.ITypeBinding
インスタンスをorg.eclipse.jdt.core.dom.Type
インスタンスに変換する一般的な方法を探しています。これを行うにはAPI呼び出しが必要なはずですが、見つけられません。Eclipse JDT ITypeBindingをタイプに変換する
特定のタイプに応じて手動でこれを行うさまざまな方法があるようです。
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