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/03/28 14:55:42 UTC

groovy git commit: fix a binary compatibility regression since 2.4

Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_5_X cd113c959 -> 50526057c


fix a binary compatibility regression since 2.4


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/50526057
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/50526057
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/50526057

Branch: refs/heads/GROOVY_2_5_X
Commit: 50526057c17932a286e5b78233221602a9aee41b
Parents: cd113c9
Author: Paul King <pa...@asert.com.au>
Authored: Thu Mar 29 00:55:06 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Thu Mar 29 00:55:35 2018 +1000

----------------------------------------------------------------------
 .../groovy/transform/builder/InitializerStrategy.java |  3 ++-
 .../apache/groovy/ast/tools/AnnotatedNodeUtils.java   | 13 ++++++++++---
 .../org/apache/groovy/ast/tools/ClassNodeUtils.java   |  3 ++-
 .../groovy/transform/AbstractASTTransformation.java   |  6 +++---
 .../transform/NamedVariantASTTransformation.java      |  8 ++++----
 .../transform/TupleConstructorASTTransformation.java  |  3 ++-
 .../transform/stc/StaticTypeCheckingVisitor.java      | 14 ++++++++------
 subprojects/groovy-groovydoc/build.gradle             |  1 +
 8 files changed, 32 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/src/main/groovy/groovy/transform/builder/InitializerStrategy.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/groovy/transform/builder/InitializerStrategy.java b/src/main/groovy/groovy/transform/builder/InitializerStrategy.java
index 8262115..6cd72bd 100644
--- a/src/main/groovy/groovy/transform/builder/InitializerStrategy.java
+++ b/src/main/groovy/groovy/transform/builder/InitializerStrategy.java
@@ -20,6 +20,7 @@ package groovy.transform.builder;
 
 import groovy.transform.TupleConstructor;
 import groovy.transform.Undefined;
+import org.apache.groovy.ast.tools.AnnotatedNodeUtils;
 import org.codehaus.groovy.ast.AnnotatedNode;
 import org.codehaus.groovy.ast.AnnotationNode;
 import org.codehaus.groovy.ast.ClassHelper;
@@ -161,7 +162,7 @@ public class InitializerStrategy extends BuilderASTTransformation.AbstractBuilde
         addFields(buildee, filteredFields, builder);
 
         buildCommon(buildee, anno, filteredFields, builder);
-        boolean needsConstructor = !transform.hasAnnotation(buildee, TUPLECONS_TYPE) || force;
+        boolean needsConstructor = !AnnotatedNodeUtils.hasAnnotation(buildee, TUPLECONS_TYPE) || force;
         createBuildeeConstructors(transform, buildee, builder, filteredFields, needsConstructor, useSetters);
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/src/main/java/org/apache/groovy/ast/tools/AnnotatedNodeUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/groovy/ast/tools/AnnotatedNodeUtils.java b/src/main/java/org/apache/groovy/ast/tools/AnnotatedNodeUtils.java
index e378f99..fd60278 100644
--- a/src/main/java/org/apache/groovy/ast/tools/AnnotatedNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/AnnotatedNodeUtils.java
@@ -24,6 +24,8 @@ import org.codehaus.groovy.ast.AnnotationNode;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.ClassNode;
 
+import java.util.List;
+
 /**
  * Utility class for working with AnnotatedNodes
  */
