java - 访问 xtext 中的类定义

标签 java xtext xtend

我正在尝试编写一种 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/

相关文章:

java - 如何运行 Xtext .mydsl 文件?

exception - Xtend 中Optional.orElseThrow 的正确语法是什么?

java - 调用notify()后什么时候锁才真正释放

java - 如何通过引用键相关的其他表字段查找(使用JPA)?

java - 在通知流上播放声音

scope - 范围对象的Xtext示例

java - Xtext:如何从 JvmTypeReference 获取集合类型参数(泛型)?

java - 字符串格式选项

java - Xtext & Xtend - 向 RequestMapping 添加更多参数

java - MULTIPART_FORM_DATA : No injection source found for a parameter of type public javax. ws.rs.core.Response