Collection<StructureViewTreeElement> () { final XmlDocument document = getElement().getDocument(); List<XmlTag> rootTags = new ArrayList<>(); if (document != null) { for (PsiElement element : document.getChildren()) if (element instanceof XmlTag) rootTags.add((XmlTag)element); } Collection<StructureViewTreeElement> structureViewTreeElements = getStructureViewTreeElements(rootTags.toArray(XmlTag.EMPTY)); Collection<StructureViewTreeElement> dtdStructureViewTreeElements = null; final XmlProlog prolog = document != null ? document.getProlog():null; if (prolog != null) { final XmlDoctype doctype = prolog.getDoctype(); if (doctype != null) { final XmlMarkupDecl xmlMarkupDecl = doctype.getMarkupDecl(); if (xmlMarkupDecl != null) { dtdStructureViewTreeElements = DtdFileTreeElement.collectElements(xmlMarkupDecl); } } } if (dtdStructureViewTreeElements != null) { final ArrayList<StructureViewTreeElement> result = new ArrayList<>( dtdStructureViewTreeElements.size() + structureViewTreeElements.size() ); result.addAll(dtdStructureViewTreeElements); result.addAll(structureViewTreeElements); structureViewTreeElements = result; } return structureViewTreeElements; }