Validation 如何在Xtext验证程序中访问本地文件系统?
我正在使用Xtext构建DSL,当用户编写这样的语句时,我希望:Validation 如何在Xtext验证程序中访问本地文件系统?,validation,filesystems,xtext,Validation,Filesystems,Xtext,我正在使用Xtext构建DSL,当用户编写这样的语句时,我希望: import "someFile.txt" 能够验证和检查该文件是否已存在。如果导入定义如上所述,那么文件应该与用户正在编写的DSL程序位于同一个项目中。但他也应该能够指定绝对路径 问题是我找不到在验证器中访问文件系统的方法!我看到很多人在谈论ResourcesPlugin,但我无法从Xtext生成的基本项目访问它(我不能只在ui生成的项目中访问它,但基本项目中存在验证器) 我该怎么做呢?您可以像在Java中那样简单地执行: i
import "someFile.txt"
能够验证和检查该文件是否已存在。如果导入定义如上所述,那么文件应该与用户正在编写的DSL程序位于同一个项目中。但他也应该能够指定绝对路径
问题是我找不到在验证器中访问文件系统的方法!我看到很多人在谈论ResourcesPlugin,但我无法从Xtext生成的基本项目访问它(我不能只在ui生成的项目中访问它,但基本项目中存在验证器)
我该怎么做呢?您可以像在Java中那样简单地执行:
import java.io.File
import java.io.BufferedReader
import java.io.FileReader
class FileTest {
def static void main(String[] args) {
try{
var testFile = new File(TheFilePathTheUserTypedAfterImportStatement)
if(!testFile.exists){
println("That file doesn't exist!")
}else {
var reader = new BufferedReader(new FileReader(testFile))
var String line
while((line = reader.readLine) != null) {
println(line)
}
}
}
catch(Exception e) {
println(e.stackTrace)
}
}
}
您可以使用内容/文件不存在的事实来计算验证方法中的某些内容,而不是打印文件不存在的消息或打印行内容
欢迎Krzmbrzl您可以编写一个小界面,如:
interface FileFinder {
def boolean exists(String fileName, emf.Resource context)
}
然后有一个使用java.io.File的实现和一个使用Eclipse资源API的实现。您可以分别在语言的RuntimeModule和UiModule中绑定它们:
public Class<? extends FileFinder> bindFileFinder() {
return JavaIOFileFinder.class;
}
@Inject FileFinder finder
@Check
def checkFiles(Model model) {
for (file: model.files) {
if (!finder.exists(file, model.eResource))
error...
}
}