private void processResourceDelta(WorkingSetDelta result, IResourceDelta delta) { IResource resource = delta.getResource(); int type = resource.getType(); int index = result.indexOf(resource); int kind = delta.getKind(); int flags = delta.getFlags(); if (kind == IResourceDelta.CHANGED && type == IResource.PROJECT && index != -1) { if ((flags & IResourceDelta.OPEN) != 0) { result.set(index, resource); } } if (index != -1 && kind == IResourceDelta.REMOVED) { if ((flags & IResourceDelta.MOVED_TO) != 0) { result.set( index, ResourcesPlugin.getWorkspace().getRoot().findMember(delta.getMovedToPath())); } else { result.remove(index); } } // Don't dive into closed or opened projects if (projectGotClosedOrOpened(resource, kind, flags)) { return; } IResourceDelta[] children = delta.getAffectedChildren(); for (int i = 0; i < children.length; i++) { processResourceDelta(result, children[i]); } }
@Override public void resourceChanged(IResourceChangeEvent event) { IResourceDelta delta = event.getDelta(); if (delta == null) { return; } IWorkingSet[] workingSets; synchronized (fWorkingSets) { workingSets = (IWorkingSet[]) fWorkingSets.toArray(new IWorkingSet[fWorkingSets.size()]); } for (int w = 0; w < workingSets.length; w++) { WorkingSetDelta workingSetDelta = new WorkingSetDelta(workingSets[w]); processResourceDelta(workingSetDelta, delta); workingSetDelta.process(); } }
@Override public void elementChanged(ElementChangedEvent event) { IWorkingSet[] workingSets; synchronized (fWorkingSets) { workingSets = fWorkingSets.toArray(new IWorkingSet[fWorkingSets.size()]); } for (int w = 0; w < workingSets.length; w++) { WorkingSetDelta workingSetDelta = new WorkingSetDelta(workingSets[w]); processJavaDelta(workingSetDelta, event.getDelta()); IResourceDelta[] resourceDeltas = event.getDelta().getResourceDeltas(); if (resourceDeltas != null) { for (int r = 0; r < resourceDeltas.length; r++) { processResourceDelta(workingSetDelta, resourceDeltas[r]); } } workingSetDelta.process(); } }
private void processJavaDelta(WorkingSetDelta result, IJavaElementDelta delta) { IJavaElement jElement = delta.getElement(); int index = result.indexOf(jElement); int type = jElement.getElementType(); int kind = delta.getKind(); int flags = delta.getFlags(); if (type == IJavaElement.JAVA_PROJECT && kind == IJavaElementDelta.CHANGED) { if (index != -1 && (flags & IJavaElementDelta.F_CLOSED) != 0) { result.set(index, ((IJavaProject) jElement).getProject()); } else if ((flags & IJavaElementDelta.F_OPENED) != 0) { index = result.indexOf(((IJavaProject) jElement).getProject()); if (index != -1) result.set(index, jElement); } } if (index != -1) { if (kind == IJavaElementDelta.REMOVED) { if ((flags & IJavaElementDelta.F_MOVED_TO) != 0) { result.set(index, delta.getMovedToElement()); } else { result.remove(index); } } } IResourceDelta[] resourceDeltas = delta.getResourceDeltas(); if (resourceDeltas != null) { for (int i = 0; i < resourceDeltas.length; i++) { processResourceDelta(result, resourceDeltas[i]); } } IJavaElementDelta[] children = delta.getAffectedChildren(); for (int i = 0; i < children.length; i++) { processJavaDelta(result, children[i]); } }