无法使用 IFileSystemAccess2 在 xtext 中使用生成输出文件
Cannot generate output file using in xtext using IFileSystemAccess2
使用
中的方法
https://christiandietrich.wordpress.com/2011/10/15/xtext-calling-the-generator-from-a-context-menu/
调用模型到文本转换的函数。用于生成文本文件的 类 与示例中的不同:
class TransformMcrl2{
def doGenerate(Resource input, IFileSystemAccess2 fsa, IGeneratorContext context) {
fsa.generateFile("testfile.txt" , "Content")
}
}
和调用doGenerate
的代码段
// load the Xtext model to an XtextResourceSet
XtextResourceSet resourceSet = aresourceSetProvider.get();
// get the resource and resolve all references
Resource resource = resourceSet.getResource(uri, true);
EcoreUtil.resolveAll(resource);
IResource documentResource = xtextDocument.getAdapter(IResource.class);
IProject project = documentResource.getProject();
final EclipseResourceFileSystemAccess2 fsa = fileAccessProvider.get();
IFolder srcGenFolder = project.getFolder("lps-gen");
if (!srcGenFolder.exists()) {
try {
srcGenFolder.create(true, true, new NullProgressMonitor());
} catch (CoreException e) {
return null;
}
}
fsa.setProject(project);
String tmpFileName = srcGenFolder.getFullPath().toString();
fsa.setOutputPath(tmpFileName);
TransformMcrl2 generator = new TransformMcrl2();
generator.doGenerate(resource, fsa, new GeneratorContext());
doGenerate 方法给出异常 InvocationTargetException
并且它的原因表明错误是 NullPointerException。
我需要继承 IGenerator 吗?
另外 org.eclipse.xtext.builder.participant
没有被禁用,因为需要多个模型进行文本对话。
确保
- 你通过 guice 创建生成器之类的东西
- 设置文件系统访问进度监视器
- 正确设置输出路径
fsa.setOutputPath("xxx")
使用
中的方法https://christiandietrich.wordpress.com/2011/10/15/xtext-calling-the-generator-from-a-context-menu/
调用模型到文本转换的函数。用于生成文本文件的 类 与示例中的不同:
class TransformMcrl2{
def doGenerate(Resource input, IFileSystemAccess2 fsa, IGeneratorContext context) {
fsa.generateFile("testfile.txt" , "Content")
}
}
和调用doGenerate
// load the Xtext model to an XtextResourceSet
XtextResourceSet resourceSet = aresourceSetProvider.get();
// get the resource and resolve all references
Resource resource = resourceSet.getResource(uri, true);
EcoreUtil.resolveAll(resource);
IResource documentResource = xtextDocument.getAdapter(IResource.class);
IProject project = documentResource.getProject();
final EclipseResourceFileSystemAccess2 fsa = fileAccessProvider.get();
IFolder srcGenFolder = project.getFolder("lps-gen");
if (!srcGenFolder.exists()) {
try {
srcGenFolder.create(true, true, new NullProgressMonitor());
} catch (CoreException e) {
return null;
}
}
fsa.setProject(project);
String tmpFileName = srcGenFolder.getFullPath().toString();
fsa.setOutputPath(tmpFileName);
TransformMcrl2 generator = new TransformMcrl2();
generator.doGenerate(resource, fsa, new GeneratorContext());
doGenerate 方法给出异常 InvocationTargetException
并且它的原因表明错误是 NullPointerException。
我需要继承 IGenerator 吗?
另外 org.eclipse.xtext.builder.participant
没有被禁用,因为需要多个模型进行文本对话。
确保
- 你通过 guice 创建生成器之类的东西
- 设置文件系统访问进度监视器
- 正确设置输出路径
fsa.setOutputPath("xxx")