obj = m_adapter.getObject(type, pmap);
obj = adapter.getObject(type, pmap);
    Map load(Session ssn) {        Collection paths = m_signature.getPaths();	LinkedList remaining = new LinkedList();	for (Iterator it = paths.iterator(); it.hasNext(); ) {	    Path path = (Path) it.next();	    for (Path p = path; p != null; p = p.getParent()) {		if (!remaining.contains(p)) {		    remaining.add(p);		}	    }	}	if (!remaining.contains(null)) {	    remaining.add(null);	}	HashMap values = new HashMap();	int before;	do {	    before = remaining.size();	    OUTER: for (Iterator it = remaining.iterator(); it.hasNext(); ) {		Path p = (Path) it.next();		ObjectType type = m_signature.getType(p);		Collection props = type.getImmediateProperties();		if (props.size() == 0) {		    values.put(p, get(p));		    it.remove();		} else {		    PropertyMap pmap = new PropertyMap(type);		    for (Iterator iter = props.iterator(); iter.hasNext(); ) {			Property prop = (Property) iter.next();			Path kp = Path.add(p, prop.getName());			if (values.containsKey(kp)) {			    pmap.put(prop, values.get(kp));			} else if (m_signature.isFetched(kp)) {			    continue OUTER;			}		    }		    Object obj = null;		    if (!pmap.isNull()) {                        Object previous = null;			if (type.isKeyed()) {                            previous = ssn.getObject                                (m_adapter.getSessionKey(type, pmap));                            if (previous != null) {                                ObjectType prevType =                                    m_adapter.getObjectType(previous);                                if (type.equals(prevType)                                    || prevType.isSubtypeOf(type)) {                                    obj = previous;                                } else if (!type.isSubtypeOf(prevType)) {                                    throw new IllegalStateException                                        ("object of wrong type in session "                                         + type + " " + prevType);                                }                            }			}			if (obj == null) {			    obj = m_adapter.getObject(type, pmap);                            if (previous != obj) {                                ssn.use(obj);                            }			}		    }		    values.put(p, obj);		    it.remove();		}	    }	} while (remaining.size() < before);	if (remaining.size() > 0) {	    throw new IllegalStateException		("unable to load the following paths: " + remaining +		 "\nsignature: " + m_signature);	}	for (Iterator it = values.entrySet().iterator(); it.hasNext(); ) {	    Map.Entry me = (Map.Entry) it.next();	    Path p = (Path) me.getKey();	    if (m_signature.isSource(p)) { continue; }	    Property prop = m_signature.getProperty(p);	    if (prop.getContainer().isKeyed()) {		Object container = values.get(p.getParent());		Object value = me.getValue();		if (container == null) {		    if (value == null) {			continue;		    } else {			throw new IllegalStateException			    ("container is null but value isn't");		    }		}		ssn.load(container, prop, value);	    }	}	return values;    }