Программная компиляция классов Xtend не работает

В настоящее время я пытаюсь скомпилировать программно созданные классы Xtend. Все это является частью плагина Eclipse. Вот что я делаю:

  • Программное добавление зависимостей Xtend в целевой проект (работает).
  • Программное создание некоторых классов Xtend в проекте с IProject.getFolder(), IFolder.getFile() и IFile.create() (JDT API).
  • Обновление всего проекта с помощью IProject.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
  • Компиляция проекта с помощью IProject.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());

Теперь в результате я могу видеть сгенерированные классы в Eclipse IDE. Проблема в том, что в папке xtend-gen нет сгенерированных классов Java для классов Xtend.

Когда я сейчас открою один из сгенерированных классов Xtend вручную в Eclipse IDE, он запустит компиляцию. Теперь я вижу сгенерированные классы Java для классов Xtend.

Но мне нужно сделать это программно. Без открытия одного класса Xtend вручную. Как я могу это сделать? В чем проблема? Почему я не запускаю компиляцию Xtend?


person ConveniencePatterns    schedule 14.02.2017    source источник


Ответы (1)


Похоже, я не правильно обновил описание проекта. Конструктор 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);
    }
}
person ConveniencePatterns    schedule 06.08.2017