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

  Programmatically manipulate Java resources, such as creating projects, generating Java source code, performing builds, or detecting problems in code. Programmatically launch a Java program from the platform. Provide a new type of VM launcher to support a new family of Java runtimes. 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 代码

  ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setSource("".toCharArray()); CompilationUnit unit = (CompilationUnit) parser.createAST(null); unit.recordModifications(); 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 代码ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setSource("".toCharArray()); CompilationUnit targetRoot= (CompilationUnit) parser.createAST(null); targetRoot.recordModifications(); parser.setSource("class T{}”".toCharArray()); CompilationUnit srcRoot= (CompilationUnit) parser.createAST(null); //这是非法操作,两者的AST源不一样 targetRoot.types().add(srcRoot.types().get(0)); //这是合法操作 targetRoot.types().add(ASTNode.copySubtree( targetRoot.getAST(), (ASTNode) srcRoot.types().get(0))); //这是合法操作 targetRoot.types().add(targetRoot.getAST().newTypeDeclaration());

转载于:https://www.cnblogs.com/jjtech/archive/2011/02/11/1951440.html

Eclipse JDT-简介相关推荐

  1. eclipse jdt.core(一)——简介

    jdt是Java Development Tools的缩写,是eclipse支持java开发的核心插件.jdt core是jdt插件中的一个jar,本文用的jar是org.eclipse.jdt.co ...

  2. Tomcat 启动错误 org/eclipse/jdt/debug/core/JDIDebug...

    为什么80%的码农都做不了架构师?>>>    今天Tomcat在eclipse里面突然启动报错 错误消息: An internal error occurred during: & ...

  3. Maven中使用tomcat:run 出现错误 org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException...

    最近跟着视频做项目(网上电商商城),看着视频中老师配置完之后,tomcat:run 就启动了,但是自己的tomcat:run启动的时候出现了如下错误: 项目正常启动,但是无法在浏览器中打开,报的错是  ...

  4. Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介、安装、使用的详细攻略

    Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介.安装.使用的详细攻略 目录 pydev简介 PyDev 安装和配置 1.安装MyEc ...

  5. The Eclipse JDT Core jar is not in the classpath

    http://msq.iteye.com/blog/683074 在操作Drools的测试例子时,Eclipse后台报以下错误: org.drools.RuntimeDroolsException: ...

  6. org.eclipse.jdt.internal.compiler包下的类找不到

    到maven库上下载jar包:org.eclipse.jdt.core-3.13.jar <!-- https://mvnrepository.com/artifact/org.eclipse. ...

  7. maven整合struts: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException

    上一个文章小编解决了在myeclipse中如何正常解决maven的版本与jdk的问题: 今天将解决maven整合ssh运行的问题,希望能够帮助大家:使用tomcat:run 命令运行程序,报错 小编在 ...

  8. 利用Eclipse JDT抽取Java AST

    最近特征抽取的目标转移到了Java程序上,Joern已然不够用了,于是盯上了Eclipse的插件JDT(Java Development Tools),因为以前从来没用过Eclipse也没写过java ...

  9. Eclipse jdt 格式化java代码

    一.概述 JDT(java development tooling)是Eclipse提供的一组API. Eclipse官方文档 Eclipse documentation maven引入:org.ec ...

  10. org.eclipse.jdt版本更新导致包引入问题

    目录 现象 问题分析 依赖分析 包分析 问题总结 解决方式 1.引入国外制作的BOM定义,锁死依赖 2.仓库新增 3.排除错误依赖 现象 在pom引入org.eclipse.jdt.core的情况下 ...

最新文章

  1. SharePoint 2010 新体验5 - Office Web Applications
  2. arrays must all be same length
  3. MyEclipse部署Tomcat服务器时总是跳到Debug模式
  4. 矩阵快速幂(Matrix_Fast_Power)
  5. linux中kafka主题修改分区,kafka_2.11-2.0.0的部署与配置修改
  6. Linux无线网络设置(wpa_supplicant的使用)
  7. 调用外部程序处理文件_Python使用内置方法、模块调用外部命令
  8. RLException: XXX is neither a launch file in package XXX nor is XXX a launch file name问题解决
  9. 2021-09-02最大矩形
  10. SpringBoot整合Redis
  11. 图解谷歌浏览器Chrome的Logo_longware_新浪博客
  12. sql查看mysql表结构_MySQL 查看表结构简单命令
  13. 利用PS的磁性套索工具进行抠图
  14. 计算机图形学(第四版)-第一个画线例子- 读书笔记P30
  15. 影响GPS定位精度的基本概念
  16. Java使用RSA算法实现安全登录
  17. 27. hall霍尔传感器
  18. apk 泊车摄像头_大陆360度环视摄像头技术可提供3D泊车影像
  19. 深入理解JVM(四)JVM的垃圾回收机制
  20. 多线程线程执行先后顺序

热门文章

  1. ES2015中let的暂时性死区(TDZ)
  2. 数据可视化之大数据平台可视化
  3. HDU-3605 Escape
  4. 一次培训机构的面试经历
  5. Git导出差分(diff)包--before/after/patch
  6. OpenCV制作一个类“全能扫描王”的简易扫描软件
  7. OCR文字识别谁最好?4款拍照扫描应用横向对比
  8. Python+scrapy+mysql实现爬取磁力链接
  9. Firefox os
  10. It is possible to bind and connect to localhost:8080 at the same time - application server will prob