获取ETL文件执行后所运行的代码行 基础知识: 语言相关:Java 工具使用:Eclipse Epsilon:是一个用于建模工程的建模语言和工具的集合 这次的课题,主要与ETL(Epsilon Transformation)和EOL(Epsilon Object)语言相关,ETL继承了EOL,主要用于模型间的转换. 这个是ETL文件中语言的一个例子,该课题不需要掌握EOL和ETL的具体语法 具体做法: 1. 先根据这个引导 https://www.eclipse.org/epsilon/doc/articles/running-from-source/ 克隆Epsilon的源代码库并将plugins, features和tests三个文件夹的所有package右键完成import project. 2. 主要涉及的文件在源代码中的位置: 包名org.eclipse.epsilon.common.parse AST.java 包名org.eclipse.epsilon.eol.execute.control IExecutionListener.java 包名org.eclipse.epsilon.common.module ModuleElement.java 3. 具体思路 代码的实现流程图(最终目标是获取ETL文件执行后所运行的代码行) 为了获得Executed lines(执行的代码)需要对ETL文件的运行进行记录,ETL 运行之前会被编译为一个AST ( abstract syntax tree), 这个AST的每个节点就是ETL的module elements, 这样就可以通过查看AST的激活状态来判断运行的代码行,对于如何建立ETL和AST节点(module elements)之间的关系方法如下图所示 ETL(IEtlModule) 和 AST (Module Element)之间的关系图 ETL继承了EOL所以也继承了EolModule模块中的ExecutionListener interface接口,可以根据需要实例化这个接口的功能,在这个接口中有三个方法, 该课题主要用到的方法是 finishedExecuting(ModuleElment ast, Objct result, IEolContext context) 这个方法在每一次AST节点被调用的时候都会运行,该方法的第一个属性是ModuleElement ast,它代表着执行的last节点,所以通过标记这个节点我们就可以知道哪些ETL语句得到了运行。 而在ModuleElement中还存在一个方法叫做: getRegine()