private void addUndefinedCriteria(Criteria theCriteria, boolean theAndFlag) { CoreArgCheck.isNotNull(theCriteria); // should not be calling if null Object newSelection = StructuredSelection.EMPTY; if (theCriteria instanceof CompoundCriteria) { CompoundCriteria criteria = (CompoundCriteria) theCriteria; criteria.addCriteria((Criteria) null); refresh(true); newSelection = contentProvider.getChildAt((criteria.getCriteriaCount() - 1), criteria); } else if (theCriteria instanceof NotCriteria) { // the contained Criteria must be a CompoundCriteria addUndefinedCriteria(((NotCriteria) theCriteria).getCriteria(), theAndFlag); } else if (theCriteria instanceof PredicateCriteria) { CompoundCriteria compoundCriteria = new CompoundCriteria(); compoundCriteria.setOperator((theAndFlag) ? CompoundCriteria.AND : CompoundCriteria.OR); compoundCriteria.addCriteria(theCriteria); compoundCriteria.addCriteria((Criteria) null); // modify parent here LanguageObject parent = (LanguageObject) contentProvider.getParent(theCriteria); int index = contentProvider.getChildIndex(theCriteria); if (parent == null) { setLanguageObject(compoundCriteria); refresh(true); // select undefined criteria newSelection = contentProvider.getChildAt(1, contentProvider.getRoot()); expandToLevel(newSelection, ALL_LEVELS); } else if ((parent instanceof NotCriteria) || (parent instanceof CompoundCriteria)) { CompoundCriteria criteria = null; if (parent instanceof NotCriteria) { // then NotCriteria's contained criteria must be a CompoundCriteria criteria = (CompoundCriteria) ((NotCriteria) theCriteria).getCriteria(); } else { criteria = (CompoundCriteria) parent; } List crits = criteria.getCriteria(); crits.set(index, compoundCriteria); refresh(true); // select undefined criteria newSelection = contentProvider.getChildAt(1, compoundCriteria); } else { CoreArgCheck.isTrue( false, Util.getString( PREFIX + "unexpectedType", // $NON-NLS-1$ new Object[] {"addUndefinedCriteria", parent.getClass()})); // $NON-NLS-1$ } } // select appropriate tree item final Object selection = newSelection; Display.getDefault() .asyncExec( new Runnable() { public void run() { setSelection(new StructuredSelection(selection)); } }); }