From f40842b7717c59402561150d5fd22c01afb661a0 Mon Sep 17 00:00:00 2001 From: Eric Milles Date: Thu, 5 Sep 2024 15:35:11 -0500 Subject: [PATCH] GROOVY-11448: STC: `subList` bounds check --- .../groovy/transform/stc/StaticTypeCheckingVisitor.java | 2 +- src/test/groovy/transform/stc/ClosuresSTCTest.groovy | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java index 7c0dae50f23..0b19fe022ef 100644 --- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java +++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java @@ -4037,7 +4037,7 @@ private void checkForbiddenSpreadArgument(final ArgumentListExpression argumen checkForbiddenSpreadArgument(arguments); } else { // GROOVY-10597: allow spread for the ... param List list = arguments.getExpressions(); - list = list.subList(0, parameters.length - 1); + list = list.subList(0, Math.min(parameters.length - 1, list.size())); // GROOVY-11448 checkForbiddenSpreadArgument(args(list)); } } diff --git a/src/test/groovy/transform/stc/ClosuresSTCTest.groovy b/src/test/groovy/transform/stc/ClosuresSTCTest.groovy index 0fee303c645..65781ba625f 100644 --- a/src/test/groovy/transform/stc/ClosuresSTCTest.groovy +++ b/src/test/groovy/transform/stc/ClosuresSTCTest.groovy @@ -179,6 +179,15 @@ class ClosuresSTCTest extends StaticTypeCheckingTestCase { 'Cannot call closure that accepts [java.lang.Object, java.lang.Object] with [java.lang.String]' } + // GROOVY-11448 + void testCallClosure18() { + assertScript ''' + def c = { int x = 0, int[] y = new int[0] -> return x } + assert c( ) == 0 + assert c(1) == 1 + ''' + } + void testClosureReturnTypeInference1() { assertScript ''' def c = { int a, int b -> return a + b }