Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 将正文添加到IMethod_Eclipse_Plugins_Abstract Syntax Tree - Fatal编程技术网

Eclipse 将正文添加到IMethod

Eclipse 将正文添加到IMethod,eclipse,plugins,abstract-syntax-tree,Eclipse,Plugins,Abstract Syntax Tree,我正在编写一个Eclipse插件来生成一些简单的代码。我能够获取一个表示我需要修改的方法的IMethod,但是我不确定如何在它的主体中编写额外的代码。我知道这可以通过AST节点实现,那么有没有一种方法可以在IMethod和MethodDeclaration之间进行转换呢?IMethod是JDT的Java模型的一个类,而MethodDeclaration是JDT AST的一个节点类。Java模型与AST没有连接。但是您可以使用该模型创建AST,通常使用ICompilationUnit(表示Java

我正在编写一个Eclipse插件来生成一些简单的代码。我能够获取一个表示我需要修改的方法的IMethod,但是我不确定如何在它的主体中编写额外的代码。我知道这可以通过AST节点实现,那么有没有一种方法可以在IMethod和MethodDeclaration之间进行转换呢?

IMethod是JDT的Java模型的一个类,而MethodDeclaration是JDT AST的一个节点类。Java模型与AST没有连接。但是您可以使用该模型创建AST,通常使用ICompilationUnit(表示Java源文件),尽管也可以从字符串创建AST

我建议退房


编辑:

“没有直接联系”可能是更好的措辞。本报告的内容如下:

如何从iBind、IJavaElement、ASTNode中的一个转到另一个?

[……]

从IJavaElement到iBind

如果只需要绑定键而不需要绑定对象本身,请在IJavaElement的子类型中查找“getKey()”方法。此方法返回绑定键,该键在许多情况下都很有用,例如,请参阅下一点。请注意,并非IJavaElement的所有子类型都有相应的绑定,例如,IType和IMethod有一个绑定,但IPackageFragment和IImportContainer没有

如果确实需要绑定对象,可以使用“org.eclipse.jdt.core.dom.ASTParser.createBindings(IJavaElement[],IProgressMonitor)”。请注意,与仅获取绑定密钥相比,此操作的成本稍高,因为必须创建绑定

从IJavaElement到其节点

org.eclipse.jdt.core.dom.CompilationUnit.findDeclaringNode(String)——String参数是绑定键,请参见上一点


好文章,谢谢。在java模型中搜索方法非常容易,所以我抓起了一个IMethod。然后,我将ICompilationUnit解析为AST,从中获取mehod声明,并将它们的java元素(MethodDeclaration.resolvebinding().getJavaElement())与原始的IMethod进行比较。当它们匹配时,我知道MethodDeclaration(AST)对应于原始的IMethod(JavaModel)。我肯定这不是正确的方法,但它奏效了。不客气。我添加了JDT常见问题解答的一个摘录,其中提到了CompilationUnit.findDeclaringNode()方法。这可能会简化您的代码。