使用IFileSystemAccess2

时间:2017-01-28 18:25:42

标签: xtext

使用

中的方法

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并且itws原因指示错误是NullPointerException。

我是否需要继承IGenerator?

此外,org.eclipse.xtext.builder.participant未被禁用,因为需要多个模型进行文字对话。

1 个答案:

答案 0 :(得分:1)

确保

  1. 你通过guice创建像generator这样的东西
  2. 设置文件系统访问的进度监视器
  3. 将输出路径设置为正确fsa.setOutputPath("xxx")
相关问题