You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2023/04/08 00:50:33 UTC

[groovy] 01/02: Improve generic-ClassNode compiler error message

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

paulk pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 484f0ab4192d94872c2df6079668f2172664d5fb
Author: Christopher Smith <ch...@gmail.com>
AuthorDate: Thu Sep 22 15:54:50 2022 -0500

    Improve generic-ClassNode compiler error message
    
    Explain how (rather than what) should be done to refer to classes with
    generic types in AST transforms.
---
 .../java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index f5ad9e825f..924b5633af 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -786,11 +786,12 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
             checkGenericsUsage(ref, node.getComponentType());
         } else if (!node.isRedirectNode() && node.isUsingGenerics()) {
             addError(
-                    "A transform used a generics containing ClassNode "+ node + " " +
+                    "A transform used a generics-containing ClassNode "+ node + " " +
                     "for "+getRefDescriptor(ref) +
                     "directly. You are not supposed to do this. " +
-                    "Please create a new ClassNode referring to the old ClassNode " +
-                    "and use the new ClassNode instead of the old one. Otherwise " +
+                    "Please create a clean ClassNode using ClassNode#getPlainNodeReference() " +
+                    "and #setGenericsTypes(GenericsType[]) on it or use GenericsUtils.makeClassSafe*" +
+                    "and use the new ClassNode instead of the original one. Otherwise " +
                     "the compiler will create wrong descriptors and a potential " +
                     "NullPointerException in TypeResolver in the OpenJDK. If this is " +
                     "not your own doing, please report this bug to the writer of the " +