From 8a05d6053211549d15ba469a18b497a3f8ec2b8c Mon Sep 17 00:00:00 2001
From: Sergey Bylokhov <serb@openjdk.org>
Date: Wed, 6 Jan 2021 10:07:03 +0000
Subject: [PATCH] 8259042: Inconsistent use of general primitives loops

Reviewed-by: prr
---
 .../share/classes/sun/java2d/loops/Blit.java  | 10 ++---
 .../classes/sun/java2d/loops/BlitBg.java      | 19 ++++-----
 .../sun/java2d/loops/DrawGlyphList.java       | 13 +++---
 .../sun/java2d/loops/DrawGlyphListAA.java     | 13 +++---
 .../sun/java2d/loops/DrawGlyphListLCD.java    | 22 +---------
 .../classes/sun/java2d/loops/DrawLine.java    | 12 +-----
 .../sun/java2d/loops/DrawParallelogram.java   | 12 +-----
 .../classes/sun/java2d/loops/DrawPath.java    | 14 ++-----
 .../sun/java2d/loops/DrawPolygons.java        | 12 +-----
 .../classes/sun/java2d/loops/DrawRect.java    | 12 +-----
 .../sun/java2d/loops/FillParallelogram.java   | 12 +-----
 .../classes/sun/java2d/loops/FillPath.java    | 14 ++-----
 .../classes/sun/java2d/loops/FillRect.java    |  9 ++--
 .../classes/sun/java2d/loops/FillSpans.java   | 14 +------
 .../sun/java2d/loops/GraphicsPrimitive.java   | 42 +++++++++++--------
 .../java2d/loops/GraphicsPrimitiveMgr.java    |  6 +++
 .../java2d/loops/GraphicsPrimitiveProxy.java  |  9 +---
 .../classes/sun/java2d/loops/MaskBlit.java    | 10 ++---
 .../classes/sun/java2d/loops/MaskFill.java    | 10 ++---
 .../classes/sun/java2d/loops/ScaledBlit.java  | 21 +---------
 .../sun/java2d/loops/TransformBlit.java       | 23 +---------
 .../sun/java2d/loops/TransformHelper.java     | 11 +----
 22 files changed, 93 insertions(+), 227 deletions(-)

diff --git a/src/java.desktop/share/classes/sun/java2d/loops/Blit.java b/src/java.desktop/share/classes/sun/java2d/loops/Blit.java
index 516c162f303..0d3a4ac4f24 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/Blit.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/Blit.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@ import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
 import java.lang.ref.WeakReference;
-import sun.java2d.loops.GraphicsPrimitive;
+
 import sun.java2d.SurfaceData;
 import sun.java2d.pipe.Region;
 import sun.java2d.pipe.SpanIterator;
