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