我正在尝试编写一种 DSL 来进行从一个对象到另一个对象的类型安全转换。
src classA
dst classB
map valueA to valueB with ConverterX
map valueC to valueD with ConverterY
结果应该是这样的:
class Converter
{
public void convert(ClassA a, ClassB b)
{
a.setValueA(ConverterX.convert(b.getValueB))
b.setValueC(ConverterY.convert(b.getValueD))
}
}
我只是想为此生成代码,但我无法访问我已经定义的类。原因是能够使用默认转换器。只有当我能够获取参数的类型时,我才能选择默认转换器的实现。
最佳答案
您可以按照 Xtext 文档的建议坚持使用 JvmTypeReference。您可以从 jvmTypeRef.getType() 获取 JvmType,其中相关类型可转换为 JvmDeclaredType。这是我使用 JvmTypeReference 获取所有 bean 属性(类成员)列表的辅助方法:
public List<String> getFieldNamesForClass(JvmTypeReference jvmTypeRef) {
List<String> result = new ArrayList<String>();
if (jvmTypeRef.getType() instanceof JvmDeclaredType) {
JvmDeclaredType declaredType = (JvmDeclaredType)jvmTypeRef.getType();
for (JvmField field : declaredType.getDeclaredFields()) {
result.add(field.getSimpleName());
}
}
return result;
}
输出是字符串列表、归档名称,但可以轻松更改它以返回 JvmField/JvmMember 实例。
在 bitbucket.org/espinosa/deepclonedsl 上检查我的 DeepCloneDSL
关于java - 访问 xtext 中的类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352810/