复制org.eclipse.jdt.core.dom.ParameterizedType的类型参数

时间:2018-03-14 17:39:53

标签: java eclipse eclipse-plugin eclipse-jdt parameterized-types

我正在尝试将类型参数从现有的org.eclipse.jdt.core.dom.ParameterizedType复制到新创建的参数。 问题是你不能只将类型参数从一种类型添加到另一种类型,因为参数已经有了父类。

这是我的代码:

AST ast = ... // some ast 
Type oldType = ... // existing type from ast
String name = ... // The name of the new type
Type newType = ast.newSimpleType(ast.newName(name));
if (oldType.isParameterizedType()) {
    ParameterizedType newParameterizedType = ast.newParameterizedType(newType);
    for (Object type : ((ParameterizedType) oldType).typeArguments()) {
         newParameterizedType.typeArguments().add(type); // throws illegal argument exception at org.eclipse.jdt.core.dom.ASTNode.checkNewChild(ASTNode.java:2087)
    }
    newType = newParameterizedType; // use parameterized type
}

如何在不犯错误的情况下复制旧类型的类型参数?

1 个答案:

答案 0 :(得分:0)

作为Brian suggested,使用delete()解决了这个问题。这最初是在this question中提出的。首先必须从AST中删除现有ParameterizedType的类型参数,然后再将它们添加到新创建的ParameterizedType中。这适用于每个ASTNode

这是我使用delete()的解决方案:

AST ast = ... // some ast 
Type oldType = ... // existing type from ast
String name = ... // The name of the new type
Type newType = ast.newSimpleType(ast.newName(name));
if (oldType.isParameterizedType()) {
    ParameterizedType newParameterizedType = ast.newParameterizedType(newType);
    for (Object type : ((ParameterizedType) oldType).typeArguments()) {
         type.remove(); // <-- THIS LINE SOLVES THE PROBLEM
         newParameterizedType.typeArguments().add(type);
    }
    newType = newParameterizedType; // use parameterized type
}