Mercurial > hg > graal-compiler
changeset 3597:78c94d5d23fb
IdealGraphVisualizer: implement validation of graph documents against an XML schema. For now, validation errors are only printed to the console as warnings.
author | Peter Hofer <peter.hofer@jku.at> |
---|---|
date | Wed, 19 Oct 2011 15:11:33 +0200 |
parents | 3a0a26011371 |
children | 9fe4191f46af |
files | src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/ImportAction.java src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/graphdocument.xsd src/share/tools/IdealGraphVisualizer/Data/test/unit/src/com/sun/hotspot/igv/data/serialization/ParserTest.java src/share/tools/IdealGraphVisualizer/NetworkConnection/src/com/sun/hotspot/igv/connection/Client.java |
diffstat | 5 files changed, 175 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/ImportAction.java Mon Oct 17 16:30:41 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/ImportAction.java Wed Oct 19 15:11:33 2011 +0200 @@ -47,10 +47,8 @@ import org.openide.util.NbBundle; import org.openide.util.RequestProcessor; import org.openide.util.actions.CallableSystemAction; -import org.openide.xml.XMLUtil; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; /** * @@ -88,7 +86,6 @@ Settings.get().put(Settings.DIRECTORY, dir.getAbsolutePath()); try { - final XMLReader reader = XMLUtil.createXMLReader(); final FileInputStream inputStream = new FileInputStream(file); final InputSource is = new InputSource(inputStream); @@ -123,7 +120,7 @@ public void run() { GraphDocument document = null; try { - document = parser.parse(reader, is, parseMonitor); + document = parser.parse(is, parseMonitor); parseMonitor.setState("Finishing"); component.getDocument().addGraphDocument(document); } catch (SAXException ex) { @@ -140,8 +137,6 @@ } }); - } catch (SAXException ex) { - ex.printStackTrace(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) {
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java Mon Oct 17 16:30:41 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/Parser.java Wed Oct 19 15:11:33 2011 +0200 @@ -38,9 +38,15 @@ import com.sun.hotspot.igv.data.serialization.XMLParser.ParseMonitor; import com.sun.hotspot.igv.data.serialization.XMLParser.TopElementHandler; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.SchemaFactory; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; @@ -378,7 +384,7 @@ if (fromIndexString != null) { fromIndex = Integer.parseInt(fromIndexString); } - + String toIndexString = readAttribute(TO_INDEX_PROPERTY); if (toIndexString == null) { toIndexString = readAttribute(TO_INDEX_ALT_PROPERTY); @@ -495,7 +501,9 @@ } // Returns a new GraphDocument object deserialized from an XML input source. - public synchronized GraphDocument parse(XMLReader reader, InputSource source, XMLParser.ParseMonitor monitor) throws SAXException { + public synchronized GraphDocument parse(InputSource source, XMLParser.ParseMonitor monitor) throws SAXException { + XMLReader reader = createReader(); + reader.setContentHandler(new XMLParser(xmlDocument, monitor)); try { reader.parse(source); @@ -505,4 +513,21 @@ return topHandler.getObject(); } + + private XMLReader createReader() throws SAXException { + try { + SAXParserFactory pfactory = SAXParserFactory.newInstance(); + pfactory.setValidating(false); + pfactory.setNamespaceAware(true); + + // Enable schema validation + SchemaFactory sfactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); + InputStream stream = Parser.class.getResourceAsStream("graphdocument.xsd"); + pfactory.setSchema(sfactory.newSchema(new Source[]{new StreamSource(stream)})); + + return pfactory.newSAXParser().getXMLReader(); + } catch (ParserConfigurationException ex) { + throw new SAXException(ex); + } + } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/graphdocument.xsd Wed Oct 19 15:11:33 2011 +0200 @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + + <xsd:element name="graphDocument"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="properties" type="propertiesType" minOccurs="0" maxOccurs="1" /> + <xsd:element name="group" type="groupType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="groupType"> + <xsd:sequence> + <xsd:element name="properties" type="propertiesType" minOccurs="0" maxOccurs="1" /> + <xsd:element name="assembly" type="assemblyType" minOccurs="0" maxOccurs="1" /> + <xsd:element name="method" type="methodType" minOccurs="0" maxOccurs="1" /> + <xsd:element name="graph" type="graphType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:attribute name="difference" use="optional" /> + </xsd:complexType> + + <xsd:complexType name="propertiesType"> + <xsd:sequence> + <xsd:element name="p" minOccurs="0" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:simpleContent> + <xsd:extension base="xsd:string"> + <xsd:attribute name="name" use="required" /> + </xsd:extension> + </xsd:simpleContent> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + + <xsd:simpleType name="assemblyType"> + <xsd:restriction base="xsd:string" /> + </xsd:simpleType> + + <xsd:complexType name="methodType"> + <xsd:all> + <xsd:element name="properties" type="propertiesType" minOccurs="0" maxOccurs="1" /> + <xsd:element name="bytecodes" minOccurs="0" maxOccurs="1"> + <xsd:simpleType> + <xsd:restriction base="xsd:string" /> + </xsd:simpleType> + </xsd:element> + <xsd:element name="inlined" minOccurs="0" maxOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="method" type="methodType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:all> + <xsd:attribute name="bci" type="xsd:int" use="required" /> + <xsd:attribute name="shortName" type="xsd:string" use="required" /> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + + <xsd:complexType name="graphType"> + <xsd:sequence> + <xsd:element name="properties" type="propertiesType" minOccurs="0" maxOccurs="1" /> + + <xsd:element name="nodes" minOccurs="0" maxOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="node" type="nodeType" /> + <xsd:element name="removeNode" type="nodeRefType" /> + </xsd:choice> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="edges" minOccurs="0" maxOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="edge" type="edgeType" /> + <xsd:element name="removeEdge" type="edgeType" /> + </xsd:choice> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="controlFlow" type="controlFlowType" minOccurs="0" maxOccurs="1" /> + </xsd:sequence> + + <xsd:attribute name="name" use="optional" /> + </xsd:complexType> + + <xsd:complexType name="nodeType"> + <xsd:sequence> + <xsd:element name="properties" type="propertiesType" minOccurs="0" maxOccurs="1" /> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:int" use="required" /> + </xsd:complexType> + + <xsd:complexType name="nodeRefType"> + <xsd:attribute name="id" type="xsd:int" use="required" /> + </xsd:complexType> + + <xsd:complexType name="edgeType"> + <xsd:attribute name="from" type="xsd:int" use="required" /> + <xsd:attribute name="to" type="xsd:int" use="required" /> + <xsd:attribute name="fromIndex" type="xsd:int" use="optional" /> + + <!-- These are aliases and should be mutually exclusive --> + <xsd:attribute name="toIndex" type="xsd:int" use="optional" /> + <xsd:attribute name="index" type="xsd:int" use="optional" /> + </xsd:complexType> + + <xsd:complexType name="controlFlowType"> + <xsd:sequence> + <xsd:element name="block" type="blockType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="blockType"> + <xsd:all> + <xsd:element name="successors" minOccurs="0" maxOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="successor" minOccurs="0" maxOccurs="unbounded"> + <xsd:complexType> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="nodes" minOccurs="0" maxOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="node" type="nodeRefType" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:all> + + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> +</xsd:schema>
--- a/src/share/tools/IdealGraphVisualizer/Data/test/unit/src/com/sun/hotspot/igv/data/serialization/ParserTest.java Mon Oct 17 16:30:41 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/Data/test/unit/src/com/sun/hotspot/igv/data/serialization/ParserTest.java Wed Oct 19 15:11:33 2011 +0200 @@ -40,11 +40,9 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.openide.xml.XMLUtil; import static org.junit.Assert.*; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; /** * @@ -84,9 +82,8 @@ InputSource is = new InputSource(sr); try { - XMLReader reader = XMLUtil.createXMLReader(); Parser parser = new Parser(); - final GraphDocument parsedDocument = parser.parse(reader, is, null); + final GraphDocument parsedDocument = parser.parse(is, null); Util.assertGraphDocumentEquals(document, parsedDocument); } catch (SAXException ex) { fail(ex.toString());
--- a/src/share/tools/IdealGraphVisualizer/NetworkConnection/src/com/sun/hotspot/igv/connection/Client.java Mon Oct 17 16:30:41 2011 +0200 +++ b/src/share/tools/IdealGraphVisualizer/NetworkConnection/src/com/sun/hotspot/igv/connection/Client.java Wed Oct 19 15:11:33 2011 +0200 @@ -33,10 +33,8 @@ import java.net.Socket; import javax.swing.JTextField; import org.openide.util.Exceptions; -import org.openide.xml.XMLUtil; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; /** * @@ -65,9 +63,8 @@ InputSource is = new InputSource(inputStream); try { - XMLReader reader = XMLUtil.createXMLReader(); Parser parser = new Parser(this); - parser.parse(reader, is, null); + parser.parse(is, null); } catch (SAXException ex) { ex.printStackTrace(); }