diff options
author | Jose <jose@zeroc.com> | 2012-01-03 21:41:21 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2012-01-03 21:41:21 +0100 |
commit | fcbad2aa2fae8226d3f59bd12ae0554a8bc38fe0 (patch) | |
tree | c8d64ad55c3cd37ef6a5e2d697664acb02e19069 /java | |
parent | ICE-4761 ice VS 2010 plugin failure (diff) | |
download | ice-fcbad2aa2fae8226d3f59bd12ae0554a8bc38fe0.tar.bz2 ice-fcbad2aa2fae8226d3f59bd12ae0554a8bc38fe0.tar.xz ice-fcbad2aa2fae8226d3f59bd12ae0554a8bc38fe0.zip |
ICE-4744 Eclipse plugin: build failure when slice2java generates warning
- add --depend-xml option to slice2freezej
- update ant tasks to use --depend-xml instead of --depend
Diffstat (limited to 'java')
-rw-r--r-- | java/src/ant/Slice2FreezeJTask.java | 2 | ||||
-rw-r--r-- | java/src/ant/Slice2JavaTask.java | 2 | ||||
-rw-r--r-- | java/src/ant/SliceTask.java | 213 |
3 files changed, 110 insertions, 107 deletions
diff --git a/java/src/ant/Slice2FreezeJTask.java b/java/src/ant/Slice2FreezeJTask.java index 2a045bc10f7..aeb170987bb 100644 --- a/java/src/ant/Slice2FreezeJTask.java +++ b/java/src/ant/Slice2FreezeJTask.java @@ -369,7 +369,7 @@ public class Slice2FreezeJTask extends SliceTask if(!sliceFiles.isEmpty()) { cmd = new StringBuilder(256); - cmd.append("--depend"); + cmd.append("--depend-xml"); // // Add --ice diff --git a/java/src/ant/Slice2JavaTask.java b/java/src/ant/Slice2JavaTask.java index d206c2bf24b..b1b7f6b03be 100644 --- a/java/src/ant/Slice2JavaTask.java +++ b/java/src/ant/Slice2JavaTask.java @@ -309,7 +309,7 @@ public class Slice2JavaTask extends SliceTask // Update the dependencies. // cmd = new StringBuilder(256); - cmd.append("--depend"); + cmd.append("--depend-xml"); // // Add --ice diff --git a/java/src/ant/SliceTask.java b/java/src/ant/SliceTask.java index ec249471809..2d5f4dac791 100644 --- a/java/src/ant/SliceTask.java +++ b/java/src/ant/SliceTask.java @@ -22,6 +22,9 @@ import org.apache.tools.ant.types.Commandline.Argument; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Reference; +import java.util.List; +import java.util.ArrayList; + import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; @@ -29,6 +32,26 @@ import java.io.FileWriter; import java.io.StringReader; import java.io.BufferedReader; import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.BufferedInputStream; +import java.io.InputStream; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; +import org.xml.sax.SAXException; /** * An abstract ant task for slice translators. The task minimizes @@ -210,119 +233,27 @@ public class SliceTask extends org.apache.tools.ant.Task protected java.util.List<SliceDependency> parseDependencies(String allDependencies) { - java.util.List<SliceDependency> dependencies = new java.util.LinkedList<SliceDependency>(); + Slice2JavaDependenciesParser parser = new Slice2JavaDependenciesParser(); try { - BufferedReader in = new BufferedReader(new StringReader(allDependencies)); - StringBuilder depline = new StringBuilder(1024); - String line; - - while((line = in.readLine()) != null) - { - if(line.length() == 0) - { - continue; - } - else if(line.endsWith("\\")) - { - depline.append(line.substring(0, line.length() - 1)); - } - else - { - depline.append(line); - - // - // It's easier to split up the filenames if we first convert Windows - // path separators into Unix path separators. - // - char[] chars = depline.toString().toCharArray(); - int pos = 0; - while(pos < chars.length) - { - if(chars[pos] == '\\') - { - if(pos + 1 < chars.length) - { - // - // Only convert the backslash if it's not an escape. - // - if(chars[pos + 1] != ' ' && chars[pos + 1] != ':' && chars[pos + 1] != '\r' && - chars[pos + 1] != '\n') - { - chars[pos] = '/'; - } - } - } - ++pos; - } - - // - // Split the dependencies up into filenames. Note that filenames containing - // spaces are escaped and the initial file may have escaped colons - // (e.g., "C\:/Program\ Files/..."). - // - java.util.ArrayList<String> l = new java.util.ArrayList<String>(); - StringBuilder file = new StringBuilder(128); - pos = 0; - while(pos < chars.length) - { - if(chars[pos] == '\\') // Skip backslash of an escaped character. - { - if(pos + 1 >= chars.length) - { - throw new BuildException("dependency parse failure"); - } - file.append(chars[++pos]); - } - else if(Character.isWhitespace(chars[pos])) - { - if(file.length() > 0) - { - l.add(file.toString()); - file = new StringBuilder(128); - } - } - else - { - file.append(chars[pos]); - } - ++pos; - } - if(file.length() > 0) - { - l.add(file.toString()); - } - - // - // Create SliceDependency. We need to remove the trailing colon from the first file. - // We also normalize the pathname for this platform. - // - SliceDependency depend = new SliceDependency(); - depend._dependencies = new String[l.size()]; - l.toArray(depend._dependencies); - depend._timeStamp = new java.util.Date().getTime(); - pos = depend._dependencies[0].lastIndexOf(':'); - if(pos != depend._dependencies[0].length() - 1) - { - throw new BuildException("dependency parse failure"); - } - depend._dependencies[0] = depend._dependencies[0].substring(0, pos); - for(int i = 0; i < depend._dependencies.length; ++i) - { - depend._dependencies[i] = new File(depend._dependencies[i]).toString(); - } - dependencies.add(depend); - - depline = new StringBuilder(1024); - } - } + InputStream in = new ByteArrayInputStream(allDependencies.getBytes()); + Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new BufferedInputStream(in)); + parser.visit(doc); + } + catch(SAXException ex) + { + throw new BuildException("Unable to read dependencies from slice translator: " + ex); + } + catch(ParserConfigurationException ex) + { + throw new BuildException("Unable to read dependencies from slice translator: " + ex); } catch(java.io.IOException ex) { throw new BuildException("Unable to read dependencies from slice translator: " + ex); } - return dependencies; + return parser.dependencies; } protected String @@ -544,6 +475,78 @@ public class SliceTask extends org.apache.tools.ant.Task return null; } + private class Slice2JavaDependenciesParser + { + java.util.List<SliceDependency> dependencies = new java.util.LinkedList<SliceDependency>(); + + private Node findNode(Node n, String qName) + throws SAXException + { + NodeList children = n.getChildNodes(); + for(int i = 0; i < children.getLength(); ++i) + { + Node child = children.item(i); + if(child.getNodeType() == Node.ELEMENT_NODE && child.getNodeName().equals(qName)) + { + return child; + } + } + throw new SAXException("no such node: " + qName); + } + + private void visitDependencies(Node n) throws SAXException + { + NodeList children = n.getChildNodes(); + for(int i = 0; i < children.getLength(); ++i) + { + if(children.item(i).getNodeType() == Node.ELEMENT_NODE && children.item(i).getNodeName().equals("source")) + { + String source = ((Element)children.item(i)).getAttribute("name"); + if(source.length() == 0) + { + throw new SAXException("empty name attribute"); + } + List<String> dependsOn = visitDependsOn(children.item(i)); + SliceDependency depend = new SliceDependency(); + depend._timeStamp = new java.util.Date().getTime(); + depend._dependencies = new String[dependsOn.size() + 1]; + depend._dependencies[0] = source; + for(int j = 0; j < dependsOn.size(); j++) + { + depend._dependencies[j + 1] = dependsOn.get(j); + } + dependencies.add(depend); + } + } + } + + private List<String> visitDependsOn(Node source) throws SAXException + { + List<String> depends = new ArrayList<String>(); + NodeList dependencies = source.getChildNodes(); + for(int j = 0; j < dependencies.getLength(); ++j) + { + if(dependencies.item(j).getNodeType() == Node.ELEMENT_NODE && dependencies.item(j).getNodeName().equals("dependsOn")) + { + Element dependsOn = (Element)dependencies.item(j); + String name = dependsOn.getAttribute("name"); + if(name.length() == 0) + { + throw new SAXException("empty name attribute"); + } + depends.add(name); + } + } + return depends; + } + + public void visit(Node doc) throws SAXException + { + Node n = findNode(doc, "dependencies"); + visitDependencies(n); + } + } + protected File _dependencyFile; protected File _outputDir; protected String _outputDirString; |