我正在尝试将类型参数从现有的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
}
如何在不犯错误的情况下复制旧类型的类型参数?
答案 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
}