@@ -114,9 +114,9 @@ public class Blit extends GraphicsPrimitive
         GraphicsPrimitiveMgr.registerGeneral(new Blit(null, null, null));
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype)
     {
         /*
         System.out.println("Constructing general blit for:");
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/BlitBg.java b/src/java.desktop/share/classes/sun/java2d/loops/BlitBg.java
index 427850aef58..ffe5901a57d 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/BlitBg.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/BlitBg.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,18 +25,17 @@
 
 package sun.java2d.loops;
 
-import java.awt.Font;
+import java.awt.AlphaComposite;
 import java.awt.Color;
 import java.awt.Composite;
-import java.awt.AlphaComposite;
-import java.awt.Transparency;
+import java.awt.Font;
+import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
 import java.awt.image.WritableRaster;
-import java.awt.image.BufferedImage;
+
 import sun.awt.image.BufImgSurfaceData;
-import sun.java2d.loops.GraphicsPrimitive;
-import sun.java2d.SurfaceData;
 import sun.java2d.SunGraphics2D;
+import sun.java2d.SurfaceData;
 import sun.java2d.pipe.Region;
 
 /**
@@ -118,9 +117,9 @@ public class BlitBg extends GraphicsPrimitive
         GraphicsPrimitiveMgr.registerGeneral(new BlitBg(null, null, null));
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype)
     {
         /*
         System.out.println("Constructing general blitbg for:");
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphList.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphList.java
index e711b549b1f..42a1c947c3a 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphList.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphList.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,11 +25,10 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
-import sun.java2d.pipe.Region;
+import sun.font.GlyphList;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
-import sun.font.GlyphList;
+import sun.java2d.pipe.Region;
 
 /**
  *   DrawGlyphList - loops for SolidTextRenderer pipe.
@@ -77,9 +76,9 @@ public class DrawGlyphList extends GraphicsPrimitive {
                                 new DrawGlyphList(null, null, null));
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype) {
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype) {
         return new General(srctype, comptype, dsttype);
     }
 
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListAA.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListAA.java
index ee22d1e4583..9aa2fcbb266 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListAA.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListAA.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,11 +25,10 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
-import sun.java2d.pipe.Region;
+import sun.font.GlyphList;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
-import sun.font.GlyphList;
+import sun.java2d.pipe.Region;
 
 /**
  *   DrawGlyphListAA - loops for AATextRenderer pipe
@@ -75,9 +74,9 @@ public class DrawGlyphListAA extends GraphicsPrimitive {
                                    new DrawGlyphListAA(null, null, null));
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype) {
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype) {
         return new General(srctype, comptype, dsttype);
     }
 
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListLCD.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListLCD.java
index 89ed93ad59b..ac4dd7957ca 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListLCD.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawGlyphListLCD.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,10 +25,9 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
+import sun.font.GlyphList;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
-import sun.font.GlyphList;
 
 /**
  *   DrawGlyphListLCD- loops for LCDTextRenderer pipe
@@ -71,23 +70,6 @@ public class DrawGlyphListLCD extends GraphicsPrimitive {
     public native void DrawGlyphListLCD(SunGraphics2D sg2d, SurfaceData dest,
                                          GlyphList srcData);
 
-    static {
-        GraphicsPrimitiveMgr.registerGeneral(
-                                   new DrawGlyphListLCD(null, null, null));
-    }
-
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype) {
-        /* Do not return a General loop. SunGraphics2D determines whether
-         * to use LCD or standard AA text based on whether there is an
-         * installed loop.
-         * This can be uncommented once there is a General loop which can
-         * handle one byte per colour component masks properly.
-         */
-        return null;
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceDrawGlyphListLCD(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawLine.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawLine.java
index 684f2422a71..8a47b36936d 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawLine.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawLine.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 
@@ -74,15 +73,6 @@ public class DrawLine extends GraphicsPrimitive
     public native void DrawLine(SunGraphics2D sg2d, SurfaceData dest,
                                 int x1, int y1, int x2, int y2);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        // REMIND: use FillSpans or converter object?
-        throw new InternalError("DrawLine not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceDrawLine(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawParallelogram.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawParallelogram.java
index 6d16e067943..ca5899a0695 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawParallelogram.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawParallelogram.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 
@@ -82,15 +81,6 @@ public class DrawParallelogram extends GraphicsPrimitive
                                          double dx2, double dy2,
                                          double lw1, double lw2);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        // REMIND: iterate with a FillRect primitive?
-        throw new InternalError("DrawParallelogram not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceDrawParallelogram(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawPath.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawPath.java
index 571a01a91f8..192ea9277e6 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawPath.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawPath.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,10 +25,10 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
+import java.awt.geom.Path2D;
+
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
-import java.awt.geom.Path2D;
 
 /**
  *   DrawPath
@@ -77,14 +77,6 @@ public class DrawPath extends GraphicsPrimitive {
                                 int transX, int transY,
                                 Path2D.Float p2df);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        throw new InternalError("DrawPath not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceDrawPath(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawPolygons.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawPolygons.java
index 54e12ed9a4a..577637c3dd2 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawPolygons.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawPolygons.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 
@@ -78,15 +77,6 @@ public class DrawPolygons extends GraphicsPrimitive
                                     int transX, int transY,
                                     boolean close);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        // REMIND: use FillSpans or converter object?
-        throw new InternalError("DrawPolygons not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceDrawPolygons(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/DrawRect.java b/src/java.desktop/share/classes/sun/java2d/loops/DrawRect.java
index 8dcf16edf06..67d275607df 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/DrawRect.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/DrawRect.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 
@@ -75,15 +74,6 @@ public class DrawRect extends GraphicsPrimitive
     public native void DrawRect(SunGraphics2D sg2d, SurfaceData dest,
                                 int x1, int y1, int w, int h);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        // REMIND: use FillSpans or converter object?
-        throw new InternalError("DrawRect not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceDrawRect(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/FillParallelogram.java b/src/java.desktop/share/classes/sun/java2d/loops/FillParallelogram.java
index b895c0b8737..a216fa40356 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/FillParallelogram.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/FillParallelogram.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 
@@ -79,15 +78,6 @@ public class FillParallelogram extends GraphicsPrimitive
                                          double dx1, double dy1,
                                          double dx2, double dy2);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        // REMIND: iterate with a FillRect primitive?
-        throw new InternalError("FillParallelogram not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceFillParallelogram(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/FillPath.java b/src/java.desktop/share/classes/sun/java2d/loops/FillPath.java
index 524240ed4d1..93dea16de59 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/FillPath.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/FillPath.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,10 +25,10 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
+import java.awt.geom.Path2D;
+
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
-import java.awt.geom.Path2D;
 
 /**
  *   FillPath
@@ -77,14 +77,6 @@ public class FillPath extends GraphicsPrimitive {
                                 int transX, int transY,
                                 Path2D.Float p2df);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        throw new InternalError("FillPath not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceFillPath(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/FillRect.java b/src/java.desktop/share/classes/sun/java2d/loops/FillRect.java
index 2a12dda94e9..e12a05da0ab 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/FillRect.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/FillRect.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,6 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 
@@ -79,9 +78,9 @@ public class FillRect extends GraphicsPrimitive
         GraphicsPrimitiveMgr.registerGeneral(new FillRect(null, null, null));
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype)
     {
         return new General(srctype, comptype, dsttype);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/FillSpans.java b/src/java.desktop/share/classes/sun/java2d/loops/FillSpans.java
index cb218f954f5..07686384204 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/FillSpans.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/FillSpans.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,10 +30,9 @@
 
 package sun.java2d.loops;
 
-import sun.java2d.loops.GraphicsPrimitive;
-import sun.java2d.pipe.SpanIterator;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
+import sun.java2d.pipe.SpanIterator;
 
 /**
  * FillSpans
@@ -82,15 +81,6 @@ public class FillSpans extends GraphicsPrimitive
         FillSpans(sg2d, dest, sg2d.pixel, si.getNativeIterator(), si);
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        // REMIND: iterate with a FillRect primitive?
-        throw new InternalError("FillSpans not implemented for "+
-                                srctype+" with "+comptype);
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceFillSpans(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java b/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java
index a71978a10ac..de3ffc21b22 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,25 +29,24 @@
 
 package sun.java2d.loops;
 
-import java.awt.image.BufferedImage;
 import java.awt.AlphaComposite;
 import java.awt.Rectangle;
+import java.awt.image.BufferedImage;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.lang.reflect.Field;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.StringTokenizer;
+
 import sun.awt.image.BufImgSurfaceData;
 import sun.awt.util.ThreadGroupUtils;
 import sun.java2d.SurfaceData;
 import sun.java2d.pipe.Region;
-import java.lang.reflect.Field;
-import java.util.StringTokenizer;
-import java.util.Iterator;
-import java.util.HashMap;
-import java.util.Map;
-import java.io.PrintStream;
-import java.io.OutputStream;
-import java.io.FileOutputStream;
-import java.io.FileNotFoundException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
 import sun.security.action.GetPropertyAction;
 
 /**
@@ -312,9 +311,18 @@ public abstract class GraphicsPrimitive {
                 destType.equals(other.destType));
     }
 
-    public abstract GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                                    CompositeType comptype,
-                                                    SurfaceType dsttype);
+    /**
+     * Produces specific primitive loop if the current object is registered as a
+     * general loop, otherwise the {@code InternalError} is thrown.
+     *
+     * @see GraphicsPrimitiveMgr#registerGeneral
+     */
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype) {
+        throw new InternalError("%s not implemented for %s, comp: %s, dst: %s".
+                formatted(getClass().getName(), srctype, comptype, dsttype));
+    }
 
     public abstract GraphicsPrimitive traceWrap();
 
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveMgr.java b/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveMgr.java
index 66a8e7905be..dadfbeb540c 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveMgr.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveMgr.java
@@ -121,6 +121,12 @@ public final class GraphicsPrimitiveMgr {
         primitives = temp;
     }
 
+    /**
+     * Registers the general loop which will be used to produce specific
+     * primitives by the {@link GraphicsPrimitive#makePrimitive} function.
+     *
+     * @param gen the graphics primitive to be registered as the general loop
+     */
     public static synchronized void registerGeneral(GraphicsPrimitive gen) {
         if (generalPrimitives == null) {
             generalPrimitives = new GraphicsPrimitive[] {gen};
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveProxy.java b/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveProxy.java
index 1644b8c3be7..cf416f74775 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveProxy.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitiveProxy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -65,13 +65,6 @@ public class GraphicsPrimitiveProxy extends GraphicsPrimitive {
         this.relativeClassName = relativeClassName;
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype) {
-        // This should never happen.
-        throw new InternalError("makePrimitive called on a Proxy!");
-    }
-
     //
     // Come up with the real instance.  Called from
     // GraphicsPrimitiveMgr.locate()
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/MaskBlit.java b/src/java.desktop/share/classes/sun/java2d/loops/MaskBlit.java
index 99fbdf5eadc..414e800dd1b 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/MaskBlit.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/MaskBlit.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@ package sun.java2d.loops;
 
 import java.awt.Composite;
 import java.lang.ref.WeakReference;
-import sun.java2d.loops.GraphicsPrimitive;
+
 import sun.java2d.SurfaceData;
 import sun.java2d.pipe.Region;
 
@@ -112,9 +112,9 @@ public class MaskBlit extends GraphicsPrimitive
         GraphicsPrimitiveMgr.registerGeneral(new MaskBlit(null, null, null));
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype)
     {
         /*
         new Throwable().printStackTrace();
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/MaskFill.java b/src/java.desktop/share/classes/sun/java2d/loops/MaskFill.java
index 561fa9bff5b..108b235d585 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/MaskFill.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/MaskFill.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,8 @@ package sun.java2d.loops;
 
 import java.awt.Composite;
 import java.awt.image.BufferedImage;
+
 import sun.awt.image.BufImgSurfaceData;
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 import sun.java2d.pipe.Region;
@@ -144,9 +144,9 @@ public class MaskFill extends GraphicsPrimitive
         GraphicsPrimitiveMgr.registerGeneral(new MaskFill(null, null, null));
     }
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
+    protected GraphicsPrimitive makePrimitive(SurfaceType srctype,
+                                              CompositeType comptype,
+                                              SurfaceType dsttype)
     {
         if (SurfaceType.OpaqueColor.equals(srctype) ||
             SurfaceType.AnyColor.equals(srctype))
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/ScaledBlit.java b/src/java.desktop/share/classes/sun/java2d/loops/ScaledBlit.java
index 066b0a9b8f5..4717839e25d 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/ScaledBlit.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/ScaledBlit.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
 package sun.java2d.loops;
 
 import java.awt.Composite;
-import sun.java2d.loops.GraphicsPrimitive;
+
 import sun.java2d.SurfaceData;
 import sun.java2d.pipe.Region;
 
@@ -104,23 +104,6 @@ public class ScaledBlit extends GraphicsPrimitive
                              double dx1, double dy1,
                              double dx2, double dy2);
 
-    static {
-        GraphicsPrimitiveMgr.registerGeneral(new ScaledBlit(null, null, null));
-    }
-
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        /*
-        System.out.println("Constructing general blit for:");
-        System.out.println("src:  "+srctype);
-        System.out.println("comp: "+comptype);
-        System.out.println("dst:  "+dsttype);
-        */
-        return null;
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceScaledBlit(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/TransformBlit.java b/src/java.desktop/share/classes/sun/java2d/loops/TransformBlit.java
index 290596ff9ff..6b8ad98ad06 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/TransformBlit.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/TransformBlit.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,8 @@ package sun.java2d.loops;
 
 import java.awt.Composite;
 import java.awt.geom.AffineTransform;
+
 import sun.java2d.SurfaceData;
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.pipe.Region;
 
 /**
@@ -105,25 +105,6 @@ public class TransformBlit extends GraphicsPrimitive
                                  int srcx, int srcy, int dstx, int dsty,
                                  int width, int height);
 
-    // REMIND: do we have a general loop?
-    static {
-        GraphicsPrimitiveMgr.registerGeneral(new TransformBlit(null, null,
-                                                               null));
-    }
-
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        /*
-        System.out.println("Constructing general blit for:");
-        System.out.println("src:  "+srctype);
-        System.out.println("comp: "+comptype);
-        System.out.println("dst:  "+dsttype);
-        */
-        return null;
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceTransformBlit(this);
     }
diff --git a/src/java.desktop/share/classes/sun/java2d/loops/TransformHelper.java b/src/java.desktop/share/classes/sun/java2d/loops/TransformHelper.java
index e00ac6d43db..450a76f2417 100644
--- a/src/java.desktop/share/classes/sun/java2d/loops/TransformHelper.java
+++ b/src/java.desktop/share/classes/sun/java2d/loops/TransformHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,8 @@ package sun.java2d.loops;
 
 import java.awt.Composite;
 import java.awt.geom.AffineTransform;
+
 import sun.java2d.SurfaceData;
-import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.pipe.Region;
 
 /**
@@ -98,13 +98,6 @@ public class TransformHelper extends GraphicsPrimitive
                                  int dx1, int dy1, int dx2, int dy2,
                                  int[] edges, int dxoff, int dyoff);
 
-    public GraphicsPrimitive makePrimitive(SurfaceType srctype,
-                                           CompositeType comptype,
-                                           SurfaceType dsttype)
-    {
-        return null;
-    }
-
     public GraphicsPrimitive traceWrap() {
         return new TraceTransformHelper(this);
     }