`
plutluo
  • 浏览: 7557 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDT 随记---介绍

阅读更多

因公司项目的需要,最近开始研究Eclipse JDT ,边研究边记录如下:

JDT(java development tooling)是Eclipse提供的一组API。其功能引用其官方文档上的说法:

  1. Programmatically manipulate Java resources, such as creating projects, generating Java source code, performing builds, or detecting problems in code.
  2. Programmatically launch a Java program from the platform.
  3. Provide a new type of VM launcher to support a new family of Java runtimes.
  4. Add new functions and extensions to the Java IDE itself.

总之,提供了一系列强大的API供我们操作Java代码。

JDT实际上是将Java代码构建成一个基于DOM结构的抽象语法树AST(Abstract Syntax Tree )。代码中的每个部分都对应一个ASTNode,许多的ASTNode就构成了这个抽象的语法树。Java Class一般对应Compilation Unit node,该节点也是AST树上的顶点。创建一个AST如下:

java 代码
  1. ASTParser parser = ASTParser.newParser(AST.JLS3);   
  2. parser.setSource("".toCharArray());   
  3. CompilationUnit unit = (CompilationUnit) parser.createAST(null);    
  4. unit.recordModifications();   
  5. AST ast = unit.getAST();   

其中createAST,当parse需要较长时间时,可以采用createAST(new NullProgressMonitor()),否则直接传null即可。

recordModifications()用于记录节点的变动,比如修改、删除等,当需要对AST树进行变动操作时,必须要预先调用这个方法。


比较重要的是:一个AST树上的所有节点必须都属于该AST。不允许直接将其他AST树上的节点添加该AST树上。否则会抛出java.lang.IllegalArgumentException异常。须使用ASTNode.copySubtree(AST target, ASTNode node)返回一个目标树的深度拷贝,才能进行添加操作。例如:

java 代码
  1. ASTParser parser = ASTParser.newParser(AST.JLS3);   
  2. parser.setSource("".toCharArray());   
  3. CompilationUnit targetRoot= (CompilationUnit) parser.createAST(null);    
  4. targetRoot.recordModifications();   
  5. parser.setSource("class T{}”".toCharArray());   
  6. CompilationUnit srcRoot= (CompilationUnit) parser.createAST(null);    
  7.   
  8. //这是非法操作,两者的AST源不一样   
  9. targetRoot.types().add(srcRoot.types().get(0));   
  10.   
  11. //这是合法操作   
  12. targetRoot.types().add(ASTNode.copySubtree(   
  13. targetRoot.getAST(), (ASTNode) srcRoot.types().get(0)));   
  14.   
  15. //这是合法操作   
  16. targetRoot.types().add(targetRoot.getAST().newTypeDeclaration());  
分享到:
评论

相关推荐

    jdt-compiler-3.1.1.jar

    java开发常用 jdt-compiler-3.1.1.jar

    jdt-language-server-0.45.0-201910031256.tar.gz

    标题中的"jdt-language-server-0.45.0-201910031256.tar.gz"是一个软件包,基于其命名规则,我们可以推断它是一个使用tar.gz格式压缩的文件,这种格式在Linux和Unix环境中常见。"jdt-language-server"部分表明这是...

    jasper-compiler-jdt-5.5.15.jar

    《jasper-compiler-jdt-5.5.15.jar:解决IReporter编译问题的利器》 在IT行业中,报告生成是企业级应用的重要组成部分,而 JasperReports 是一款广泛使用的开源报表工具,它允许开发者创建复杂的报表并嵌入到Java...

    homebrew-jdt-language-server:Eclipse JDT语言服务器的Homebrew公式

    **Homebrew-JDT-Language-Server:Eclipse JDT 语言服务器的Homebrew公式** Homebrew 是一个开源的包管理器,主要用于 macOS 系统,它允许用户方便地安装、管理和升级命令行工具。Eclipse JDT(Java Development ...

    eclipse3.0.1 and NLpack-eclipse-JDT-SDK-3.0.x

    Eclipse 3.0.1 和 NLpack-eclipse-JDT-SDK-3.0.x 是两个重要的组件,它们在IT领域特别是Java开发中扮演着关键角色。Eclipse是一款开源的集成开发环境(IDE),而NLpack-eclipse-JDT-SDK则是针对Eclipse的一款插件,...

    eclipse-JDT-3.2.2免费下载 完全版

    eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版...

    eclipse-jdt-3.6.1-6.13.el6.i686.rpm

    eclipse-jdt-3.6.1-6.13.el6.i686.rpm

    jdt-compiler-3.1.1 + itext-2.1.7 + iTextAsian的jar包组合

    因此,"jdt-compiler-3.1.1.jar"、"itext-2.1.7.jar"和"iTextAsian.jar"这三者结合使用,可以为ireport提供完整的PDF生成和中文显示能力。 然而,仅仅引入这些jar包还不够,还需要进行相应的字体配置。这是因为Java...

    jdt.rar_jdt-compiler.jar

    标题中的"jdt.rar_jdt-compiler.jar"指的是Java Development Toolkit (JDT) 的一部分,具体是JDT的编译器组件,即`jdt-compiler.jar`。JDT是Eclipse IDE的一个核心插件,它提供了强大的Java编程支持,包括代码编辑、...

    Eclipse jdt 2.0 plugin developer guide

    Eclipse JDT(Java Development Tools)2.0 插件开发者指南是一份由OTI(Open Tooling Initiative)编写的文档,主要介绍了如何开发基于Eclipse平台的Java开发工具插件。该文档提供了详细的指导和示例,帮助开发者...

    eclipse-JDT-3.3.1.zip

    在标题中提到的“eclipse-JDT-3.3.1.zip”是一个Eclipse JDT的特定版本,即3.3.1版本的归档文件。这个版本发布于2007年,作为Eclipse 3.3(Europa)的一部分,它包含了用于开发Java应用程序的各种工具和API。 ...

    wtp-common-fproj-enablement-jdt-I-3.2.0-20100107113913.zip

    The JDT Enablement component extends the Faceted Project Framework to integrate with Java Development Tools. The component includes the Java facet, modeling of the JVM-based runtimes and tools for ...

    jdt需要的jar包

    总的来说,"jdt-needed"这个压缩包是Eclipse ASTView的运行必需组件,它涵盖了从Java源代码解析到图形化展示AST的全过程所涉及的关键技术,对于Java开发人员和语言处理工具的开发者来说,这些都是深入理解Java语言...

    PyPI 官网下载 | jdt-0.0.2.linux-x86_64.tar.gz

    标题中的"PyPI 官网下载 | jdt-0.0.2.linux-x86_64.tar.gz"指的是Python Package Index(PyPI)上发布的名为“jdt”的软件包的一个版本,版本号为0.0.2,是专为Linux x86_64架构编译的。PyPI是Python开发者发布自己...

    gate-compiler-jdt-3.7.1-sources.jar

    实测可用

    gate-compiler-jdt-1-sources.jar

    实测可用

    JDT jdt get set 注释 eclipse 自动

    JDT jdt get set 注释 eclipse 自动注释; 适用eclipse 4.4.0 适用org.eclipse.jdt.ui_3.10.0.v20140604-1403.jar 其他版本未测试,如其他版本可用请留言谢谢

    Java解析语法树(AST)使用JDT相关库

    包括以下包:jdt-3.2.1-r321_v20060823.jar、 jdt-3.3.0-v20070607-1300.jar、jdt-3.4.2_r894.jar、jdt-compiler.jar、org.eclipse.datatools.enablement.jdt.classpath_1.0.1.v201107221501.jar、org.eclipse.jdt....

Global site tag (gtag.js) - Google Analytics