以编程方式编译 Xtend 类 不工作

Programmatically compiling Xtend classes is not working

我目前正在尝试编译以编程方式生成的 Xtend classes。这些都是 Eclipse 插件的一部分。这就是我所做的:

现在,我可以在 Eclipse IDE 中看到生成的 classes。问题是,xtend-gen 文件夹中没有为 Xtend classes 生成的 Java classes。

当我现在在 Eclipse IDE 中手动打开其中一个生成的 Xtend classes 时,它会触发编译。现在我可以看到为 Xtend classes.

生成的 Java classes

但我需要以编程方式执行此操作。无需手动打开一个 Xtend class。我怎样才能做到这一点?这里有什么问题?为什么我没有触发 Xtend 编译?

好像我没有正确更新项目描述。未设置 Xtext 生成器。

我现在是这样做的:

private static void updateProjectDescription(IProject project) {
    String builderName = "org.eclipse.xtext.ui.shared.xtextBuilder";
    String xtextNature = "org.eclipse.xtext.ui.shared.xtextNature";
    IProjectDescription description = null;
    try {
        description = project.getDescription();
    } catch (CoreException exception) {
        exception.printStackTrace();
    }
    // add xtext builder:
    ICommand[] commands = description.getBuildSpec();
    ICommand command = description.newCommand();
    command.setBuilderName(builderName);
    if (Arrays.asList(commands).contains(command)) {
        logger.warn(".project already contains " + builderName);
    } else {
        ICommand[] newCommands = new ICommand[commands.length + 1];
        System.arraycopy(commands, 0, newCommands, 0, commands.length);
        newCommands[commands.length] = command;
        description.setBuildSpec(newCommands);
    }
    // Add xtext nature:
    String[] natures = description.getNatureIds();
    if (Arrays.asList(natures).contains(xtextNature)) {
        logger.warn(".project already contains " + xtextNature);
    } else {
        String[] newNatures = new String[natures.length + 1];
        System.arraycopy(natures, 0, newNatures, 0, natures.length);
        newNatures[natures.length] = xtextNature;
        description.setNatureIds(newNatures);
    }
    try {
        project.setDescription(description, new ProgressMonitorAdapter(logger));
    } catch (CoreException exception) {
        logger.fatal(exception);
    }
}