Как правильно обрабатывать одновременные изменения свойств в jface PropertyChangeListener - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть свойство, которое влияет на синтаксический анализ некоторых файлов Xtext, поэтому при каждом изменении свойств я запускаю сборку Xtext. Работает отлично, за исключением одной вещи:

Когда несколько свойств изменяются одновременно, для каждого свойства запланирована одна перестройка. Поскольку восстановление также занимает несколько секунд, это приводит к неприятному ожиданию.

Как мне правильно с этим справиться? В идеале я просто хочу повторно запустить сборку один раз, когда свойства применяются.

public class XtextRebuildListener implements IPropertyChangeListener {
  private final IProject project;

  public XtextRebuildListener(IProject project) {
    this.project = project;
  }

  @Override
  public void propertyChange(PropertyChangeEvent event) {
    try {
      if (project.isAccessible() && ! event.getOldValue().equals(event.getNewValue())) {
        Job buildJob = Job.create("Rebuild Xtext models",
            (IProgressMonitor monitor) -> project.build(XtextBuilder.FULL_BUILD, XtextBuilder.BUILDER_ID, null, null));
        buildJob.schedule();
      }
    } catch (CoreException e) {
      logError(e);
    }
  }
...