复制 org.eclipse.jdt.core.dom.ParameterizedType 的类型参数
Copy type arguments of org.eclipse.jdt.core.dom.ParameterizedType
我正在尝试将类型参数从现有 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
}
如何复制旧类型的类型参数而不犯我当前在循环中犯的错误?
如, using delete()
solved that problem. This was originally proposed in this question。来自现有 ParameterizedType
的类型参数首先必须从 AST 中删除,然后再将它们添加到新创建的 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
}
我正在尝试将类型参数从现有 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
}
如何复制旧类型的类型参数而不犯我当前在循环中犯的错误?
如delete()
solved that problem. This was originally proposed in this question。来自现有 ParameterizedType
的类型参数首先必须从 AST 中删除,然后再将它们添加到新创建的 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
}