我想用Xtend语言编写Java类(仅仅因为它更简洁),并将它编译回Java类,我可以在Java项目中使用它们.就像coffeescript.我怎样才能做到这一点?
我尝试创建一个Xtend文件,就像我对新类一样,但是我得到了这个错误:
'org.eclipse.xtext.xbase.lib'在类路径中找不到强制库包.
这会禁用智能感知(自动完成).而且,即使我确实能够工作,我怎样才能将它编译成Java类?
我正在XTend中构建一个代码生成器,我已经有了一个输入模型和元模型.也就是说,我使用ATL为我的XTend代码生成器生成输入模型(作为转换序列的一部分,逐渐降低抽象级别,而不是一次性;这就是我不使用xtext创建语法的原因) .
所以要很清楚,我的代码生成器输入模型是XMI格式的文件,而不是在XTEXT项目的语法(即使不使用)!而且我认为这会给我带来麻烦/困惑.
我使用现有模型创建了一个新的XText项目,右键单击.text文件,运行为,生成人工制品,然后我对mwe2文件执行了相同的操作.
下一步是什么,我做得对吗?如何启动代码生成器?所有示例都来自您使用XText创建DSL的POV.我有一个EMF元模型,以及一个基于XMI的实例.如何使用XTend进一步处理?
任何提示或指向教程的指针都是有帮助的.
解:
该解决方案是为斯文在我接受的答案建议,而且我想指出的是您需要使用的genmodel从你的元模型生成Java工件.此链接显示了如何:http://www.vogella.com/articles/EclipseEMF/article.html,请参阅第4节.这可能看起来太符合逻辑,但我认为无论如何都值得注意.
我似乎无法找到一种在Xtend中表达以下内容的好方法,而不需要使用while循环:
for(int i = 0; i < 3; i++){
println("row ");
}
println("your boat");
Run Code Online (Sandbox Code Playgroud)
所以,我猜我的问题有两个部分:
我最终滚动自己,得到如下内容:
class LanguageUtil {
def static Iterable<Integer> range(int stop) {
range(0, stop)
}
def static Iterable<Integer> range(int start, int stop) {
new RangeIterable(start, stop, 1)
}
def static Iterable<Integer> range(int start, int stop, int step) {
new RangeIterable(start, stop, step)
}
}
// implements Iterator and Iterable which is bad form.
class RangeIterable implements Iterator<Integer>, Iterable<Integer> {
val …Run Code Online (Sandbox Code Playgroud) 我必须测试我的语法(用Xtext编写).我已经看到使用单元测试是可能的,但我找不到一个关于它的好教程.
你能帮助我吗?
大家好
我发现了XTend(http://xtend-lang.org),听起来真棒!但是,我看不到这种语言的任何独立命令行编译器.它似乎只能在日食下运行.我做了一些研究,发现有些人说,它有一个命令行编译器,但我找不到下载链接.
编译器是存在的,独立的,还是需要eclipse才能使用它?
问候
我需要在Xtext项目中验证特定文件的存在.该文件具有与验证对象类似的路径,但具有与其他根目录类似的路径,例如:
$ projPath/src目录/ DIR1/DIR2/ValidatedFile.src
$ projPath /资源/ DIR1/DIR2/SchoudBeExistFile.src
在validate函数中,我只使用相对路径(/src/dir1/dir2/ValidatedFile.src)获取资源.但我不知道项目路径,所以我无法检查存在的/resources/dir1/dir2/SchoudBeExistFile.src.
你能帮我找一下验证函数中的绝对项目路径吗?
@Check
def checkExternalFileExistance(MyType my) {
val myTypeFullPath = ??
val projectPath = ??
}
谢谢
更新:
解决方法是通过在xtext项目中添加org.eclipse.core.resources和org.eclipse.core.runtime插件依赖项,plugin.xml并使用此语法风格的解决方案.没有必要的绝对路径.
@Check
def checkExternalFlowDirExistance(MyType my) {
val platformString = my.eResource.URI.toPlatformString(true);
val myFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString));
val proj = myFile.getProject();
val shouldExistsFile = proj.geFile("/resources/dir1/dir2/SchoudBeExistFile.src")
if (!shouldExistsFile.exists) {
// error
}
}
Run Code Online (Sandbox Code Playgroud) 在 Xtend 中,是否可以中断循环或检查以中断循环?
\n\n\xc2\xabFOR e:d.entitys\xc2\xbb\n \xc2\xabFOR a:e.attributes\xc2\xbb\n \xc2\xabIF a.eClass.name.contentEquals(\'Something\')\xc2\xbb\n \xc2\xabe.name\xc2\xbb "This output should be output one for each Entity e"\n \xc2\xabENDIF\xc2\xbb\n \xc2\xabENDFOR\xc2\xbb\n\xc2\xabENDFOR\xc2\xbb\nRun Code Online (Sandbox Code Playgroud)\n\n我的输出是:
\n\nEntity 1 "This output should be output one for each Entity e"\nEntity 1 "This output should be output one for each Entity e"\nEntity 1 "This output should be output one for each Entity e"\nEntity 2 "This output should be output one for each Entity e"\nEntity 4 "This output should be output one for each …Run Code Online (Sandbox Code Playgroud) 我正在学习xtend.在xtend中创建逗号分隔列表的好方法是什么?(像xpand中的SEPARATOR)
我想在生成器中生成逗号分隔的参数列表:
«FOR param: row.params»
"«param.value»",
«ENDFOR»
Run Code Online (Sandbox Code Playgroud)
这有效,但我需要省略最后一个逗号.我也尝试了row.params.join(",")但是引号丢失了.
从X(Xtext,Xtend)开始,所有这些基于Eclipse的技术的特征,差异和相似之处是什么?还有什么需要了解的吗?