我目前正在处理的错误要求我在选择相关的快速修复程序时用扩展替换工具。
例如:
public class R{
}
class Q implements R{ //error here
}
快速解决方法是将工具改为扩展(这就是我所关注的)。但要做到这一点,我需要TypeDeclaration.SUPERCLASS_TYPE
作为ChildListPropertyDiscriptor
,而现在它是ChildPropertyDiscriptor
。这使得它无法作为参数提供给getListRewrite
。
我想知道我是否可以将TypeDeclaration.SUPERCLASS_TYPE
作为ChildListPropertyDiscriptor
。或者其他一些方法可以做到这一点。
我的完整代码段如下:
TypeDeclaration typeDecl= (TypeDeclaration) selectedNode.getParent();
{
ASTRewrite rewrite= ASTRewrite.create(root.getAST());
ASTNode placeHolder= rewrite.createMoveTarget(selectedNode);
ListRewrite interfaces= rewrite.getListRewrite(typeDecl, TypeDeclaration.SUPERCLASS_TYPE_PROPERTY); //problem here
interfaces.insertFirst(placeHolder, null);
String label= CorrectionMessages.LocalCorrectionsSubProcessor_implementstoextends_description;
Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
ASTRewriteCorrectionProposal proposal= new ASTRewriteCorrectionProposal(label, context.getCompilationUnit(), rewrite, IProposalRelevance.CHANGE_EXTENDS_TO_IMPLEMENTS, image);
proposals.add(proposal);
}
答案 0 :(得分:0)
Java不支持多继承,因此只支持extends
的一种类型。这解释了为什么TypeDeclaration.SUPERCLASS_TYPE
没有列表,因此没有ChildListPropertyDescriptior
(可能与ListRewrite
一起使用)。
您想要的是ASTRewrite.set()
:
rewrite.set(typeDecl, TypeDeclaration.SUPERCLASS_TYPE_PROPERTY, placeHolder, null);