boolean (Object value) { if (!isShouldNarrowDown()) return true; String filter = getSearchPrefix(); if (!StringUtil.equals(myLastFilter, filter)) { myVisibleParents.clear(); myLastFilter = filter; } if (filter != null) { if (myVisibleParents.contains(value)) { return true; } String text = getSpeedSearchText(value); if (text == null) return false; if (matches(filter, text)) { Object o = value; while (o instanceof FilteringTreeStructure.FilteringNode && (o = ((FilteringTreeStructure.FilteringNode)o).getParent()) != null) { myVisibleParents.add(o); } return true; } else { return false; } } return true; }