public void forEach(BiConsumer<? super PropertyKey, ? super Object> action) {
    for (Map.Entry<PropertyKey, Object> entry : entrySet()) {
      action.accept(entry.getKey(), entry.getValue());
    }
  }
@Test
  public void forEach() {
    Set<PropertyKey> expected = new HashSet<>(PropertyKey.defaultKeys());
    Set<PropertyKey> actual = Sets.newHashSet();
    mProperties.forEach((key, value) -> actual.add(key));
    assertThat(actual, is(expected));

    PropertyKey newKey = stringBuilder("forEachNew").build();
    mProperties.put(newKey, "value", Source.RUNTIME);
    Set<PropertyKey> actual2 = Sets.newHashSet();
    mProperties.forEach((key, value) -> actual2.add(key));
    expected.add(newKey);
    assertThat(actual2, is(expected));
  }