static <T extends NamedReferenceable> T resolveUpwards( SchemaModelImpl sModel, String namespace, String localName, Class<T> type, ResolveSession session) { // // The sought namespace is used here! Collection<SchemaModelImpl> models = getMegaIncludedModels(sModel, namespace, session); for (SchemaModelImpl sm : models) { Checked checked = session.getChecked(sm); if (sm != null && !checked.itself) { T found = sm.findByNameAndType(localName, type); if (found != null) { return found; } checked.itself = true; } } // return null; }
static <T extends NamedReferenceable> T resolveRecursiveDown( SchemaModelImpl sModel, String localName, Class<T> type, ResolveSession session) { // T found = null; // // Find locally first Checked checked = session.getChecked(sModel); if (!checked.itself) { found = sModel.findByNameAndType(localName, type); if (found != null) { return found; } checked.itself = true; } // // Find in sub-includes and sub-redefines if (!checked.included) { checked.included = true; // Collection<SchemaModelReference> modelRefs = sModel.getNotImportRefrences(); for (SchemaModelReference ref : modelRefs) { assert !(ref instanceof Import); // SchemaModelImpl resolvedRef = sModel.resolve(ref); if (resolvedRef != null) { // Look inside of imported or redefied schema // Recursion is used here. found = resolveRecursiveDown(resolvedRef, localName, type, session); if (found != null) { return found; } } } } // return null; }