gpt4 book ai didi

java - 修改类型的签名

转载 作者:行者123 更新时间:2023-12-01 11:53:57 25 4
gpt4 key购买 nike

我正在尝试以编程方式更改类型的签名,准确地说,我想让一个类实现一个接口(interface),或者换句话说,将 implements SomeInterface 添加到其签名中。

我得到一个如下类型的对象:

IType ejbType = jproject.findType(ejbClass);

然后我希望IType有一个像setSuperInterfaceNames(String[])这样的方法,但只有一个方法getSuperInterfaceNames()

jdt有可能满足我的要求吗?

最佳答案

您可以使用Eclipse AST来修改代码。大致步骤是:

1) 解析源文件 [CompilationUnit unit = parseAst(ejbType.getCompilationUnit())]

public static CompilationUnit parseAst(ICompilationUnit unit, SubMonitor progress) {
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setSource(unit);
parser.setResolveBindings(true);
return (CompilationUnit)parser.createAST(progress);
}

2) 使用访问者模式在 CompilationUnit 中找到要修改的类型:

unit.accept(new ASTVisitor() {
@Override
public boolean visit(TypeDeclaration node) {
IType type = (IType) node.resolveBinding().getTypeDeclaration().getJavaElement();
if (ejbType.equals(type)) {
modifyTypeDeclaration(node);
}
return false;
}
});

3) 实现modifyTypeDeclaration(TypeDeclaration node)

我通常使用 ASTRewrite 收集对编译单元(*.java 文件)的所有更改,然后将其写回,看起来像这样。

ICompilationUnit cu = ejbType.getCompilationUnit();
cu.becomeWorkingCopy(...);
CompilationUnit unit = parseAst(ejbType.getCompilationUnit())
final ASTRewrite rewrite = ASTRewrite.create(unit.getAST());
collectChangesToUnit(unit, rewrite);
cu.applyTextEdit(rewrite.rewriteAST(), ...);
cu.commitWorkingCopy(false, ...);

如果您的情况非常简单,您也可以直接修改 TypeDeclaration

关于java - 修改类型的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28581719/

25 4 0
文章推荐: Java 字符串乘以 2 个整数
文章推荐: java - 使用 JNLP/Webstart 打开文件
文章推荐: dsl - 有 AWS EC2 的 dsl 吗?
文章推荐: java - JSOUP - 帮助从
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com