summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2012-01-03 21:41:21 +0100
committerJose <jose@zeroc.com>2012-01-03 21:41:21 +0100
commitfcbad2aa2fae8226d3f59bd12ae0554a8bc38fe0 (patch)
treec8d64ad55c3cd37ef6a5e2d697664acb02e19069 /java
parentICE-4761 ice VS 2010 plugin failure (diff)
downloadice-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.java2
-rw-r--r--java/src/ant/Slice2JavaTask.java2
-rw-r--r--java/src/ant/SliceTask.java213
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;