key = new CompoundKey(key, key(Path.add(path, p.getName())));
Object subKey = key(Path.add(path, p.getName())); if (subKey == null) { return null; } key = new CompoundKey(key, subKey);
    private Object key(Path path) {        ObjectMap map = getObjectMap(path);        ObjectType type = map.getObjectType();        Collection props = type.getImmediateProperties();        if (map.isPrimitive()) {            return get(path);        } else if (!map.isNested()) {            Object key = type.getBasetype();            for (Iterator it = props.iterator(); it.hasNext(); ) {                Property p = (Property) it.next();                key = new CompoundKey(key, key(Path.add(path, p.getName())));            }            return key;        } else if (m_signature.isSource(path)) {            PropertyMap pmap = new PropertyMap(type);            for (Iterator it = props.iterator(); it.hasNext(); ) {                Property p = (Property) it.next();                pmap.put(p, key(Path.add(path, p.getName())));            }            return pmap;        } else {            return new CompoundKey(key(path.getParent()), path.getName());        }    }