public final synchronized List<E> getAllAddOns() {
    Logger.d(mTag, "getAllAddOns has %d add on for %s", mAddOns.size(), getClass().getName());
    if (mAddOns.size() == 0) {
      loadAddOns();
    }
    Logger.d(
        mTag, "getAllAddOns will return %d add on for %s", mAddOns.size(), getClass().getName());
    return unmodifiableList(mAddOns);
  }
@Test
  public void testGetAllAddOns() throws Exception {
    TestableAddOnsFactory factory = new TestableAddOnsFactory(true);
    List<TestAddOn> list = factory.getAllAddOns();
    Assert.assertTrue(list.size() > 0);

    HashSet<String> seenIds = new HashSet<>();
    for (AddOn addOn : list) {
      Assert.assertNotNull(addOn);
      Assert.assertFalse(seenIds.contains(addOn.getId()));
      seenIds.add(addOn.getId());
    }
  }