/** * 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()); } } } }