ASTNode () { final PsiBuilder.Marker root = myBuilder.mark(); if (myRootType == XML_MARKUP_DECL) { parseTopLevelMarkupDecl(); root.done(myRootType); return myBuilder.getTreeBuilt(); } PsiBuilder.Marker document = null; if (myRootType == DTD_FILE) { document = myBuilder.mark(); parseProlog(); } switch (myContextType) { case GENERIC_XML: parseGenericXml(); break; case ELEMENT_CONTENT_SPEC: doParseContentSpec(true); break; case ATTLIST_SPEC: parseAttlistContent(); break; case ATTR_VALUE: parseAttrValue(); case ATTRIBUTE_SPEC: parseAttributeContentSpec(); break; case ENTITY_DECL_CONTENT: parseEntityDeclContent(); break; case ENUMERATED_TYPE: parseEnumeratedTypeContent(); break; } while(!myBuilder.eof()) myBuilder.advanceLexer(); if (document != null) document.done(XML_DOCUMENT); root.done(myRootType); ASTNode astNode = myBuilder.getTreeBuilt(); if (myRootType != DTD_FILE) { PsiFile file = myBuilder.getUserData(FileContextUtil.CONTAINING_FILE_KEY); if (file != null) { final DummyHolder result = DummyHolderFactory.createHolder(file.getManager(), DTDLanguage.INSTANCE, file); final FileElement holder = result.getTreeElement(); holder.rawAddChildren((TreeElement)astNode); } } return astNode; }