This patch generifies a number of classes in gnu.xml.transform.*

ChangeLog:

2008-06-23  Andrew John Hughes  <[EMAIL PROTECTED]>

        * gnu/xml/transform/ParameterNode.java,
        * gnu/xml/transform/Stylesheet.java,
        * gnu/xml/transform/UnparsedEntityUriFunction.java,
        * gnu/xml/transform/ValueOfNode.java,
        * gnu/xml/transform/XSLComparator.java,
        * gnu/xml/transform/XSLURIResolver.java:
        Genericised.

-- 
Andrew :)

Support Free Java!
Contribute to GNU Classpath and the OpenJDK
http://www.gnu.org/software/classpath
http://openjdk.java.net
PGP Key: 94EFD9D8 (http://subkeys.pgp.net)
Fingerprint = F8EF F1EA 401E 2E60 15FA  7927 142C 2591 94EF D9D8
Index: gnu/xml/transform/ParameterNode.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/xml/transform/ParameterNode.java,v
retrieving revision 1.7
diff -u -u -r1.7 ParameterNode.java
--- gnu/xml/transform/ParameterNode.java        22 Jun 2008 14:56:27 -0000      
1.7
+++ gnu/xml/transform/ParameterNode.java        22 Jun 2008 23:43:00 -0000
@@ -55,7 +55,7 @@
  */
 final class ParameterNode
   extends TemplateNode
-  implements Comparable
+  implements Comparable<ParameterNode>
 {
 
   final QName name;
@@ -69,11 +69,12 @@
     this.type = type;
   }
 
-  TemplateNode clone(Stylesheet stylesheet)
+  @Override
+  ParameterNode clone(Stylesheet stylesheet)
   {
-    TemplateNode ret = new ParameterNode(name,
-                                         select == null ? null : 
select.clone(stylesheet),
-                                         type);
+    ParameterNode ret = new ParameterNode(name,
+                                         select == null ? null : 
select.clone(stylesheet),
+                                         type);
     if (children != null)
       ret.children = children.clone(stylesheet);
     if (next != null)
@@ -131,20 +132,16 @@
     return super.references(var);
   }
 
-  public int compareTo(Object other)
+  public int compareTo(ParameterNode pn)
   {
-    if (other instanceof ParameterNode)
-      {
-        ParameterNode pn = (ParameterNode) other;
-        boolean r1 = references(pn.name);
-        boolean r2 = pn.references(name);
-        if (r1 && r2)
-          throw new IllegalArgumentException("circular definitions");
-        if (r1)
-          return 1;
-        if (r2)
-          return -1;
-      }
+    boolean r1 = references(pn.name);
+    boolean r2 = pn.references(name);
+    if (r1 && r2)
+      throw new IllegalArgumentException("circular definitions");
+    if (r1)
+      return 1;
+    if (r2)
+      return -1;
     return 0;
   }
   
Index: gnu/xml/transform/Stylesheet.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/xml/transform/Stylesheet.java,v
retrieving revision 1.12
diff -u -u -r1.12 Stylesheet.java
--- gnu/xml/transform/Stylesheet.java   22 Jun 2008 14:56:27 -0000      1.12
+++ gnu/xml/transform/Stylesheet.java   22 Jun 2008 23:43:03 -0000
@@ -110,18 +110,18 @@
    */
   String version;
 
-  Collection extensionElementPrefixes;
-  Collection excludeResultPrefixes;
+  Collection<String> extensionElementPrefixes;
+  Collection<String> excludeResultPrefixes;
 
   /**
    * Set of element names for which we should strip whitespace.
    */
-  Set stripSpace;
+  Set<StrippingInstruction> stripSpace;
 
   /**
    * Set of element names for which we should preserve whitespace.
    */
-  Set preserveSpace;
+  Set<StrippingInstruction> preserveSpace;
 
   /**
    * Output options.
@@ -134,34 +134,34 @@
   boolean outputStandalone;
   String outputPublicId;
   String outputSystemId;
-  Collection outputCdataSectionElements;
+  Collection<String> outputCdataSectionElements;
   boolean outputIndent;
   String outputMediaType;
 
   /**
    * Keys.
    */
-  Collection keys;
+  Collection<Key> keys;
 
   /**
    * Decimal formats.
    */
-  Map decimalFormats;
+  Map<String,DecimalFormat> decimalFormats;
   
   /**
    * Namespace aliases.
    */
-  Map namespaceAliases;
+  Map<String,String> namespaceAliases;
 
   /**
    * Attribute-sets.
    */
-  List attributeSets;
+  List<AttributeSet> attributeSets;
 
   /**
    * Variables.
    */
-  List variables;
+  List<ParameterNode> variables;
 
   /**
    * Variable and parameter bindings.
@@ -171,7 +171,7 @@
   /**
    * Templates.
    */
-  LinkedList templates;
+  LinkedList<Template> templates;
 
   TemplateNode builtInNodeTemplate;
   TemplateNode builtInTextTemplate;
@@ -205,22 +205,22 @@
     this.systemId = systemId;
     this.precedence = precedence;
     this.parent = parent;
-    extensionElementPrefixes = new HashSet();
-    excludeResultPrefixes = new HashSet();
-    stripSpace = new LinkedHashSet();
-    preserveSpace = new LinkedHashSet();
-    outputCdataSectionElements = new LinkedHashSet();
+    extensionElementPrefixes = new HashSet<String>();
+    excludeResultPrefixes = new HashSet<String>();
+    stripSpace = new LinkedHashSet<StrippingInstruction>();
+    preserveSpace = new LinkedHashSet<StrippingInstruction>();
+    outputCdataSectionElements = new LinkedHashSet<String>();
     xpath = (XPathImpl) factory.xpathFactory.newXPath();
     xpath.setNamespaceContext(this);
     if (parent == null)
       {
         bindings = new Bindings(this);
-        attributeSets = new LinkedList();
-        variables = new LinkedList();
-        namespaceAliases = new LinkedHashMap();
-        templates = new LinkedList();
-        keys = new LinkedList();
-        decimalFormats = new LinkedHashMap();
+        attributeSets = new LinkedList<AttributeSet>();
+        variables = new LinkedList<ParameterNode>();
+        namespaceAliases = new LinkedHashMap<String,String>();
+        templates = new LinkedList<Template>();
+        keys = new LinkedList<Key>();
+        decimalFormats = new LinkedHashMap<String,DecimalFormat>();
         initDefaultDecimalFormat();
         xpath.setXPathFunctionResolver(this);
       }
@@ -249,7 +249,7 @@
     xpath.setXPathVariableResolver(bindings);
 
     Test anyNode = new NodeTypeTest((short) 0);
-    List tests = Collections.singletonList(anyNode);
+    List<Test> tests = Collections.singletonList(anyNode);
     builtInNodeTemplate =
       new ApplyTemplatesNode(new Selector(Selector.CHILD, tests),
                              null, null, null, true);
@@ -265,9 +265,8 @@
     if (debug)
       {
         System.err.println("Stylesheet: " + doc.getDocumentURI());
-        for (Iterator i = templates.iterator(); i.hasNext(); )
+       for (Template t : templates)
           {
-            Template t = (Template) i.next();
             t.list(System.err);
             System.err.println("--------------------");
           }
@@ -309,34 +308,30 @@
         Stylesheet clone = (Stylesheet) super.clone();
         clone.bindings = (Bindings) bindings.clone();
 
-        LinkedList templates2 = new LinkedList();
-        for (Iterator i = templates.iterator(); i.hasNext(); )
+        LinkedList<Template> templates2 = new LinkedList<Template>();
+       for (Template t : templates)
           {
-            Template t = (Template) i.next();
             templates2.add(t.clone(clone));
           }
         clone.templates = templates2;
 
-        LinkedList attributeSets2 = new LinkedList();
-        for (Iterator i = attributeSets.iterator(); i.hasNext(); )
+        LinkedList<AttributeSet> attributeSets2 = new 
LinkedList<AttributeSet>();
+       for (AttributeSet as : attributeSets)
           {
-            AttributeSet as = (AttributeSet) i.next();
             attributeSets2.add(as.clone(clone));
           }
         clone.attributeSets = attributeSets2;
 
-        LinkedList variables2 = new LinkedList();
-        for (Iterator i = variables.iterator(); i.hasNext(); )
+        LinkedList<ParameterNode> variables2 = new LinkedList<ParameterNode>();
+       for (ParameterNode var : variables)
           {
-            ParameterNode var = (ParameterNode) i.next();
             variables2.add(var.clone(clone));
           }
         clone.variables = variables2;
 
-        LinkedList keys2 = new LinkedList();
-        for (Iterator i = keys.iterator(); i.hasNext(); )
+        LinkedList<Key> keys2 = new LinkedList<Key>();
+       for (Key k : keys)
           {
-            Key k = (Key) i.next();
             keys2.add(k.clone(clone));
           }
         clone.keys = keys2;
@@ -359,11 +354,10 @@
     // See XSLT 11.4: "If the template or expression specifying the value of
     // a global variable x references a global variable y, then the value
     // for y must be computed before the value of x."
-    List topLevel = new ArrayList(variables);
+    List<ParameterNode> topLevel = new ArrayList<ParameterNode>(variables);
     Collections.sort(topLevel);
-    for (Iterator i = topLevel.iterator(); i.hasNext(); )
+    for (ParameterNode var : topLevel)
       {
-        ParameterNode var = (ParameterNode) i.next();
         bindings.set(var.name,
                      var.getValue(this, null, context, 1, 1),
                      var.type);
@@ -383,7 +377,7 @@
     return (current == null) ? null : current.lookupPrefix(namespaceURI);
   }
 
-  public Iterator getPrefixes(String namespaceURI)
+  public Iterator<String> getPrefixes(String namespaceURI)
   {
     // TODO
     return Collections.singleton(getPrefix(namespaceURI)).iterator();
@@ -410,9 +404,8 @@
     if (debug)
       System.err.println("getTemplate: mode="+mode+" context="+context);
     Template selected = null;
-    for (Iterator j = templates.iterator(); j.hasNext(); )
+    for (Template t : templates)
       {
-        Template t = (Template) j.next();
         boolean isMatch = t.matches(mode, context);
         if (applyImports)
           {
@@ -474,9 +467,8 @@
     throws TransformerException
   {
     Template selected = null;
-    for (Iterator j = templates.iterator(); j.hasNext(); )
+    for (Template t : templates)
       {
-        Template t = (Template) j.next();
         boolean isMatch = t.matches(name);
         if (isMatch)
           {
@@ -864,8 +856,8 @@
     // Tokenize
     int len = value.length();
     int off = 0;
-    List tokens = new ArrayList(); // text tokens
-    List types = new ArrayList(); // literal or expression
+    List<String> tokens = new ArrayList<String>(); // text tokens
+    List<Boolean> types = new ArrayList<Boolean>(); // literal or expression
     int depth = 0;
     for (int i = 0; i < len; i++)
       {
@@ -938,8 +930,8 @@
     len = tokens.size();
     for (int i = len - 1; i >= 0; i--)
       {
-        String token = (String) tokens.get(i);
-        Boolean type = (Boolean) types.get(i);
+        String token = tokens.get(i);
+        Boolean type = types.get(i);
         if (type == Boolean.TRUE)
           {
             // Expression text
@@ -991,9 +983,8 @@
           {
             // Conflict resolution
             StrippingInstruction ssi = null, psi = null;
-            for (Iterator i = stripSpace.iterator(); i.hasNext(); )
+           for (StrippingInstruction si : stripSpace)
               {
-                StrippingInstruction si = (StrippingInstruction) i.next();
                 if (si.element.matches(ctx, 1, 1))
                   {
                     if (ssi != null)
@@ -1007,9 +998,8 @@
                     ssi = si;
                   }
               }
-            for (Iterator i = preserveSpace.iterator(); i.hasNext(); )
+           for (StrippingInstruction si : preserveSpace)
               {
-                StrippingInstruction si = (StrippingInstruction) i.next();
                 if (si.element.matches(ctx, 1, 1))
                   {
                     if (psi != null)
@@ -1116,8 +1106,8 @@
     if (s == null)
       s = "child::node()";
     Node children = node.getFirstChild();
-    List sortKeys = parseSortKeys(children);
-    List withParams = parseWithParams(children);
+    List<SortKey> sortKeys = parseSortKeys(children);
+    List<WithParam> withParams = parseWithParams(children);
     Expr select = (Expr) xpath.compile(s);
     return new ApplyTemplatesNode(select, mode,
                                   sortKeys, withParams, false);
@@ -1133,7 +1123,7 @@
     String n = getRequiredAttribute(attrs, "name", node);
     QName name = getQName(n);
     Node children = node.getFirstChild();
-    List withParams = parseWithParams(children);
+    List<WithParam> withParams = parseWithParams(children);
     return new CallTemplateNode(name, withParams);
   }
   
@@ -1160,7 +1150,7 @@
     NamedNodeMap attrs = node.getAttributes();
     String s = getRequiredAttribute(attrs, "select", node);
     Node children = node.getFirstChild();
-    List sortKeys = parseSortKeys(children);
+    List<SortKey> sortKeys = parseSortKeys(children);
     Expr select = (Expr) xpath.compile(s);
     ForEachNode ret = new ForEachNode(select, sortKeys);
     ret.children = parse(children);
@@ -1622,10 +1612,10 @@
     return ret;
   }
 
-  final List parseSortKeys(Node node)
+  final List<SortKey> parseSortKeys(Node node)
     throws TransformerConfigurationException, XPathExpressionException
   {
-    List ret = new LinkedList();
+    List<SortKey> ret = new LinkedList<SortKey>();
     while (node != null)
       {
         String namespaceUri = node.getNamespaceURI();
@@ -1657,10 +1647,10 @@
     return ret.isEmpty() ? null : ret;
   }
 
-  final List parseWithParams(Node node)
+  final List<WithParam> parseWithParams(Node node)
     throws TransformerConfigurationException, XPathExpressionException
   {
-    List ret = new LinkedList();
+    List<WithParam> ret = new LinkedList<WithParam>();
     while (node != null)
       {
         String namespaceUri = node.getNamespaceURI();
@@ -1699,7 +1689,7 @@
    * exclude-result-prefixes.
    */
   final void addNamespaceNodes(Node source, Node target, Document doc,
-                               Collection elementExcludeResultPrefixes)
+                               Collection<String> elementExcludeResultPrefixes)
   {
     NamedNodeMap attrs = source.getAttributes();
     if (attrs != null)
Index: gnu/xml/transform/UnparsedEntityUriFunction.java
===================================================================
RCS file: 
/sources/classpath/classpath/gnu/xml/transform/UnparsedEntityUriFunction.java,v
retrieving revision 1.3
diff -u -u -r1.3 UnparsedEntityUriFunction.java
--- gnu/xml/transform/UnparsedEntityUriFunction.java    9 Jul 2005 20:38:35 
-0000       1.3
+++ gnu/xml/transform/UnparsedEntityUriFunction.java    22 Jun 2008 23:43:03 
-0000
@@ -61,27 +61,28 @@
   implements XPathFunction, Function
 {
 
-  List args;
+  List<Expr> args;
 
   public Object evaluate(List args)
     throws XPathFunctionException
   {
     // Useless...
-    return Collections.EMPTY_SET;
+    return Collections.emptySet();
   }
 
-  public void setArguments(List args)
+  public void setArguments(List<Expr> args)
   {
     this.args = args;
   }
 
+  @Override
   public Object evaluate(Node context, int pos, int len)
   {
     int arity = args.size();
-    List values = new ArrayList(arity);
+    List<Object> values = new ArrayList<Object>(arity);
     for (int i = 0; i < arity; i++)
       {
-        Expr arg = (Expr) args.get(i);
+        Expr arg = args.get(i);
         values.add(arg.evaluate(context, pos, len));
       }
     String name = _string(context, values.get(0));
@@ -107,10 +108,10 @@
   {
     UnparsedEntityUriFunction f = new UnparsedEntityUriFunction();
     int len = args.size();
-    List args2 = new ArrayList(len);
+    List<Expr> args2 = new ArrayList<Expr>(len);
     for (int i = 0; i < len; i++)
       {
-        args2.add(((Expr) args.get(i)).clone(context));
+        args2.add(args.get(i).clone(context));
       }
     f.setArguments(args2);
     return f;
@@ -118,9 +119,9 @@
 
   public boolean references(QName var)
   {
-    for (Iterator i = args.iterator(); i.hasNext(); )
+    for (Iterator<Expr> i = args.iterator(); i.hasNext(); )
       {
-        if (((Expr) i.next()).references(var))
+        if (i.next().references(var))
           {
             return true;
           }
Index: gnu/xml/transform/ValueOfNode.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/xml/transform/ValueOfNode.java,v
retrieving revision 1.8
diff -u -u -r1.8 ValueOfNode.java
--- gnu/xml/transform/ValueOfNode.java  17 Mar 2008 01:28:15 -0000      1.8
+++ gnu/xml/transform/ValueOfNode.java  22 Jun 2008 23:43:03 -0000
@@ -76,7 +76,8 @@
       ret.next = next.clone(stylesheet);
     return ret;
   }
-
+  
+  @Override
   void doApply(Stylesheet stylesheet, QName mode,
                Node context, int pos, int len,
                Node parent, Node nextSibling)
@@ -87,9 +88,8 @@
     if (ret instanceof Collection)
       {
         CPStringBuilder buf = new CPStringBuilder();
-        for (Iterator i = ((Collection) ret).iterator(); i.hasNext(); )
+        for (Node node : ((Collection<Node>) ret))
           {
-            Node node = (Node) i.next();
             buf.append(Expr.stringValue(node));
           }
         value = buf.toString();
Index: gnu/xml/transform/XSLComparator.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/xml/transform/XSLComparator.java,v
retrieving revision 1.2
diff -u -u -r1.2 XSLComparator.java
--- gnu/xml/transform/XSLComparator.java        2 Jul 2005 20:32:16 -0000       
1.2
+++ gnu/xml/transform/XSLComparator.java        22 Jun 2008 23:43:03 -0000
@@ -51,72 +51,66 @@
  * @author <a href='mailto:[EMAIL PROTECTED]'>Chris Burdess</a>
  */
 class XSLComparator
-  implements Comparator
+  implements Comparator<Node>
 {
 
-  final List sortKeys;
+  final List<SortKey> sortKeys;
 
-  XSLComparator(List sortKeys)
+  XSLComparator(List<SortKey> sortKeys)
   {
     this.sortKeys = sortKeys;
   }
 
-  public int compare(Object o1, Object o2)
+  public int compare(Node n1, Node n2)
   {
-    if (o1 instanceof Node && o2 instanceof Node)
+    for (SortKey sortKey : sortKeys)
       {
-        Node n1 = (Node) o1;
-        Node n2 = (Node) o2;
-        for (Iterator i = sortKeys.iterator(); i.hasNext(); )
-          {
-            SortKey sortKey = (SortKey) i.next();
-            String k1 = sortKey.key(n1);
-            String k2 = sortKey.key(n2);
-            if ("text".equals(sortKey.dataType))
-              {
-                Locale locale = (sortKey.lang == null) ? Locale.getDefault() :
-                  new Locale(sortKey.lang);
-                Collator collator = Collator.getInstance(locale);
-                int d = collator.compare(k1, k2);
-                if (d != 0)
-                  {
-                    switch (sortKey.caseOrder)
-                      {
-                      case SortKey.UPPER_FIRST:
-                        // TODO
-                        break;
-                      case SortKey.LOWER_FIRST:
-                        // TODO
-                        break;
-                      }
-                    if (sortKey.descending)
-                      {
-                        d = -d;
-                      }
-                    return d;
-                  }
-              }
-            else if ("number".equals(sortKey.dataType))
-              {
-                double kn1 = Expr._number(n1, k1);
-                double kn2 = Expr._number(n2, k2);
-                int d;
-                if (Double.isNaN(kn1) || Double.isInfinite(kn2))
-                  {
-                    d = -1;
-                  }
-                else if (Double.isNaN(kn2) || Double.isInfinite(kn1))
-                  {
-                    d = 1;
-                  }
-                else
-                  {
-                    // conversion to int may give 0 for small numbers
-                    d = (kn1 > kn2) ? 1 : (kn1 < kn2) ? -1 : 0;
-                  }
-                return (sortKey.descending) ? -d : d;
-              }
-          }
+       String k1 = sortKey.key(n1);
+       String k2 = sortKey.key(n2);
+       if ("text".equals(sortKey.dataType))
+         {
+           Locale locale = (sortKey.lang == null) ? Locale.getDefault() :
+             new Locale(sortKey.lang);
+           Collator collator = Collator.getInstance(locale);
+           int d = collator.compare(k1, k2);
+           if (d != 0)
+             {
+               switch (sortKey.caseOrder)
+                 {
+                 case SortKey.UPPER_FIRST:
+                   // TODO
+                   break;
+                 case SortKey.LOWER_FIRST:
+                   // TODO
+                   break;
+                 }
+               if (sortKey.descending)
+                 {
+                   d = -d;
+                 }
+               return d;
+             }
+         }
+       else if ("number".equals(sortKey.dataType))
+         {
+           double kn1 = Expr._number(n1, k1);
+           double kn2 = Expr._number(n2, k2);
+           int d;
+           if (Double.isNaN(kn1) || Double.isInfinite(kn2))
+             {
+               d = -1;
+             }
+           else if (Double.isNaN(kn2) || Double.isInfinite(kn1))
+             {
+               d = 1;
+             }
+           else
+             {
+               // conversion to int may give 0 for small numbers
+               d = (kn1 > kn2) ? 1 : (kn1 < kn2) ? -1 : 0;
+             }
+           return (sortKey.descending) ? -d : d;
+         }
       }
     return 0;
   }
Index: gnu/xml/transform/XSLURIResolver.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/xml/transform/XSLURIResolver.java,v
retrieving revision 1.6
diff -u -u -r1.6 XSLURIResolver.java
--- gnu/xml/transform/XSLURIResolver.java       7 Feb 2007 10:08:56 -0000       
1.6
+++ gnu/xml/transform/XSLURIResolver.java       22 Jun 2008 23:43:03 -0000
@@ -75,8 +75,8 @@
   implements URIResolver
 {
 
-  Map lastModifiedCache = new HashMap();
-  Map nodeCache = new HashMap();
+  final Map<String,Long> lastModifiedCache = new HashMap<String,Long>();
+  final Map<String,Node> nodeCache = new HashMap<String,Node>();
   DocumentBuilder builder;
   URIResolver userResolver;
   ErrorListener userListener;
@@ -157,10 +157,10 @@
             if (url != null)
               {
                 systemId = url.toString();
-                node = (Node) nodeCache.get(systemId);
+                node = nodeCache.get(systemId);
                 // Is the resource up to date?
                 URLConnection conn = url.openConnection();
-                Long llm = (Long) lastModifiedCache.get(systemId);
+                Long llm = lastModifiedCache.get(systemId);
                 if (llm != null)
                   {
                     lastLastModified = llm.longValue();

Reply via email to