langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java Fri Jun 18 16:45:13 2010 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java Fri Jun 18 21:13:56 2010 -0700
@@ -45,8 +45,8 @@
/**
* The map of XML elements that have been parsed.
*/
- private Map<String,List<Object>> xmlElementsMap;
-
+ private Map<String,XMLNode> xmlElementsMap;
+ private XMLNode currentNode;
private Configuration configuration;
private static LayoutParser instance;
private String currentRoot;
@@ -56,7 +56,7 @@
* This class is a singleton.
*/
private LayoutParser(Configuration configuration) {
- xmlElementsMap = new HashMap<String,List<Object>>();
+ xmlElementsMap = new HashMap<String,XMLNode>();
this.configuration = configuration;
}
@@ -78,20 +78,18 @@
*
* @return List the list of XML elements parsed.
*/
- public List<?> parseXML(String root) {
+ public XMLNode parseXML(String root) {
if (xmlElementsMap.containsKey(root)) {
return xmlElementsMap.get(root);
}
try {
- List<Object> xmlElements = new ArrayList<Object>();
- xmlElementsMap.put(root, xmlElements);
currentRoot = root;
isParsing = false;
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
InputStream in = configuration.getBuilderXML();
saxParser.parse(in, this);
- return xmlElements;
+ return xmlElementsMap.get(root);
} catch (Throwable t) {
t.printStackTrace();
throw new DocletAbortException();
@@ -101,39 +99,30 @@
/**
* {@inheritDoc}
*/
+ @Override
public void startElement(String namespaceURI, String sName, String qName,
Attributes attrs)
throws SAXException {
if (isParsing || qName.equals(currentRoot)) {
isParsing = true;
- List<Object> xmlElements = xmlElementsMap.get(currentRoot);
- xmlElements.add(qName);
+ currentNode = new XMLNode(currentNode, qName);
+ for (int i = 0; i < attrs.getLength(); i++)
+ currentNode.attrs.put(attrs.getLocalName(i), attrs.getValue(i));
+ if (qName.equals(currentRoot))
+ xmlElementsMap.put(qName, currentNode);
}
}
/**
* {@inheritDoc}
*/
+ @Override
public void endElement(String namespaceURI, String sName, String qName)
throws SAXException {
if (! isParsing) {
- isParsing = false;
return;
}
- List<Object> xmlElements = xmlElementsMap.get(currentRoot);
- if (xmlElements.get(xmlElements.size()-1).equals(qName)) {
- return;
- } else {
- List<Object> subElements = new ArrayList<Object>();
- int targetIndex = xmlElements.indexOf(qName);
- int size = xmlElements.size();
- for (int i = targetIndex; i < size; i++) {
- subElements.add(xmlElements.get(targetIndex));
- xmlElements.remove(targetIndex);
- }
- //Save the sub elements as a list.
- xmlElements.add(subElements);
- }
+ currentNode = currentNode.parent;
isParsing = ! qName.equals(currentRoot);
}
}