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 2025/10/07 02:39:23 UTC

(groovy) branch master updated: GROOVY-11770: StackOverflowError processing generics for kubernetes-client library

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 12ea0aec13 GROOVY-11770: StackOverflowError processing generics for kubernetes-client library
12ea0aec13 is described below

commit 12ea0aec13117a588d6fdde9e7799f4b2a585111
Author: Paul King <pa...@asert.com.au>
AuthorDate: Sun Oct 5 08:34:45 2025 +1000

    GROOVY-11770: StackOverflowError processing generics for kubernetes-client library
---
 .../java/org/codehaus/groovy/ast/tools/WideningCategories.java     | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
index c847319fd2..8231765d00 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
@@ -269,11 +269,16 @@ public class WideningCategories {
             ClassNode t1 = upperBound(agt[i]);
             ClassNode t2 = upperBound(bgt[i]);
             ClassNode basicType;
+            // TODO GROOVY-11770: we should add more cases where we can determine the correct LUB
             if (areEqualWithGenerics(t1, isPrimitiveType(a)?getWrapper(a):a) && areEqualWithGenerics(t2, isPrimitiveType(b)?getWrapper(b):b)) {
                 // "String implements Comparable<String>" and "StringBuffer implements Comparable<StringBuffer>"
                 basicType = fallback; // do not loop
             } else {
-                basicType = lowestUpperBound(t1, t2);
+                try {
+                    basicType = lowestUpperBound(t1, t2);
+                } catch (StackOverflowError ignore) {
+                    basicType = fallback; // best we can do for now
+                }
             }
             if (agt[i].isWildcard() || bgt[i].isWildcard() || !t1.equals(t2)) {
                 lubGTs[i] = GenericsUtils.buildWildcardType(basicType);