### Question:
TreeWithIDSearcher { @Nonnull @ReturnsMutableCopy public static <KEYTYPE, DATATYPE, ITEMTYPE extends ITreeItemWithID <KEYTYPE, DATATYPE, ITEMTYPE>> ICommonsList <ITEMTYPE> findAllItemsWithIDRecursive (@Nonnull final IBasicTree <DATATYPE, ITEMTYPE> aTree, @Nullable final KEYTYPE aSearchID) { return findAllItemsWithIDRecursive (aTree.getRootItem (), aSearchID); } private  TreeWithIDSearcher(); @Nonnull @ReturnsMutableCopy static ICommonsList <ITEMTYPE> findAllItemsWithIDRecursive(@Nonnull final IBasicTree <DATATYPE, ITEMTYPE> aTree,
                                                                                                                                                         @Nullable final KEYTYPE aSearchID); @Nonnull @ReturnsMutableCopy static ICommonsList <ITEMTYPE> findAllItemsWithIDRecursive(@Nonnull final ITEMTYPE aTreeItem,
                                                                                                                                                         @Nullable final KEYTYPE aSearchID);  }### Answer:
@Test public void testSearch () { final DefaultTreeWithID <String, MockHasParent> aTree = TreeWithIDBuilder.buildTree (CollectionHelper.newList (new MockHasParent ("a"), new MockHasParent ("ab"), new MockHasParent ("abc"), new MockHasParent ("abd"))); List <DefaultTreeItemWithID <String, MockHasParent>> aList = TreeWithIDSearcher.findAllItemsWithIDRecursive (aTree, "abc"); assertNotNull (aList); assertEquals (1, aList.size ()); assertEquals ("abc", aList.get (0).getID ()); aList = TreeWithIDSearcher.findAllItemsWithIDRecursive (aTree, "gibtsned"); assertNotNull (aList); assertEquals (0, aList.size ()); }