将勺子模型转换成其他东西
Convert Spoon model into something else
我正在尝试将 Java 代码的 Spoon representation
转换成其他代码;假设 JSON
或 XML
表示或其他 Java model
.
我不确定如何以及从哪里开始。
- 我是否必须为 Spoon 的每个 叶子 写一个
processor
元模型(这是很多处理器要写的)?
- 我是否必须编写一个处理器
分析每个 Class 并有一个 top/down 方法(其中将包含很多
instanceof
检查)?
- 我必须
写一个基于树表示的
Scanner
?
最后一个问题:当转换一个元素(比如 CtIf
)时,如何以独特的方式识别其父元素(CtBlock
)?
假设它将输出以下内容:
[
{
type: block,
id: ???,
...,
},
...,
{
type: if,
parent: ???, (the block above)
...,
}
]
我有点迷茫,需要一些帮助:)
谢谢!
最简单的方法是实现自定义漂亮打印机(查看 https://github.com/INRIA/spoon/blob/master/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java)并通过覆盖它来将其传递给启动器。
我正在尝试将 Java 代码的 Spoon representation
转换成其他代码;假设 JSON
或 XML
表示或其他 Java model
.
我不确定如何以及从哪里开始。
- 我是否必须为 Spoon 的每个 叶子 写一个
processor
元模型(这是很多处理器要写的)? - 我是否必须编写一个处理器
分析每个 Class 并有一个 top/down 方法(其中将包含很多
instanceof
检查)? - 我必须
写一个基于树表示的
Scanner
?
最后一个问题:当转换一个元素(比如 CtIf
)时,如何以独特的方式识别其父元素(CtBlock
)?
假设它将输出以下内容:
[
{
type: block,
id: ???,
...,
},
...,
{
type: if,
parent: ???, (the block above)
...,
}
]
我有点迷茫,需要一些帮助:) 谢谢!
最简单的方法是实现自定义漂亮打印机(查看 https://github.com/INRIA/spoon/blob/master/src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java)并通过覆盖它来将其传递给启动器。