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 2018/04/12 03:50:16 UTC
groovy git commit: GROOVY-8211: pre-factor avoid AIOOBE with clearer
message but real fix to come
Repository: groovy
Updated Branches:
refs/heads/GROOVY_2_5_X d98afbeb2 -> 7d49e93e5
GROOVY-8211: pre-factor avoid AIOOBE with clearer message but real fix to come
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/7d49e93e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/7d49e93e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/7d49e93e
Branch: refs/heads/GROOVY_2_5_X
Commit: 7d49e93e515bb985f8fdbac58a0c5dedbac1cd0e
Parents: d98afbe
Author: Paul King <pa...@asert.com.au>
Authored: Thu Apr 12 13:50:08 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Thu Apr 12 13:50:08 2018 +1000
----------------------------------------------------------------------
.../groovy/ast/tools/GenericsUtils.java | 23 ++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/7d49e93e/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
index 1b0fb04..83d1999 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
@@ -143,8 +143,8 @@ public class GenericsUtils {
* For a given classnode, fills in the supplied map with the parameterized
* types it defines.
*
- * @param node
- * @param map
+ * @param node the class node to check
+ + @param map the generics type information collector
*/
public static void extractPlaceholders(ClassNode node, Map<String, GenericsType> map) {
if (node == null) return;
@@ -159,6 +159,11 @@ public class GenericsUtils {
if (parameterized == null || parameterized.length == 0) return;
GenericsType[] redirectGenericsTypes = node.redirect().getGenericsTypes();
if (redirectGenericsTypes == null) redirectGenericsTypes = parameterized;
+ if (redirectGenericsTypes.length != parameterized.length) {
+ throw new GroovyBugError("Expected earlier checking to detect generics parameter arity mismatch" +
+ "\nExpected: " + node.getName() + toGenericTypesString(redirectGenericsTypes) +
+ "\nSupplied: " + node.getName() + toGenericTypesString(parameterized));
+ }
for (int i = 0; i < redirectGenericsTypes.length; i++) {
GenericsType redirectType = redirectGenericsTypes[i];
if (redirectType.isPlaceholder()) {
@@ -185,6 +190,20 @@ public class GenericsUtils {
}
}
+ private static String toGenericTypesString(GenericsType[] genericsTypes) {
+ if (genericsTypes == null) return "";
+ StringBuilder sb = new StringBuilder("<");
+ for (int i = 0; i < genericsTypes.length; i++) {
+ final GenericsType genericsType = genericsTypes[i];
+ sb.append(genericsType.toString());
+ if (i < genericsTypes.length - 1) {
+ sb.append(",");
+ }
+ }
+ sb.append("> ");
+ return sb.toString();
+ }
+
/**
* Interface class nodes retrieved from {@link org.codehaus.groovy.ast.ClassNode#getInterfaces()}
* or {@link org.codehaus.groovy.ast.ClassNode#getAllInterfaces()} are returned with generic type