编程语言
首页 > 编程语言> > Java Program Transformation

Java Program Transformation

作者:互联网

常见缩写

Spoon:

Structural elements

编程语言具有不同的meta model。
一个抽象语法树(AST)或者模型,是meta model的一个实例。每一个meta model——以及相应的AST——都或多或少的取决于需要完成的工作。例如,javac的meta model是为了编译字节码而设计和优化的,而Eclipse IDE的java meta model是为了集成不同的软件开发需求(代码补全,快速修复编译错误,debug等)而设计的。
不同于基于编译器的AST(比如javac),Spoon的meta model是为了让普通java开发者容易理解而设计的,为了帮助他们编写自己的代码分析和转换工具。Spoon包含生成可编译和可执行的java程序的所有信息。
spoon meta model可以分为三部分:

Code elements

Code elements包括CtStatement和CtExpression两种。
CtStatement是无类型的top-level指令,可以直接在代码块中使用。
CtExpression被用在Statement中。 examples: https://spoon.gforge.inria.fr/code_elements.html

References

meta model的reference part表达了这样一个事实:程序引用的elements不是必须要在meta model中有所对应(它们可能属于第三方库)。比如说,一个返回String的表达式节点被限制为对String的类型引用而不是对编译期的String.java的模型的类型引用,因为String的源代码(基本上)不是需要被分析的应用代码。
换句话说,meta model的elements使用references,以弱引用的方式引用elements。弱引用使得创建和修改program model更加灵活,不需要必须获得所有引用到的elements的强引用。 References在模型创建时被解析,解析的引用指向通过spoon input path指向的源代码中的类。 因为是弱引用,所以引用的目标即使不存在也可以被引用。 这种低耦合的代价是,当一个人需要从一个element跳转到另一个element时,他需要先跳转到引用,然后再跳转到目标。比如,从一个field获取它的类型,需要使用field.getType().getDeclaration()

Creating AST elements

Create elements with factories

当你通过processors和templates设计和实现transformations时,你需要创建新的element,赋值并把他们添加到Spoon构建的AST中。
使用Factory创建element。Factory是Spoon所有factories的入口。

Generating Spoon code for an element

SpoonifierVisitor v = new SpoonifierVisitor(true); 
Launcher.parseClass("class A { public String sayHello() { return \"Hello World!\";}}") 
	.getMethodsByName("sayHello") 
	.get(0) 
	.accept(v); 
System.out.println(v.getResult());

Comments and position

Source Positions

SourcePosition定义了CtElement在源代码文件中的位置。

标签:elements,Java,element,meta,引用,Program,java,model,Transformation
来源: https://www.cnblogs.com/N3ptuner/p/15841057.html