Esempio n. 1
0
  /**
   * Check if model version is changed and rebuild PHP projects if necessary.
   *
   * @see PHPCoreConstants.STRUCTURE_VERSION
   */
  private void rebuildProjects() {
    IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode(ID);
    String modelVersion = preferences.get(PHPCoreConstants.STRUCTURE_VERSION_PREFERENCE, null);
    if (PHPCoreConstants.STRUCTURE_VERSION.equals(modelVersion)) {
      return;
    }

    preferences.put(
        PHPCoreConstants.STRUCTURE_VERSION_PREFERENCE, PHPCoreConstants.STRUCTURE_VERSION);
    try {
      preferences.flush();
    } catch (BackingStoreException e1) {
      Logger.logException(e1);
    }

    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IProject[] projects = workspace.getRoot().getProjects();
    if (workspace.isAutoBuilding()) {
      try {
        for (IProject project : projects) {
          if (PHPToolkitUtil.isPhpProject(project)) {
            project.build(IncrementalProjectBuilder.CLEAN_BUILD, null);
          }
        }
      } catch (CoreException e) {
        Logger.logException(e);
      }
    }
  }
 public void resourceChanged(final IResourceChangeEvent event) {
   if (workspace != null && workspace.isAutoBuilding()) {
     if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
       try {
         final Set<IProject> toUpdate = Sets.newLinkedHashSet();
         event
             .getDelta()
             .accept(
                 new IResourceDeltaVisitor() {
                   public boolean visit(IResourceDelta delta) throws CoreException {
                     if (delta.getResource() instanceof IWorkspaceRoot) return true;
                     if (delta.getResource() instanceof IProject) {
                       IProject project = (IProject) delta.getResource();
                       if ((delta.getFlags() & IResourceDelta.OPEN) != 0 && project.isOpen()) {
                         toUpdate.add(project);
                       }
                       if ((delta.getKind() & IResourceDelta.CHANGED) != 0 && project.isOpen()) {
                         if ((delta.getFlags() & IResourceDelta.DESCRIPTION) != 0) {
                           if ((delta.findMember(new Path(".project")) != null)
                               && XtextProjectHelper.hasNature(project)) toUpdate.add(project);
                           else if (!XtextProjectHelper.hasNature(project)) {
                             scheduleRemoveProjectJob(project);
                           }
                         }
                       }
                     }
                     return false;
                   }
                 });
         buildScheduler.scheduleBuildIfNecessary(toUpdate);
       } catch (CoreException e) {
         log.error(e.getMessage(), e);
       }
     } else if ((event.getType() == IResourceChangeEvent.PRE_CLOSE
         || event.getType() == IResourceChangeEvent.PRE_DELETE)) {
       if (event.getResource() instanceof IProject
           && (XtextProjectHelper.hasNature((IProject) event.getResource())
               || event.getResource().isAccessible() && event.getResource().isHidden())) {
         scheduleRemoveProjectJob((IProject) event.getResource());
       }
     }
   }
 }