public void processSchemas()

in src/com/intellij/idea/plugin/hybris/system/type/model/generator/XSDModelLoader.java [182:263]


    public void processSchemas(final Collection<File> schemas, final XMLEntityResolver resolver) throws Exception {
        final Map<String, NamespaceDesc> nsdMap = model.nsdMap;
        final Map<String, TypeDesc> jtMap = model.jtMap;
        final NamespaceDesc nsdDef = nsdMap.get("");
        final ArrayList<XSModel> models = new ArrayList<>();
        final HashMap<String, XSTypeDefinition> types = new HashMap<>();
        for (File schemaFile : schemas) {
            final String fileName = schemaFile.getPath();
            if (schemaFile.isDirectory() || !fileName.endsWith(".xsd")) {
                Util.log("skipping " + fileName);
                continue;
            }
            Util.log("loading " + fileName + "");

            final XSModel model = loadSchema(schemaFile, resolver);
            if (model == null) {
                continue;
            }

            final StringList namespaceList = model.getNamespaces();
            for (int i = 0; i < namespaceList.getLength(); i++) {
                final String ns = namespaceList.item(i);
                if (!nsdMap.containsKey(ns)) {
                    Util.log("Adding default namespace desc for: " + ns);
                    final NamespaceDesc nsd = new NamespaceDesc(ns, nsdDef);
                    nsdMap.put(ns, nsd);
                }
            }
            models.add(model);
            final XSNamedMap typeDefMap = model.getComponents(XSConstants.TYPE_DEFINITION);
            for (int i = 0; i < typeDefMap.getLength(); i++) {
                final XSTypeDefinition o = (XSTypeDefinition) typeDefMap.item(i);
                final NamespaceDesc nsd = nsdMap.get(o.getNamespace());
                if (nsd != null && nsd.skip) {
                    continue;
                }
                final String key = o.getName() + ',' + o.getNamespace();
                types.put(key, o);
            }
            final XSNamedMap elementDeclMap = model.getComponents(XSConstants.ELEMENT_DECLARATION);
            for (int i = 0; i < elementDeclMap.getLength(); i++) {
                final XSElementDeclaration o = (XSElementDeclaration) elementDeclMap.item(i);
                if (o.getTypeDefinition()
                     .getAnonymous() && (o.getTypeDefinition() instanceof XSComplexTypeDefinition)) {
                    //types.put(o.getName() + "," + o.getNamespace(), o);
                    final XSComplexTypeDefinition ctd = makeTypeFromAnonymous(o);
                    final NamespaceDesc nsd = nsdMap.get(o.getNamespace());
                    if (nsd != null && nsd.skip) {
                        continue;
                    }
                    final String key = ctd.getName() + ',' + ctd.getNamespace();
                    types.put(key, ctd);
                }
            }
        }
        Util.log(types.size() + " elements loaded, processing..");
        final ArrayList<XSTypeDefinition> toProcess = new ArrayList<>(types.values());
        final ArrayList<XSComplexTypeDefinition> toAdd = new ArrayList<>();
        for (final ListIterator<XSTypeDefinition> it = toProcess.listIterator(); it.hasNext(); ) {
            final XSTypeDefinition td = it.next();
            Util.log("processing " + td.getName() + ',' + td.getNamespace() + "");
            if (checkComplexType(td)) {
                processType((XSComplexTypeDefinition) td, models, jtMap, nsdMap, toAdd);
            } else if (checkEnumType(td)) {
                processEnumType(td, jtMap, nsdMap);
            }
            if (toAdd.size() != 0) {
                for (XSComplexTypeDefinition o : toAdd) {
                    final String key = o.getName() + ',' + o.getNamespace();
                    if (!types.containsKey(key)) {
                        Util.log("  adding " + o.getName() + ',' + o.getNamespace());
                        types.put(key, o);
                        it.add(o);
                        it.previous();
                    } else {
                        Util.logwarn(key + " already exists");
                    }
                }
                toAdd.clear();
            }
        }
    }