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();
}
}
}