[Jython-checkins] jython: Filled in some generic type-info in PyUnicode and PyList.

stefan.richthofer jython-checkins at python.org
Wed Jan 11 18:14:53 EST 2017


https://hg.python.org/jython/rev/a463c085baf4
changeset:   8004:a463c085baf4
user:        Stefan Richthofer <stefan.richthofer at gmx.de>
date:        Thu Jan 12 00:14:45 2017 +0100
summary:
  Filled in some generic type-info in PyUnicode and PyList.

files:
  src/org/python/core/PyList.java    |  34 ++++++++++-------
  src/org/python/core/PyUnicode.java |  30 +++++++-------
  2 files changed, 34 insertions(+), 30 deletions(-)


diff --git a/src/org/python/core/PyList.java b/src/org/python/core/PyList.java
--- a/src/org/python/core/PyList.java
+++ b/src/org/python/core/PyList.java
@@ -106,7 +106,7 @@
     // refactor and put in Py presumably;
     // presumably we can consume an arbitrary iterable too!
     private static void addCollection(List<PyObject> list, Collection<Object> seq) {
-        Map<Long, PyObject> seen = new HashMap();
+        Map<Long, PyObject> seen = new HashMap<>();
         for (Object item : seq) {
             long id = Py.java_obj_id(item);
             PyObject seen_obj = seen.get(id);
@@ -118,6 +118,7 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
     @ExposedNew
     @ExposedMethod(doc = BuiltinDocs.list___init___doc)
     final void list___init__(PyObject[] args, String[] kwds) {
@@ -141,7 +142,7 @@
             list.addAll(((PyTuple) seq).getList());
         } else if (seq.getClass().isAssignableFrom(Collection.class)) {
             System.err.println("Adding from collection");
-            addCollection(list, (Collection)seq);
+            addCollection(list, (Collection<Object>) seq);
         } else {
             for (PyObject item : seq.asIterable()) {
                 append(item);
@@ -169,6 +170,7 @@
         remove(start, stop);
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     protected void setslice(int start, int stop, int step, PyObject value) {
         if (stop < start) {
@@ -182,11 +184,11 @@
         } else if (value instanceof PySequence) {
             setsliceIterator(start, stop, step, value.asIterable().iterator());
         } else if (value instanceof List) {
-                setsliceList(start, stop, step, (List)value);
+                setsliceList(start, stop, step, (List<Object>)value);
         } else {
             Object valueList = value.__tojava__(List.class);
             if (valueList != null && valueList != Py.NoConversion) {
-                setsliceList(start, stop, step, (List)valueList);
+                setsliceList(start, stop, step, (List<Object>)valueList);
             } else {
                 value = new PyList(value);
                 setsliceIterator(start, stop, step, value.asIterable().iterator());
@@ -194,7 +196,7 @@
         }
     }
 
-    final private void setsliceList(int start, int stop, int step, List value) {
+    final private void setsliceList(int start, int stop, int step, List<Object> value) {
         if (step == 1) {
             list.subList(start, stop).clear();
             int n = value.size();
@@ -333,7 +335,7 @@
 
         int newSize = size * count;
         if (list instanceof ArrayList) {
-            ((ArrayList) list).ensureCapacity(newSize);
+            ((ArrayList<PyObject>) list).ensureCapacity(newSize);
         }
         List<PyObject> oldList = new ArrayList<PyObject>(list);
         for (int i = 1; i < count; i++) {
@@ -379,8 +381,8 @@
         PyList sum = null;
         if (o instanceof PySequenceList && !(o instanceof PyTuple)) {
             if (o instanceof PyList) {
-                List oList = ((PyList) o).list;
-                List newList = new ArrayList(list.size() + oList.size());
+                List<PyObject> oList = ((PyList) o).list;
+                ArrayList<PyObject> newList = new ArrayList<>(list.size() + oList.size());
                 newList.addAll(list);
                 newList.addAll(oList);
                 sum = fromList(newList);
@@ -389,11 +391,12 @@
             // also support adding java lists (but not PyTuple!)
             Object oList = o.__tojava__(List.class);
             if (oList != Py.NoConversion && oList != null) {
-                List otherList = (List) oList;
+                @SuppressWarnings("unchecked")
+                List<PyObject> otherList = (List<PyObject>) oList;
                 sum = new PyList();
                 sum.list_extend(this);
-                for (Iterator i = otherList.iterator(); i.hasNext();) {
-                    sum.add(i.next());
+                for (PyObject ob: otherList) {
+                    sum.add(ob);
                 }
             }
         }
@@ -406,6 +409,7 @@
     }
 
     //XXX: needs __doc__
+    @SuppressWarnings("unchecked")
     @ExposedMethod(type = MethodType.BINARY)
     final synchronized PyObject list___radd__(PyObject o) {
         // Support adding java.util.List, but prevent adding PyTuple.
@@ -417,7 +421,7 @@
         Object oList = o.__tojava__(List.class);
         if (oList != Py.NoConversion && oList != null) {
             sum = new PyList();
-            sum.addAll((List) oList);
+            sum.addAll((List<PyObject>) oList);
             sum.extend(this);
         }
         return sum;
@@ -958,7 +962,7 @@
             Collections.reverse(decorated);
         }
         if (list instanceof ArrayList) {
-            ((ArrayList) list).ensureCapacity(size);
+            ((ArrayList<PyObject>) list).ensureCapacity(size);
         }
         for (KV kv : decorated) {
             list.add(kv.value);
@@ -1063,8 +1067,8 @@
     }
 
     @Override
-    public Iterator iterator() {
-        return new Iterator() {
+    public Iterator<Object> iterator() {
+        return new Iterator<Object>() {
 
             private final Iterator<PyObject> iter = list.iterator();
 
diff --git a/src/org/python/core/PyUnicode.java b/src/org/python/core/PyUnicode.java
--- a/src/org/python/core/PyUnicode.java
+++ b/src/org/python/core/PyUnicode.java
@@ -24,7 +24,7 @@
  */
 @Untraversable
 @ExposedType(name = "unicode", base = PyBaseString.class, doc = BuiltinDocs.unicode_doc)
-public class PyUnicode extends PyString implements Iterable {
+public class PyUnicode extends PyString implements Iterable<Integer> {
 
     /**
      * Nearly every significant method comes in two versions: one applicable when the string
@@ -822,7 +822,7 @@
         }
     }
 
-    private static class SteppedIterator<T> implements Iterator {
+    private static class SteppedIterator<T> implements Iterator<T> {
 
         private final Iterator<T> iter;
         private final int step;
@@ -885,14 +885,14 @@
     public Iterator<Integer> newSubsequenceIterator(int start, int stop, int step) {
         if (isBasicPlane()) {
             if (step < 0) {
-                return new SteppedIterator(step * -1, new ReversedIterator(
+                return new SteppedIterator<Integer>(step * -1, new ReversedIterator<Integer>(
                         new SubsequenceIteratorBasic(stop + 1, start + 1, 1)));
             } else {
                 return new SubsequenceIteratorBasic(start, stop, step);
             }
         } else {
             if (step < 0) {
-                return new SteppedIterator(step * -1, new ReversedIterator(
+                return new SteppedIterator<Integer>(step * -1, new ReversedIterator<Integer>(
                         new SubsequenceIteratorImpl(stop + 1, start + 1, 1)));
             } else {
                 return new SubsequenceIteratorImpl(start, stop, step);
@@ -1026,7 +1026,7 @@
         return new PyUnicode(buffer);
     }
 
-    private static class StripIterator implements Iterator {
+    private static class StripIterator implements Iterator<Integer> {
 
         private final Iterator<Integer> iter;
         private int lookahead = -1;
@@ -1062,7 +1062,7 @@
         }
 
         @Override
-        public Object next() {
+        public Integer next() {
             int old = lookahead;
             if (iter.hasNext()) {
                 lookahead = iter.next();
@@ -1121,7 +1121,7 @@
         }
 
         // Not basic plane: have to do real Unicode
-        return new PyUnicode(new ReversedIterator(new StripIterator(sep, new ReversedIterator(
+        return new PyUnicode(new ReversedIterator<Integer>(new StripIterator(sep, new ReversedIterator<>(
                 new StripIterator(sep, newSubsequenceIterator())))));
     }
 
@@ -1162,8 +1162,8 @@
         }
 
         // Not basic plane: have to do real Unicode
-        return new PyUnicode(new ReversedIterator(new StripIterator(sep, new ReversedIterator(
-                newSubsequenceIterator()))));
+        return new PyUnicode(new ReversedIterator<Integer>(new StripIterator(sep,
+                new ReversedIterator<>(newSubsequenceIterator()))));
     }
 
     @Override
@@ -1176,7 +1176,7 @@
         return unicodePartition(coerceToUnicode(sep));
     }
 
-    private abstract class SplitIterator implements Iterator {
+    private abstract class SplitIterator implements Iterator<PyUnicode> {
 
         protected final int maxsplit;
         protected final Iterator<Integer> iter = newSubsequenceIterator();
@@ -1254,7 +1254,7 @@
         }
     }
 
-    private static class PeekIterator<T> implements Iterator {
+    private static class PeekIterator<T> implements Iterator<T> {
 
         private T lookahead = null;
         private final Iterator<T> iter;
@@ -1286,7 +1286,7 @@
         }
     }
 
-    private static class ReversedIterator<T> implements Iterator {
+    private static class ReversedIterator<T> implements Iterator<T> {
 
         private final List<T> reversed = Generic.list();
         private final Iterator<T> iter;
@@ -1315,9 +1315,9 @@
         }
     }
 
-    private class LineSplitIterator implements Iterator {
+    private class LineSplitIterator implements Iterator<PyObject> {
 
-        private final PeekIterator<Integer> iter = new PeekIterator(newSubsequenceIterator());
+        private final PeekIterator<Integer> iter = new PeekIterator<>(newSubsequenceIterator());
         private final boolean keepends;
 
         LineSplitIterator(boolean keepends) {
@@ -1330,7 +1330,7 @@
         }
 
         @Override
-        public Object next() {
+        public PyObject next() {
             StringBuilder buffer = new StringBuilder();
             while (iter.hasNext()) {
                 int codepoint = iter.next();

-- 
Repository URL: https://hg.python.org/jython


More information about the Jython-checkins mailing list