if (!fieldsOnSameLine && overlaps(rng, start, end)) {
if (!multiFieldDeclaration && overlaps(rng, start, end)) {
				protected void update(Widget w, IJavaElementDelta delta) {										Item item;										IJavaElement parent= delta.getElement();					IJavaElementDelta[] affected= delta.getAffectedChildren();					Item[] children= getChildren(w);					boolean doUpdateParent= false;					boolean doUpdateParentsPlus= false;															Vector deletions= new Vector();					Vector additions= new Vector();									for (int i= 0; i < affected.length; i++) {					    IJavaElementDelta affectedDelta= affected[i];						IJavaElement affectedElement= affectedDelta.getElement();						int status= affected[i].getKind();						// find tree item with affected element						int j;						for (j= 0; j < children.length; j++)						    if (affectedElement.equals(children[j].getData()))						    	break;												if (j == children.length) {							// remove from collapsed parent							if ((status & IJavaElementDelta.REMOVED) != 0) {								doUpdateParentsPlus= true;								continue;							}														// addition							if ((status & IJavaElementDelta.CHANGED) != 0 &&															(affectedDelta.getFlags() & IJavaElementDelta.F_MODIFIERS) != 0 &&								!filtered(parent, affectedElement))							{								additions.addElement(affectedDelta);							}							continue;						}						item= children[j];						// removed						    						if ((status & IJavaElementDelta.REMOVED) != 0) {							deletions.addElement(item);							doUpdateParent= doUpdateParent || mustUpdateParent(affectedDelta, affectedElement);						// changed						    						} else if ((status & IJavaElementDelta.CHANGED) != 0) {							int change= affectedDelta.getFlags();							doUpdateParent= doUpdateParent || mustUpdateParent(affectedDelta, affectedElement);														if ((change & IJavaElementDelta.F_MODIFIERS) != 0) {								if (filtered(parent, affectedElement))									deletions.addElement(item);								else									updateItem(item, affectedElement);							}														if ((change & IJavaElementDelta.F_CONTENT) != 0)								updateItem(item, affectedElement);															if ((change & IJavaElementDelta.F_CHILDREN) != 0)								update(item, affectedDelta);															    														if ((change & IJavaElementDelta.F_REORDER) != 0)								fReorderedMembers= true;						}					}										// find all elements to add					IJavaElementDelta[] add= delta.getAddedChildren();					if (additions.size() > 0) {						IJavaElementDelta[] tmp= new IJavaElementDelta[add.length + additions.size()];						System.arraycopy(add, 0, tmp, 0, add.length);						for (int i= 0; i < additions.size(); i++)							tmp[i + add.length]= (IJavaElementDelta) additions.elementAt(i);						add= tmp;					}										// add at the right position					go2: for (int i= 0; i < add.length; i++) {												try {														IJavaElement e= add[i].getElement();							if (filtered(parent, e))								continue go2;															doUpdateParent= doUpdateParent || mustUpdateParent(add[i], e);							ISourceRange rng= getSourceRange(e);							int start= rng.getOffset();							int end= start + rng.getLength() - 1;														Item last= null;							item= null;							children= getChildren(w);														for (int j= 0; j < children.length; j++) {								item= children[j];								IJavaElement r= (IJavaElement) item.getData();																if (r == null) {									// parent node collapsed and not be opened before -> do nothing									continue go2;								}																									try {									rng= getSourceRange(r);									boolean fieldsOnSameLine= r.getElementType() == IJavaElement.FIELD && e.getElementType() == IJavaElement.FIELD																	&& rng.getOffset() == start && rng.getLength() == end - start + 1;																		if (!fieldsOnSameLine && overlaps(rng, start, end)) {																				// be tolerant if the delta is not correct, or if 										// the tree has been updated other than by a delta										reuseTreeItem(item, e);										continue go2;																			} else if (rng.getOffset() > start) {																				if (last != null && deletions.contains(last)) {											// reuse item											deletions.removeElement(last);											reuseTreeItem(last, e);										} else {											// nothing to reuse											createTreeItem(w, e, j);										}										continue go2;									}																	} catch (JavaModelException x) {									// stumbled over deleted element								}																last= item;							}													// add at the end of the list							if (last != null && deletions.contains(last)) {								// reuse item								deletions.removeElement(last);								reuseTreeItem(last, e);							} else {								// nothing to reuse								createTreeItem(w, e, -1);							}												} catch (JavaModelException x) {							// the element to be added is not present -> don't add it						}					}															// remove items which haven't been reused					Enumeration e= deletions.elements();					while (e.hasMoreElements()) {						item= (Item) e.nextElement();						disassociate(item);						item.dispose();					}										if (doUpdateParent)						updateItem(w, delta.getElement());					if (!doUpdateParent && doUpdateParentsPlus && w instanceof Item)						updatePlus((Item)w, delta.getElement());				}