2017-02-14 18 views
2

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

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

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

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

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

ответ

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); 
    } 
}