You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/04/17 21:41:57 UTC

[groovy] branch GROOVY-9800 created (now 8cccb38)

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a change to branch GROOVY-9800
in repository https://gitbox.apache.org/repos/asf/groovy.git.


      at 8cccb38  GROOVY-9800: ClassNode#toString includes generics of type arguments

This branch includes the following new commits:

     new 8cccb38  GROOVY-9800: ClassNode#toString includes generics of type arguments

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[groovy] 01/01: GROOVY-9800: ClassNode#toString includes generics of type arguments

Posted by em...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY-9800
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 8cccb389d91d94d93c4dd77660cc1fee4b3806af
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Apr 17 16:22:13 2021 -0500

    GROOVY-9800: ClassNode#toString includes generics of type arguments
---
 .../java/org/codehaus/groovy/ast/ClassNode.java    | 37 ++++-----------------
 src/test/groovy/bugs/Groovy6938.groovy             |  2 +-
 src/test/groovy/bugs/Groovy8310.groovy             |  4 +--
 src/test/groovy/bugs/Groovy8609Bug.groovy          | 18 +++++-----
 src/test/groovy/bugs/Groovy9338.groovy             |  4 +--
 .../stc/ArraysAndCollectionsSTCTest.groovy         | 34 +++++++++----------
 src/test/groovy/transform/stc/BugsSTCTest.groovy   |  2 +-
 .../stc/ClosureParamTypeInferenceSTCTest.groovy    |  2 +-
 .../transform/stc/ConstructorsSTCTest.groovy       |  2 +-
 .../stc/FieldsAndPropertiesSTCTest.groovy          |  6 ++--
 .../groovy/transform/stc/GenericsSTCTest.groovy    | 38 +++++++++++-----------
 src/test/groovy/transform/stc/LambdaTest.groovy    |  2 +-
 .../groovy/transform/stc/MethodCallsSTCTest.groovy |  4 +--
 .../groovy/transform/stc/STCAssignmentTest.groovy  |  2 +-
 .../groovy/ast/tools/GenericsUtilsTest.groovy      |  2 +-
 .../InheritConstructorsTransformTest.groovy        |  4 +--
 16 files changed, 70 insertions(+), 93 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/ClassNode.java b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
index 4ab7f62..017504e 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
@@ -49,7 +49,6 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import static java.util.Arrays.stream;
-import static java.util.stream.Collectors.joining;
 import static org.apache.groovy.ast.tools.MethodNodeUtils.getCodeAsBlock;
 import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
 import static org.objectweb.asm.Opcodes.ACC_ANNOTATION;
@@ -1208,7 +1207,7 @@ public class ClassNode extends AnnotatedNode {
         return toString(true);
     }
 
