postRefresh(grandparent, GRANT_PARENT, element);
postRefresh(grandparent, GRANT_PARENT, element, runnables);
	private void processDelta(IJavaElementDelta delta) throws JavaModelException {			int kind= delta.getKind();		int flags= delta.getFlags();		IJavaElement element= delta.getElement();		int elementType= element.getElementType();						if (elementType != IJavaElement.JAVA_MODEL && elementType != IJavaElement.JAVA_PROJECT) {			IJavaProject proj= element.getJavaProject();			if (proj == null || !proj.getProject().isOpen()) // TODO: Not needed if parent already did the 'open' check!				return;			}				if (!fIsFlatLayout && elementType == IJavaElement.PACKAGE_FRAGMENT) {			fPackageFragmentProvider.processDelta(delta);			if (processResourceDeltas(delta.getResourceDeltas(), element))			    return;			handleAffectedChildren(delta, element);			return;		}				if (elementType == IJavaElement.COMPILATION_UNIT) {			ICompilationUnit cu= (ICompilationUnit) element;			if (!JavaModelUtil.isPrimary(cu)) {				return;			}									if (!getProvideMembers() && cu.isWorkingCopy() && kind == IJavaElementDelta.CHANGED) {				return;			}						if ((kind == IJavaElementDelta.CHANGED) && !isStructuralCUChange(flags)) {				return; // test moved ahead			}						if (!isOnClassPath(cu)) { // TODO: isOnClassPath expensive! Should be put after all cheap tests				return;			}					}				if (elementType == IJavaElement.JAVA_PROJECT) {			// handle open and closing of a project			if ((flags & (IJavaElementDelta.F_CLOSED | IJavaElementDelta.F_OPENED)) != 0) {							postRefresh(element, ORIGINAL, element);				return;			}			// if the raw class path has changed we refresh the entire project			if ((flags & IJavaElementDelta.F_CLASSPATH_CHANGED) != 0) {				postRefresh(element, ORIGINAL, element);				return;							}		}			if (kind == IJavaElementDelta.REMOVED) {			Object parent= internalGetParent(element);						if (element instanceof IPackageFragment) {				// refresh package fragment root to allow filtering empty (parent) packages: bug 72923				if (fViewer.testFindItem(parent) != null)					postRefresh(parent, PARENT, element);				return;			}						postRemove(element);			if (parent instanceof IPackageFragment) 				postUpdateIcon((IPackageFragment)parent);			// we are filtering out empty subpackages, so we			// a package becomes empty we remove it from the viewer. 			if (isPackageFragmentEmpty(element.getParent())) {				if (fViewer.testFindItem(parent) != null)					postRefresh(internalGetParent(parent), GRANT_PARENT, element);			}  			return;		}			if (kind == IJavaElementDelta.ADDED) { 			Object parent= internalGetParent(element);			// we are filtering out empty subpackages, so we			// have to handle additions to them specially. 			if (parent instanceof IPackageFragment) {				Object grandparent= internalGetParent(parent);				// 1GE8SI6: ITPJUI:WIN98 - Rename is not shown in Packages View				// avoid posting a refresh to an unvisible parent				if (parent.equals(fInput)) {					postRefresh(parent, PARENT, element);				} else {					// refresh from grandparent if parent isn't visible yet					if (fViewer.testFindItem(parent) == null)						postRefresh(grandparent, GRANT_PARENT, element);					else {						postRefresh(parent, PARENT, element);					}					}				return;							} else {  				postAdd(parent, element);			}		}			if (elementType == IJavaElement.COMPILATION_UNIT) {			if (kind == IJavaElementDelta.CHANGED) {				// isStructuralCUChange already performed above				postRefresh(element, ORIGINAL, element);				updateSelection(delta);			}			return;		}		// no changes possible in class files		if (elementType == IJavaElement.CLASS_FILE)			return;						if (elementType == IJavaElement.PACKAGE_FRAGMENT_ROOT) {			// the contents of an external JAR has changed			if ((flags & IJavaElementDelta.F_ARCHIVE_CONTENT_CHANGED) != 0) {				postRefresh(element, ORIGINAL, element);				return;			}			// the source attachment of a JAR has changed			if ((flags & (IJavaElementDelta.F_SOURCEATTACHED | IJavaElementDelta.F_SOURCEDETACHED)) != 0)				postUpdateIcon(element);						if (isClassPathChange(delta)) {				 // throw the towel and do a full refresh of the affected java project. 				postRefresh(element.getJavaProject(), PROJECT, element);				return;			}		}				if (processResourceDeltas(delta.getResourceDeltas(), element))			return;			handleAffectedChildren(delta, element);	}