### Question:
PropertyValue implements Serializable, Iterable<PropertyValue> { public String getQualifiedKey(){ if(parent==null){ return key; } String parentName = parent.getQualifiedKey(); if(parent instanceof ListValue){ return parentName+"["+((ListValue)parent).getIndex(this)+"]"; }else{ if(!parentName.isEmpty()){ parentName+="."; } return parentName+key; } } PropertyValue(String key); protected  PropertyValue(String key, String value); static ObjectValue createObject(); static ListValue createList(); static PropertyValue createValue(String key, String value); static ListValue createList(String key); static ObjectValue createObject(String key); static Map<String, PropertyValue> mapProperties(Map<String, String> config, String source); static Map<String, PropertyValue> mapProperties(Map<String, String> config, String source,
                                                           Map<String,String> metaData); static Map<String, PropertyValue> mapProperties(Map<String, String> config, String source,
                                                           Map<String,String> metaData, String prefix); final boolean isImmutable(); PropertyValue immutable(); PropertyValue mutable(); ValueType getValueType(); final String getKey(); String getValue(); @Deprecated String getSource(); PropertyValue setValue(String value); String getQualifiedKey(); final PropertyValue getParent(); final int getVersion(); final boolean isRoot(); final boolean isLeaf(); final Map<String, String> getMeta(); @Deprecated String getMetaEntry(String key); final T getMeta(String key); int getSize(); @Override Iterator<PropertyValue> iterator(); final PropertyValue setMeta(Map<String, String> metaEntries); final PropertyValue setMeta(String key, Object value); final PropertyValue removeMeta(String key); Map<String,String> toMap(); Map<String,String> toLocalMap(); @Override String toString(); ObjectValue toObjectValue(); ListValue toListValue(); PropertyValue setKey(String key); @Override boolean equals(Object o); @Override int hashCode();  }### Answer:
@Test public void getQualifiedKey() { ObjectValue root = PropertyValue.createObject("a"); assertThat("a").isEqualTo(root.getQualifiedKey()); ObjectValue child = PropertyValue.createObject("b"); ObjectValue n = root.setPropertyValue(child); assertThat("a.b").isEqualTo(child.getQualifiedKey()); child.setValue("c", null); PropertyValue val = child.getPropertyValue("c"); assertThat("a.b.c").isEqualTo(val.getQualifiedKey()); }