-    public String toString(boolean showRedirect) {
+    public String toString(final boolean showRedirect) {
         if (isArray()) {
             return getComponentType().toString(showRedirect) + "[]";
         }
@@ -1216,9 +1215,12 @@ public class ClassNode extends AnnotatedNode {
         StringBuilder ret = new StringBuilder(!placeholder ? getName() : getUnresolvedName());
         GenericsType[] genericsTypes = getGenericsTypes();
         if (!placeholder && genericsTypes != null && genericsTypes.length > 0) {
-            ret.append(" <");
-            ret.append(stream(genericsTypes).map(this::genericTypeAsString).collect(joining(", ")));
-            ret.append(">");
+            ret.append('<');
+            for (int i = 0, n = genericsTypes.length; i < n; i += 1) {
+                if (i != 0) ret.append(", ");
+                ret.append(genericsTypes[i]);
+            }
+            ret.append('>');
         }
         if (showRedirect && redirect != null) {
             ret.append(" -> ").append(redirect.toString());
@@ -1227,31 +1229,6 @@ public class ClassNode extends AnnotatedNode {
     }
 
     /**
-     * Avoids a recursive definition of toString. The default {@code toString}
-     * in {@link GenericsType} calls {@code ClassNode.toString()}, which would
-     * call {@code GenericsType.toString()} without this method.
-     */
-    private String genericTypeAsString(GenericsType genericsType) {
-        String name = genericsType.getName();
-        if (genericsType.getUpperBounds() != null) {
-            return name + " extends " + stream(genericsType.getUpperBounds())
-                        .map(this::toStringTerminal).collect(joining(" & "));
-        } else if (genericsType.getLowerBound() != null) {
-            return name + " super " + toStringTerminal(genericsType.getLowerBound());
-        } else {
-            return name;
-        }
-    }
-
-    private String toStringTerminal(ClassNode classNode) {
-        if (classNode.equals(this)) {
-            return classNode.getName();
-        } else {
-            return classNode.toString(false);
-        }
-    }
-
-    /**
      * Determines if the type has a possibly-matching instance method with the given name and arguments.
      *
      * @param name      the name of the method of interest
diff --git a/src/test/groovy/bugs/Groovy6938.groovy b/src/test/groovy/bugs/Groovy6938.groovy
index ae4f9b6..de928c5 100644
--- a/src/test/groovy/bugs/Groovy6938.groovy
+++ b/src/test/groovy/bugs/Groovy6938.groovy
@@ -55,7 +55,7 @@ final class Groovy6938 {
                             assert expr.objectExpression.text == 'super'
 
                             def type = expr.objectExpression.getNodeMetaData(INFERRED_TYPE)
-                            assert type.toString(false) == 'J <Integer>' // was "J<T>"
+                            assert type.toString(false) == 'J<java.lang.Integer>' // was "J<T>"
 
                             type = node.leftExpression.getNodeMetaData(INFERRED_TYPE)
                             assert type.toString(false) == 'java.lang.Integer'
diff --git a/src/test/groovy/bugs/Groovy8310.groovy b/src/test/groovy/bugs/Groovy8310.groovy
index 838566f..95d1c96 100644
--- a/src/test/groovy/bugs/Groovy8310.groovy
+++ b/src/test/groovy/bugs/Groovy8310.groovy
@@ -42,7 +42,7 @@ final class Groovy8310 {
             }
         '''
 
-        assert err =~ /Cannot find matching method \w+#bar\(groovy.lang.Closure <java.util.List>\)/
+        assert err =~ /Cannot find matching method \w+#bar\(groovy.lang.Closure<java.util.List<java.lang.Integer>>\)/
     }
 
     @Test
@@ -60,7 +60,7 @@ final class Groovy8310 {
             }
         '''
 
-        assert err =~ /Cannot find matching method \w+#bar\(groovy.lang.Closure <java.util.List>\)/
+        assert err =~ /Cannot find matching method \w+#bar\(groovy.lang.Closure<java.util.List<java.lang.Integer>>\)/
     }
 
     @Test
diff --git a/src/test/groovy/bugs/Groovy8609Bug.groovy b/src/test/groovy/bugs/Groovy8609Bug.groovy
index a6ed105..0872090 100644
--- a/src/test/groovy/bugs/Groovy8609Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8609Bug.groovy
@@ -31,7 +31,7 @@ final class Groovy8609Bug extends GroovyTestCase {
             E getFirstRecord(T recordList) {
                 return recordList.get(0)
             }
-            
+
             static void main(args) {
                 def list = new ArrayList<HashMap<String, Integer>>()
                 def record = new HashMap<String, Integer>()
@@ -50,7 +50,7 @@ final class Groovy8609Bug extends GroovyTestCase {
             E getFirstRecord(T recordList) {
                 return recordList.get(0);
             }
-            
+
             static void main(args) {
                 def list = new ArrayList<HashMap<String, Integer>>()
                 def record = new HashMap<String, Integer>()
@@ -69,7 +69,7 @@ final class Groovy8609Bug extends GroovyTestCase {
             E getFirstRecord(T recordList) {
                 return recordList.get(0);
             }
-            
+
             static void main(args) {
                 def list = new ArrayList<HashMap<String, Integer>>()
                 def record = new HashMap<String, Integer>()
@@ -88,7 +88,7 @@ final class Groovy8609Bug extends GroovyTestCase {
             E getFirstRecord(T recordList) {
                 return recordList.get(0)
             }
-            
+
             static void main(args) {
                 def list = new ArrayList<TreeMap<String, Integer>>()
                 def record = new TreeMap<String, Integer>()
@@ -99,7 +99,7 @@ final class Groovy8609Bug extends GroovyTestCase {
         }
         '''
 
-        assert errMsg.contains('[Static type checking] - Cannot find matching method A#getFirstRecord(java.util.ArrayList <TreeMap>)')
+        assert errMsg.contains('[Static type checking] - Cannot find matching method A#getFirstRecord(java.util.ArrayList<java.util.TreeMap<java.lang.String, java.lang.Integer>>)')
     }
 
     void testUpperBoundWithGenericsThroughWrongType2() {
@@ -109,7 +109,7 @@ final class Groovy8609Bug extends GroovyTestCase {
             E getFirstRecord(T recordList) {
                 return recordList.get(0)
             }
-            
+
             static void main(args) {
                 def list = new ArrayList<HashMap<String, Long>>()
                 def record = new HashMap<String, Long>()
@@ -120,7 +120,7 @@ final class Groovy8609Bug extends GroovyTestCase {
         }
         '''
 
-        assert errMsg.contains('[Static type checking] - Cannot find matching method A#getFirstRecord(java.util.ArrayList <HashMap>)')
+        assert errMsg.contains('[Static type checking] - Cannot find matching method A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.Long>>)')
     }
 
     void testUpperBoundWithGenericsThroughWrongType3() {
@@ -130,7 +130,7 @@ final class Groovy8609Bug extends GroovyTestCase {
             E getFirstRecord(T recordList) {
                 return recordList.get(0)
             }
-            
+
             static void main(args) {
                 def list = new ArrayList<HashMap<StringBuffer, Integer>>()
                 def record = new HashMap<StringBuffer, Integer>()
@@ -141,6 +141,6 @@ final class Groovy8609Bug extends GroovyTestCase {
         }
         '''
 
-        assert errMsg.contains('[Static type checking] - Cannot find matching method A#getFirstRecord(java.util.ArrayList <HashMap>)')
+        assert errMsg.contains('[Static type checking] - Cannot find matching method A#getFirstRecord(java.util.ArrayList<java.util.HashMap<java.lang.StringBuffer, java.lang.Integer>>)')
     }
 }
diff --git a/src/test/groovy/bugs/Groovy9338.groovy b/src/test/groovy/bugs/Groovy9338.groovy
index 34813f8..0ccbfff 100644
--- a/src/test/groovy/bugs/Groovy9338.groovy
+++ b/src/test/groovy/bugs/Groovy9338.groovy
@@ -39,7 +39,7 @@ final class Groovy9338 {
             }
             test()
         '''
-        assert err =~ /Cannot call \w+#meth\(java.lang.Class <\? extends java.lang.CharSequence>\) with arguments \[java.lang.Class <\?>\]/
+        assert err =~ /Cannot call \w+#meth\(java.lang.Class<\? extends java.lang.CharSequence>\) with arguments \[java.lang.Class<\?>\]/
     }
 
     @Test
@@ -55,6 +55,6 @@ final class Groovy9338 {
             }
             test()
         '''
-        assert err =~ /Cannot call \w+#meth\(java.lang.Class <\? super java.lang.CharSequence>\) with arguments \[java.lang.Class <\?>\]/
+        assert err =~ /Cannot call \w+#meth\(java.lang.Class<\? super java.lang.CharSequence>\) with arguments \[java.lang.Class<\?>\]/
     }
 }
diff --git a/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy b/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy
index 8e745b4..69d7e89 100644
--- a/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ArraysAndCollectionsSTCTest.groovy
@@ -330,35 +330,35 @@ class ArraysAndCollectionsSTCTest extends StaticTypeCheckingTestCase {
         shouldFailWithMessages '''
             List<String> m() { }
             Number[] array = m()
-        ''', 'Cannot assign value of type java.util.List <String> to variable of type java.lang.Number[]'
+        ''', 'Cannot assign value of type java.util.List<java.lang.String> to variable of type java.lang.Number[]'
 
         shouldFailWithMessages '''
             void test(Set<String> set) {
                 Number[] array = set
             }
-        ''', 'Cannot assign value of type java.util.Set <String> to variable of type java.lang.Number[]'
+        ''', 'Cannot assign value of type java.util.Set<java.lang.String> to variable of type java.lang.Number[]'
 
         shouldFailWithMessages '''
             List<? super CharSequence> m() { }
             CharSequence[] array = m()
-        ''', 'Cannot assign value of type java.util.List <? super java.lang.CharSequence> to variable of type java.lang.CharSequence[]'
+        ''', 'Cannot assign value of type java.util.List<? super java.lang.CharSequence> to variable of type java.lang.CharSequence[]'
 
         shouldFailWithMessages '''
             void test(Set<? super CharSequence> set) {
                 CharSequence[] array = set
             }
-        ''', 'Cannot assign value of type java.util.Set <? super java.lang.CharSequence> to variable of type java.lang.CharSequence[]'
+        ''', 'Cannot assign value of type java.util.Set<? super java.lang.CharSequence> to variable of type java.lang.CharSequence[]'
 
         shouldFailWithMessages '''
             List<? super Runnable> m() { }
             Runnable[] array = m()
-        ''', 'Cannot assign value of type java.util.List <? super java.lang.Runnable> to variable of type java.lang.Runnable[]'
+        ''', 'Cannot assign value of type java.util.List<? super java.lang.Runnable> to variable of type java.lang.Runnable[]'
 
         shouldFailWithMessages '''
             void test(List<? super Runnable> list) {
                 Runnable[] array = list
             }
-        ''', 'Cannot assign value of type java.util.List <? super java.lang.Runnable> to variable of type java.lang.Runnable[]'
+        ''', 'Cannot assign value of type java.util.List<? super java.lang.Runnable> to variable of type java.lang.Runnable[]'
     }
 
     // GROOVY-8983
@@ -720,7 +720,7 @@ class ArraysAndCollectionsSTCTest extends StaticTypeCheckingTestCase {
                 A(int n) {}
             }
             A a = [1]
-        ''', 'Cannot assign value of type java.util.List <java.lang.Integer> to variable of type A'
+        ''', 'Cannot assign value of type java.util.List<java.lang.Integer> to variable of type A'
     }
 
     // GROOVY-6912
@@ -744,7 +744,7 @@ class ArraysAndCollectionsSTCTest extends StaticTypeCheckingTestCase {
 
         shouldFailWithMessages '''
             ArrayList<String> strings = [1,2,3]
-        ''', 'Incompatible generic argument types. Cannot assign java.util.ArrayList <java.lang.Integer> to: java.util.ArrayList <String>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.ArrayList<java.lang.Integer> to: java.util.ArrayList<java.lang.String>'
     }
 
     // GROOVY-6912
@@ -774,7 +774,7 @@ class ArraysAndCollectionsSTCTest extends StaticTypeCheckingTestCase {
 
         shouldFailWithMessages '''
             LinkedHashSet<String> strings = [1,2,3]
-        ''', 'Incompatible generic argument types. Cannot assign java.util.LinkedHashSet <java.lang.Integer> to: java.util.LinkedHashSet <String>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.LinkedHashSet<java.lang.Integer> to: java.util.LinkedHashSet<java.lang.String>'
     }
 
     void testCollectionTypesInitializedByListLiteral1() {
@@ -816,31 +816,31 @@ class ArraysAndCollectionsSTCTest extends StaticTypeCheckingTestCase {
     void testCollectionTypesInitializedByListLiteral3() {
         shouldFailWithMessages '''
             Set<String> set = [1,2,3]
-        ''', 'Cannot assign java.util.LinkedHashSet <java.lang.Integer> to: java.util.Set <String>'
+        ''', 'Cannot assign java.util.LinkedHashSet<java.lang.Integer> to: java.util.Set<java.lang.String>'
 
         shouldFailWithMessages '''
             List<String> list = ['a','b',3]
-        ''', 'Cannot assign java.util.ArrayList <java.io.Serializable> to: java.util.List <String>'
+        ''', 'Cannot assign java.util.ArrayList<java.io.Serializable<? extends java.lang.Object>> to: java.util.List<java.lang.String>'
 
         shouldFailWithMessages '''
             Iterable<String> iter = [1,2,3]
-        ''', 'Cannot assign java.util.ArrayList <java.lang.Integer> to: java.lang.Iterable <String>'
+        ''', 'Cannot assign java.util.ArrayList<java.lang.Integer> to: java.lang.Iterable<java.lang.String>'
 
         shouldFailWithMessages '''
             Collection<String> coll = [1,2,3]
-        ''', 'Cannot assign java.util.ArrayList <java.lang.Integer> to: java.util.Collection <String>'
+        ''', 'Cannot assign java.util.ArrayList<java.lang.Integer> to: java.util.Collection<java.lang.String>'
 
         shouldFailWithMessages '''
             Deque<String> deque = [""]
-        ''', 'Cannot assign value of type java.util.List <java.lang.String> to variable of type java.util.Deque <String>'
+        ''', 'Cannot assign value of type java.util.List<java.lang.String> to variable of type java.util.Deque<java.lang.String>'
 
         shouldFailWithMessages '''
             Deque<String> deque = []
-        ''', 'Cannot assign value of type java.util.List <java.lang.String> to variable of type java.util.Deque <String>'
+        ''', 'Cannot assign value of type java.util.List<java.lang.String> to variable of type java.util.Deque<java.lang.String>'
 
         shouldFailWithMessages '''
             Queue<String> queue = []
-        ''', 'Cannot assign value of type java.util.List <java.lang.String> to variable of type java.util.Queue <String>'
+        ''', 'Cannot assign value of type java.util.List<java.lang.String> to variable of type java.util.Queue<java.lang.String>'
     }
 
     // GROOVY-7128
@@ -887,6 +887,6 @@ class ArraysAndCollectionsSTCTest extends StaticTypeCheckingTestCase {
 
         shouldFailWithMessages '''
             Map<String,Integer> map = [1:2]
-        ''', 'Cannot assign java.util.LinkedHashMap <java.lang.Integer, java.lang.Integer> to: java.util.Map <String, Integer>'
+        ''', 'Cannot assign java.util.LinkedHashMap<java.lang.Integer, java.lang.Integer> to: java.util.Map<java.lang.String, java.lang.Integer>'
     }
 }
diff --git a/src/test/groovy/transform/stc/BugsSTCTest.groovy b/src/test/groovy/transform/stc/BugsSTCTest.groovy
index ea1c787..9a6412a 100644
--- a/src/test/groovy/transform/stc/BugsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/BugsSTCTest.groovy
@@ -171,7 +171,7 @@ class BugsSTCTest extends StaticTypeCheckingTestCase {
             L<String> items = ['foo', 'bar'] as L<String>
             items.removeIf({a, b -> 1} as Comparator<?>)
             assert items
-        ''', 'Cannot call L#removeIf(java.util.Comparator <? super java.lang.String>) with arguments [java.util.Comparator <?>]'
+        ''', 'Cannot call L#removeIf(java.util.Comparator<? super java.lang.String>) with arguments [java.util.Comparator<?>]'
     }
 
     void testGroovy5482ListsAndFlowTyping() {
diff --git a/src/test/groovy/transform/stc/ClosureParamTypeInferenceSTCTest.groovy b/src/test/groovy/transform/stc/ClosureParamTypeInferenceSTCTest.groovy
index bc0ac8a..efb8dba 100644
--- a/src/test/groovy/transform/stc/ClosureParamTypeInferenceSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ClosureParamTypeInferenceSTCTest.groovy
@@ -275,7 +275,7 @@ import groovy.transform.stc.ClosureParams
 
 void foo(@ClosureParams(value=FromString,options="java.util.List<java.lang.String>") Closure cl) { cl.call(['foo']) }
 foo { List<Date> d -> d.each { println it } }
-''', 'Expected parameter of type java.util.List <java.lang.String> but got java.util.List <Date>'
+''', 'Expected parameter of type java.util.List<java.lang.String> but got java.util.List<java.util.Date>'
     }
 
     void testFromStringWithDirectGenericPlaceholder() {
diff --git a/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy b/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
index ac7c141..4db3119 100644
--- a/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/ConstructorsSTCTest.groovy
@@ -93,7 +93,7 @@ class ConstructorsSTCTest extends StaticTypeCheckingTestCase {
             import java.awt.Dimension
             List args = [100,200]
             Dimension d = args // not supported
-        ''', 'Cannot assign value of type java.util.ArrayList <java.lang.Integer> to variable of type java.awt.Dimension'
+        ''', 'Cannot assign value of type java.util.ArrayList<java.lang.Integer> to variable of type java.awt.Dimension'
     }
 
     void testConstructFromMap() {
diff --git a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
index c34ed6b..99ea5df 100644
--- a/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
+++ b/src/test/groovy/transform/stc/FieldsAndPropertiesSTCTest.groovy
@@ -329,7 +329,7 @@ class FieldsAndPropertiesSTCTest extends StaticTypeCheckingTestCase {
                 Closure<List> bar = { Date date -> date.getTime() }
             }
             new Foo()
-        ''', 'Incompatible generic argument types. Cannot assign groovy.lang.Closure <java.lang.Long> to: groovy.lang.Closure <List>'
+        ''', 'Incompatible generic argument types. Cannot assign groovy.lang.Closure<java.lang.Long> to: groovy.lang.Closure<java.util.List>'
     }
 
     void testFieldInitShouldNotPassBecauseOfIncompatibleTypesWithClosure2() {
@@ -338,7 +338,7 @@ class FieldsAndPropertiesSTCTest extends StaticTypeCheckingTestCase {
                 java.util.function.Supplier<String> bar = { 123 }
             }
             new Foo()
-        ''', 'Incompatible generic argument types. Cannot assign java.util.function.Supplier <java.lang.Integer> to: java.util.function.Supplier <String>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.function.Supplier<java.lang.Integer> to: java.util.function.Supplier<java.lang.String>'
     }
 
     // GROOVY-9882
@@ -857,7 +857,7 @@ new FooWorker().doSomething()'''
 
             new FooWorker().doSomething()
         ''',
-        'Incompatible generic argument types. Cannot assign java.util.ArrayList <Integer> to: java.util.List <String>'
+        'Incompatible generic argument types. Cannot assign java.util.ArrayList<java.lang.Integer> to: java.util.List<java.lang.String>'
     }
 
     void testAICAsStaticProperty() {
diff --git a/src/test/groovy/transform/stc/GenericsSTCTest.groovy b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
index 4d4ce4e..c7deb53 100644
--- a/src/test/groovy/transform/stc/GenericsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/GenericsSTCTest.groovy
@@ -41,14 +41,14 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
     void testDeclaration3() {
         shouldFailWithMessages '''
             Map<String,String> obj = new HashMap<String,Integer>()
-        ''', 'Incompatible generic argument types. Cannot assign java.util.HashMap <String, Integer> to: java.util.Map <String, String>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.HashMap<java.lang.String, java.lang.Integer> to: java.util.Map<java.lang.String, java.lang.String>'
     }
 
     void testDeclaration4() {
         // no generics checked after first wildcard
         shouldFailWithMessages '''
             Map<? extends CharSequence,String> obj = new HashMap<String,Integer>()
-        ''', 'Incompatible generic argument types. Cannot assign java.util.HashMap <String, Integer> to: java.util.Map <? extends java.lang.CharSequence, String>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.HashMap<java.lang.String, java.lang.Integer> to: java.util.Map<? extends java.lang.CharSequence, java.lang.String>'
     }
 
     void testAddOnList() {
@@ -385,11 +385,11 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             class D implements I { }
 
             A<String> ax = new C<>(new D())
-        ''', 'Incompatible generic argument types. Cannot assign C <D> to: A <String>'
+        ''', 'Incompatible generic argument types. Cannot assign C<D> to: A<java.lang.String>'
 
         shouldFailWithMessages '''
             Set<List<String>> strings = new HashSet<>([new ArrayList<Number>()])
-        ''', 'Incompatible generic argument types. Cannot assign java.util.HashSet <java.util.ArrayList> to: java.util.Set <List>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.HashSet<java.util.ArrayList<java.lang.Number>> to: java.util.Set<java.util.List<java.lang.String>>'
     }
 
     // GROOVY-9972
@@ -479,7 +479,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             def foo = { flag, C<D> cd = (flag ? new C<>(new D()) : new C<>(new Object())) ->
                 cd.p.f.toLowerCase()
             }
-        ''', 'Incompatible generic argument types. Cannot assign C <? extends java.lang.Object> to: C <D>'
+        ''', 'Incompatible generic argument types. Cannot assign C<? extends java.lang.Object> to: C<D>'
     }
 
     // GROOVY-9963
@@ -547,7 +547,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
     void testLinkedListWithListArgumentAndWrongElementTypes() {
         shouldFailWithMessages '''
             List<String> list = new LinkedList<String>([1,2,3])
-        ''', 'Cannot call java.util.LinkedList#<init>(java.util.Collection <? extends java.lang.String>) with arguments [java.util.List <java.lang.Integer>]'
+        ''', 'Cannot call java.util.LinkedList#<init>(java.util.Collection<? extends java.lang.String>) with arguments [java.util.List<java.lang.Integer>]'
     }
 
     void testGenericAssignmentWithSubClass() {
@@ -593,7 +593,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             def list = ['foo','bar','baz']
             @ASTTest(phase=INSTRUCTION_SELECTION, value={
                 def type = node.getNodeMetaData(INFERRED_TYPE)
-                assert type.toString(false) == 'java.util.Map <String, Object>'
+                assert type.toString(false) == 'java.util.Map<java.lang.String, java.lang.Object>'
             })
             def map = list.<String,Object,String>collectEntries {
                 [(it): it.hashCode()]
@@ -854,7 +854,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
 
             A<String, Integer> a = new B()
             a.test()
-        ''', 'Cannot call A#<init>(java.lang.Class <String>, java.lang.Class <Integer>) with arguments [java.lang.Class <java.lang.Integer>, java.lang.Class <java.lang.String>]'
+        ''', 'Cannot call A#<init>(java.lang.Class<java.lang.String>, java.lang.Class<java.lang.Integer>) with arguments [java.lang.Class<java.lang.Integer>, java.lang.Class<java.lang.String>]'
     }
 
     // GROOVY-9460
@@ -986,7 +986,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             }
         }
         new ClassB()
-        ''', 'Cannot call <X> groovy.transform.stc.GenericsSTCTest$ClassA#bar(java.lang.Class <Long>) with arguments [java.lang.Class <? extends java.lang.Object>]'
+        ''', 'Cannot call <X> groovy.transform.stc.GenericsSTCTest$ClassA#bar(java.lang.Class<java.lang.Long>) with arguments [java.lang.Class<? extends java.lang.Object>]'
     }
 
     // GROOVY-8961, GROOVY-9915
@@ -1023,7 +1023,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
                 void test() {
                     m = Collections.<Integer>emptyList()
                 }
-            """, 'Incompatible generic argument types. Cannot assign java.util.List <Integer> to: java.util.List <String>'
+            """, 'Incompatible generic argument types. Cannot assign java.util.List<java.lang.Integer> to: java.util.List<java.lang.String>'
         }
     }
 
@@ -1181,7 +1181,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             List<String> list = ['a','b','c']
             Collection<Integer> numbers = (Collection<Integer>) [1,2,3]
             boolean r = list.addAll(numbers)
-        ''', 'Cannot call java.util.ArrayList#addAll(java.util.Collection <? extends java.lang.String>) with arguments [java.util.Collection <Integer>]'
+        ''', 'Cannot call java.util.ArrayList#addAll(java.util.Collection<? extends java.lang.String>) with arguments [java.util.Collection<java.lang.Integer>]'
     }
 
     // GROOVY-5528
@@ -1909,7 +1909,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
                 static <T extends List<? extends CharSequence>> void bar(T a) {}
             }
             Foo.bar([new Object()])
-        ''', 'Cannot call <T extends java.util.List<? extends java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.ArrayList <java.lang.Object>]'
+        ''', 'Cannot call <T extends java.util.List<? extends java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.ArrayList<java.lang.Object>]'
     }
 
     void testOutOfBoundsBySuperGenericParameterType() {
@@ -1918,7 +1918,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
                 static <T extends List<? super CharSequence>> void bar(T a) {}
             }
             Foo.bar(['abc'])
-        ''', 'Cannot call <T extends java.util.List<? super java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.ArrayList <java.lang.String>]'
+        ''', 'Cannot call <T extends java.util.List<? super java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.ArrayList<java.lang.String>]'
     }
 
     void testOutOfBoundsByExtendsPlaceholderParameterType() {
@@ -1932,7 +1932,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
                 }
             }
             Baz.qux([new Object()])
-        ''', 'Cannot call <T extends java.util.List<? extends java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.List <Object>]'
+        ''', 'Cannot call <T extends java.util.List<? extends java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.List<java.lang.Object>]'
     }
 
     void testOutOfBoundsBySuperPlaceholderParameterType() {
@@ -1946,7 +1946,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
                 }
             }
             Baz.qux(['abc'])
-        ''', 'Cannot call <T extends java.util.List<? super java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.List <String>] '
+        ''', 'Cannot call <T extends java.util.List<? super java.lang.CharSequence>> Foo#bar(T) with arguments [java.util.List<java.lang.String>] '
     }
 
     // GROOVY-5721
@@ -2303,7 +2303,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             List<Object> l = new ArrayList<>()
             assert foo(l) == 1
         ''',
-        '#foo(java.util.List <? extends A>) with arguments [java.util.ArrayList <java.lang.Object>]'
+        '#foo(java.util.List<? extends A>) with arguments [java.util.ArrayList<java.lang.Object>]'
     }
 
     void testMethodLevelGenericsForMethodCall() {
@@ -2357,7 +2357,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             }
             GoodCodeRed.foo()
         ''',
-        "Cannot call <T> GoodCodeRed#attach(GoodCodeRed <Long>) with arguments [GoodCodeRed <Integer>]"
+        "Cannot call <T> GoodCodeRed#attach(GoodCodeRed<java.lang.Long>) with arguments [GoodCodeRed<java.lang.Integer>]"
     }
 
     void testHiddenGenerics() {
@@ -2371,7 +2371,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
             class Blah {}
             class MyList extends LinkedList<Object> {}
             List<Blah> o = new MyList()
-        ''','Incompatible generic argument types. Cannot assign MyList to: java.util.List <Blah>'
+        ''','Incompatible generic argument types. Cannot assign MyList to: java.util.List<Blah>'
 
         // Groovy-5873
         assertScript """
@@ -2900,7 +2900,7 @@ class GenericsSTCTest extends StaticTypeCheckingTestCase {
                     [11, 12]
                 }
             }
-        ''', 'Incompatible generic argument types. Cannot assign java.util.List <java.lang.Integer> to: java.util.List <String>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.List<java.lang.Integer> to: java.util.List<java.lang.String>'
     }
 
     void testBoundedReturnTypeChecking() {
diff --git a/src/test/groovy/transform/stc/LambdaTest.groovy b/src/test/groovy/transform/stc/LambdaTest.groovy
index f8327e5..ca904b8 100644
--- a/src/test/groovy/transform/stc/LambdaTest.groovy
+++ b/src/test/groovy/transform/stc/LambdaTest.groovy
@@ -308,7 +308,7 @@ final class LambdaTest {
                 Comparator<Integer> c = (int a, int b) -> Integer.compare(a, b)
             }
         '''
-        assert err =~ /Cannot assign java.util.Comparator <int> to: java.util.Comparator <Integer>/
+        assert err =~ /Cannot assign java.util.Comparator<int> to: java.util.Comparator<java.lang.Integer>/
     }
 
     @Test // GROOVY-9977
diff --git a/src/test/groovy/transform/stc/MethodCallsSTCTest.groovy b/src/test/groovy/transform/stc/MethodCallsSTCTest.groovy
index f077def..495d369 100644
--- a/src/test/groovy/transform/stc/MethodCallsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/MethodCallsSTCTest.groovy
@@ -219,7 +219,7 @@ class MethodCallsSTCTest extends StaticTypeCheckingTestCase {
             void m(Set<Integer> set) {
             }
             m([1,2,3,3])
-        ''', 'm(java.util.List <java.lang.Integer>). Please check if the declared type is correct and if the method exists.'
+        ''', 'm(java.util.List<java.lang.Integer>). Please check if the declared type is correct and if the method exists.'
     }
 
     // GROOVY-7106, GROOVY-7274, GROOVY-9844
@@ -1148,7 +1148,7 @@ class MethodCallsSTCTest extends StaticTypeCheckingTestCase {
             new SpreadInCtor(*['A', 'B'])
         ''',
         'The spread operator cannot be used as argument of method or closure calls with static type checking because the number of arguments cannot be determined at compile time',
-        'Cannot find matching method SpreadInCtor#<init>(java.util.List <E extends java.lang.Object>)'
+        'Cannot find matching method SpreadInCtor#<init>(java.util.List<E>)'
     }
 
     void testSpreadArgsForbiddenInClosureCall() {
diff --git a/src/test/groovy/transform/stc/STCAssignmentTest.groovy b/src/test/groovy/transform/stc/STCAssignmentTest.groovy
index 1c6752a..b663eca 100644
--- a/src/test/groovy/transform/stc/STCAssignmentTest.groovy
+++ b/src/test/groovy/transform/stc/STCAssignmentTest.groovy
@@ -377,7 +377,7 @@ class STCAssignmentTest extends StaticTypeCheckingTestCase {
     void testTernaryOperatorAssignmentShouldFailBecauseOfIncompatibleGenericTypes() {
         shouldFailWithMessages '''
             List<Integer> foo = true?new LinkedList<String>():new LinkedList<Integer>();
-        ''', 'Incompatible generic argument types. Cannot assign java.util.LinkedList <? extends java.io.Serializable <? extends java.io.Serializable>> to: java.util.List <Integer>'
+        ''', 'Incompatible generic argument types. Cannot assign java.util.LinkedList<? extends java.io.Serializable<? extends java.io.Serializable<java.lang.String>>> to: java.util.List<java.lang.Integer>'
     }
 
     void testCastStringToChar() {
diff --git a/src/test/org/codehaus/groovy/ast/tools/GenericsUtilsTest.groovy b/src/test/org/codehaus/groovy/ast/tools/GenericsUtilsTest.groovy
index 1b30f71..d4b9bbf 100644
--- a/src/test/org/codehaus/groovy/ast/tools/GenericsUtilsTest.groovy
+++ b/src/test/org/codehaus/groovy/ast/tools/GenericsUtilsTest.groovy
@@ -189,7 +189,7 @@ final class GenericsUtilsTest {
         ClassNode source = findClassNode('C', classNodeList)
         ClassNode result = GenericsUtils.findParameterizedType(target, source)
 
-        assert result.toString(false) == 'A <java.lang.Number>'
+        assert result.toString(false) == 'A<java.lang.Number>'
     }
 
     @Test
diff --git a/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy b/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy
index 7090068..337893b 100644
--- a/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy
@@ -223,9 +223,9 @@ class InheritConstructorsTransformTest extends GroovyShellTestCase {
             op.bar(RoundingMode.DOWN)
             assert op.toString() == '3|DOWN'
         '''
-        assert message.contains('Cannot call OrderPublisher#<init>(java.util.Deque <java.lang.Integer>) with arguments [java.util.LinkedList <String>]')
+        assert message.contains('Cannot call OrderPublisher#<init>(java.util.Deque<java.lang.Integer>) with arguments [java.util.LinkedList<java.lang.String>]')
         assert message.contains('Cannot find matching method OrderPublisher#<init>(java.util.Date)')
-        assert message.contains('Cannot call OrderPublisher#<init>(java.util.Set <RoundingMode>) with arguments [java.util.HashSet <Date>]')
+        assert message.contains('Cannot call OrderPublisher#<init>(java.util.Set<java.math.RoundingMode>) with arguments [java.util.HashSet<java.util.Date>]')
     }
 
     // GROOVY-9323