Perhaps a simpler fix would be to return an empty Curve list there since you can't have an enclosed area with fewer than 2 edges (even if it is a curve, the segments are already broken up into monotonically increasing/decreasing sections so no single curve segment can double back on itself and enclose area without being broken up into at least 2 curve sections). Since these internal curve lists are considered read-only once they are calculated, a static empty curve list would work.

We know that we can only get here with 0 or 2+ edges anyway, so that case is simply the "fast empty list handler with a relaxed trigger condition", but even if we got here with 1 edge, an empty list is the correct result...

                        ...jim

On 4/7/14 1:46 PM, Henry Jen wrote:
Hi,

Please review the webrev cleans up raw and unchecked warnings in sun.awt,

http://cr.openjdk.java.net/~henryjen/jdk9/8039342/0/webrev/

The following changes in AreaOp::pruneEdges() is particular worth
attention, when numedges < 2, two different type are mixed up in the
past with use of rawtypes; However, I think it could only work if the
Vector is empty?

Cheers,
Henry


@@ -193,16 +193,20 @@
             }
             return 1;
         }
     };

-    private Vector pruneEdges(Vector edges) {
+    private Vector<Curve> pruneEdges(Vector<Edge> edges) {
         int numedges = edges.size();
         if (numedges < 2) {
-            return edges;
+            Vector<Curve> rt = new Vector<>();
+            for (Edge edge: edges) {
+                rt.add(edge.getCurve());
         }
-        Edge[] edgelist = (Edge[]) edges.toArray(new Edge[numedges]);
+            return rt;
+        }
+        Edge[] edgelist = edges.toArray(new Edge[numedges]);
         Arrays.sort(edgelist, YXTopComparator);
         if (false) {
             System.out.println("pruning: ");
             for (int i = 0; i < numedges; i++) {
                 System.out.println("edgelist["+i+"] = "+edgelist[i]);

Reply via email to