@@ -33,10 +35,15 @@ public class AnnotatedNodeUtils {
     private AnnotatedNodeUtils() {
     }
 
-    public static void markAsGenerated(ClassNode cNode, AnnotatedNode aNode) {
-        boolean shouldAnnotate = cNode.getModule() != null && cNode.getModule().getContext() != null;
+    public static void markAsGenerated(ClassNode containingClass, AnnotatedNode nodeToMark) {
+        boolean shouldAnnotate = containingClass.getModule() != null && containingClass.getModule().getContext() != null;
         if (shouldAnnotate) {
-            aNode.addAnnotation(new AnnotationNode(GENERATED_TYPE));
+            nodeToMark.addAnnotation(new AnnotationNode(GENERATED_TYPE));
         }
     }
+
+    public static boolean hasAnnotation(AnnotatedNode node, ClassNode annotation) {
+        List annots = node.getAnnotations(annotation);
+        return (annots != null && !annots.isEmpty());
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
index f78e99d..51cab66 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
@@ -37,6 +37,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.hasAnnotation;
 import static org.codehaus.groovy.ast.ClassHelper.boolean_TYPE;
 
 /**
@@ -297,7 +298,7 @@ public class ClassNodeUtils {
         List<ConstructorNode> declaredConstructors = cNode.getDeclaredConstructors();
         for (ConstructorNode constructorNode : declaredConstructors) {
             // allow constructors added by other transforms if flagged as Generated
-            if (AbstractASTTransformation.hasAnnotation(constructorNode, GENERATED_TYPE)) {
+            if (hasAnnotation(constructorNode, GENERATED_TYPE)) {
                 continue;
             }
             if (xform != null) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
index 947c7f1..fad53be 100644
--- a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
@@ -18,6 +18,7 @@
  */
 package org.codehaus.groovy.transform;
 
+import org.apache.groovy.ast.tools.AnnotatedNodeUtils;
 import org.apache.groovy.ast.tools.MethodNodeUtils;
 import org.codehaus.groovy.GroovyBugError;
 import org.codehaus.groovy.ast.ASTNode;
@@ -259,9 +260,8 @@ public abstract class AbstractASTTransformation implements Opcodes, ASTTransform
         return true;
     }
 
-    public static boolean hasAnnotation(AnnotatedNode node, ClassNode annotation) {
-        List annots = node.getAnnotations(annotation);
-        return (annots != null && !annots.isEmpty());
+    public boolean hasAnnotation(ClassNode node, ClassNode annotation) {
+        return AnnotatedNodeUtils.hasAnnotation(node, annotation);
     }
 
     public static List<String> tokenize(String rawExcludes) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
index 3a7e3ab..54008af 100644
--- a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
@@ -21,6 +21,7 @@ package org.codehaus.groovy.transform;
 import groovy.transform.NamedDelegate;
 import groovy.transform.NamedParam;
 import groovy.transform.NamedVariant;
+import org.apache.groovy.ast.tools.AnnotatedNodeUtils;
 import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.ast.AnnotationNode;
 import org.codehaus.groovy.ast.ClassHelper;
@@ -44,7 +45,6 @@ import org.codehaus.groovy.control.SourceUnit;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import static org.apache.groovy.ast.tools.ClassNodeUtils.isInnerClass;
@@ -100,7 +100,7 @@ public class NamedVariantASTTransformation extends AbstractASTTransformation {
         // first pass, just check for absence of annotations of interest
         boolean annoFound = false;
         for (Parameter fromParam : fromParams) {
-            if (hasAnnotation(fromParam, NAMED_PARAM_TYPE) || hasAnnotation(fromParam, NAMED_DELEGATE_TYPE)) {
+            if (AnnotatedNodeUtils.hasAnnotation(fromParam, NAMED_PARAM_TYPE) || AnnotatedNodeUtils.hasAnnotation(fromParam, NAMED_DELEGATE_TYPE)) {
                 annoFound = true;
             }
         }
@@ -110,7 +110,7 @@ public class NamedVariantASTTransformation extends AbstractASTTransformation {
             processDelegateParam(mNode, mapParam, args, propNames, fromParams[0]);
         } else {
             for (Parameter fromParam : fromParams) {
-                if (hasAnnotation(fromParam, NAMED_PARAM_TYPE)) {
+                if (AnnotatedNodeUtils.hasAnnotation(fromParam, NAMED_PARAM_TYPE)) {
                     AnnotationNode namedParam = fromParam.getAnnotations(NAMED_PARAM_TYPE).get(0);
                     boolean required = memberHasValue(namedParam, "required", true);
                     if (getMemberValue(namedParam, "name") == null) {
@@ -134,7 +134,7 @@ public class NamedVariantASTTransformation extends AbstractASTTransformation {
                     args.addExpression(propX(varX(mapParam), name));
                     mapParam.addAnnotation(namedParam);
                     fromParam.getAnnotations().remove(namedParam);
-                } else if (hasAnnotation(fromParam, NAMED_DELEGATE_TYPE)) {
+                } else if (AnnotatedNodeUtils.hasAnnotation(fromParam, NAMED_DELEGATE_TYPE)) {
                     if (!processDelegateParam(mNode, mapParam, args, propNames, fromParam)) return;
                 } else {
                     args.addExpression(varX(fromParam));

http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 5f7f4f2..c14075f 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -23,6 +23,7 @@ import groovy.transform.CompilationUnitAware;
 import groovy.transform.MapConstructor;
 import groovy.transform.TupleConstructor;
 import groovy.transform.options.PropertyHandler;
+import org.apache.groovy.ast.tools.AnnotatedNodeUtils;
 import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.ast.AnnotatedNode;
 import org.codehaus.groovy.ast.AnnotationNode;
@@ -253,7 +254,7 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
             Collections.sort(params, includeComparator);
         }
 
-        boolean hasMapCons = hasAnnotation(cNode, MapConstructorASTTransformation.MY_TYPE);
+        boolean hasMapCons = AnnotatedNodeUtils.hasAnnotation(cNode, MapConstructorASTTransformation.MY_TYPE);
         int modifiers = getVisibility(anno, cNode, ConstructorNode.class, ACC_PUBLIC);
         ConstructorNode consNode = new ConstructorNode(modifiers, params.toArray(new Parameter[params.size()]), ClassNode.EMPTY_ARRAY, body);
         markAsGenerated(cNode, consNode);

http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
----------------------------------------------------------------------
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 d200fc5..b3a5add 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -4369,13 +4369,15 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         final Parameter[] parameters = closureExpression.getParameters();
         String name = parameter.getName();
 
-        if (parameters.length == 0) {
-            return "it".equals(name) && closureParamTypes.length != 0 ? closureParamTypes[0] : null;
-        }
+        if (parameters != null) {
+            if (parameters.length == 0) {
+                return "it".equals(name) && closureParamTypes.length != 0 ? closureParamTypes[0] : null;
+            }
 
-        for (int index = 0; index < parameters.length; index++) {
-            if (name.equals(parameters[index].getName())) {
-                return closureParamTypes.length > index ? closureParamTypes[index] : null;
+            for (int index = 0; index < parameters.length; index++) {
+                if (name.equals(parameters[index].getName())) {
+                    return closureParamTypes.length > index ? closureParamTypes[index] : null;
+                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/50526057/subprojects/groovy-groovydoc/build.gradle
----------------------------------------------------------------------
diff --git a/subprojects/groovy-groovydoc/build.gradle b/subprojects/groovy-groovydoc/build.gradle
index 9338cfb..67a7030 100644
--- a/subprojects/groovy-groovydoc/build.gradle
+++ b/subprojects/groovy-groovydoc/build.gradle
@@ -20,6 +20,7 @@ dependencies {
     compile rootProject
     testCompile rootProject.sourceSets.test.runtimeClasspath
     compile project(':groovy-templates')
+    runtime project(':groovy-dateutil')
     testCompile project(':groovy-test')
     testCompile project(':groovy-ant')
     testCompile "org.apache.ant:ant-testutil:$antVersion"