@Nullable private <T> T getMappedObject(MappedClass mappedClass, ID subject, Class<T> requiredClass, PropertiesMap properties, boolean polymorphic, UID context, boolean bind) { T instance = null; if (polymorphic) { Collection<ID> mappedTypes = findMappedTypes(subject, context, properties.getDirect()); if (!mappedTypes.isEmpty()) { instance = createInstance(subject, requiredClass, mappedTypes, properties); } else if (properties.getDirect().containsKey(RDF.rest)) { Map<String, NODE> values = new HashMap<String, NODE>(); values.put(RDF.rest.ln(), properties.getDirect().get(RDF.rest).iterator().next().getObject()); if (properties.getDirect().containsKey(RDF.first)) { values.put(RDF.first.ln(), properties.getDirect().get(RDF.first).iterator().next().getObject()); } listCache.put(subject, values); } else { logger.error("got no type for " + subject.getId()); } } else { instance = createInstance(subject, requiredClass, Collections.<ID> emptyList(), properties); } if (instance != null) { put(subject, instance); if (bind) { bind(mappedClass, subject, instance, properties); } } return instance; }