You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by jw...@apache.org on 2017/05/27 21:07:12 UTC

[1/6] groovy git commit: GROOVY-7979: Add JSONSlurper test case for the string "[-]".

Repository: groovy
Updated Branches:
  refs/heads/master 5462d5ff4 -> 0b6e8dcbb


GROOVY-7979: Add JSONSlurper test case for the string "[-]".


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

Branch: refs/heads/master
Commit: 5642335c09fe78a091fad8a7953e93f635a679ca
Parents: 5462d5f
Author: James Laverack <ja...@jameslaverack.com>
Authored: Sat May 13 13:38:34 2017 +0100
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat May 27 13:03:49 2017 -0700

----------------------------------------------------------------------
 .../src/test/groovy/groovy/json/JsonSlurperLaxTest.groovy           | 1 +
 .../groovy-json/src/test/groovy/groovy/json/JsonSlurperTest.groovy  | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/5642335c/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperLaxTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperLaxTest.groovy b/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperLaxTest.groovy
index f19b6a2..ca89ef0 100644
--- a/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperLaxTest.groovy
+++ b/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperLaxTest.groovy
@@ -37,6 +37,7 @@ class JsonSlurperLaxTest extends JsonSlurperTest {
         shouldFail(JsonException) { parser.parseText('{a"') }
         shouldFail(JsonException) { parser.parseText("[\"a\"") }
         shouldFail(JsonException) { parser.parseText('{"a"') }
+        shouldFail(JsonException) { parser.parseText('[-]') }
     }
 
     void testObjectWithSimpleValues() {

http://git-wip-us.apache.org/repos/asf/groovy/blob/5642335c/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperTest.groovy b/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperTest.groovy
index b8068df..9356825 100644
--- a/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperTest.groovy
+++ b/subprojects/groovy-json/src/test/groovy/groovy/json/JsonSlurperTest.groovy
@@ -274,6 +274,7 @@ class JsonSlurperTest extends GroovyTestCase {
         shouldFail(JsonException) { parser.parseText('["a"')        }
         shouldFail(JsonException) { parser.parseText('["a", ')      }
         shouldFail(JsonException) { parser.parseText('["a", true')  }
+        shouldFail(JsonException) { parser.parseText('[-]') }
     }
 
     void testBackSlashEscaping() {


[6/6] groovy git commit: GROOVY-7611: java.util.Optional should evaluate to false if empty (closes #545)

Posted by jw...@apache.org.
GROOVY-7611: java.util.Optional should evaluate to false if empty (closes #545)


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

Branch: refs/heads/master
Commit: 0b6e8dcbbc78fb7514b0db96a09c46fb1808e3e7
Parents: 7744159
Author: John Wagenleitner <jw...@apache.org>
Authored: Sun May 21 10:16:06 2017 -0700
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat May 27 13:39:08 2017 -0700

----------------------------------------------------------------------
 build.gradle                                    |  9 ++++
 gradle/docs.gradle                              |  5 +-
 .../stc/StaticTypeCheckingSupport.java          |  4 ++
 .../groovy/vmplugin/VMPluginFactory.java        | 25 ++++-----
 .../org/codehaus/groovy/vmplugin/vm8/Java8.java | 54 ++++++++++++++++++++
 .../vm8/PluginDefaultGroovyMethods.java         | 45 ++++++++++++++++
 .../vm8/PluginDefaultGroovyMethodsSCTest.groovy | 26 ++++++++++
 .../vm8/PluginDefaultGroovyMethodsTest.groovy   | 45 ++++++++++++++++
 8 files changed, 194 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index 47e0d19..e59b82e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -268,12 +268,18 @@ sourceSets {
                     'src/main',
                     "$generatedDirectory/src/main"
             ]
+            if (!JavaVersion.current().isJava8Compatible()) {
+                exclude '**/vm8/*'
+            }
         }
         groovy {
             srcDirs = [
                     'src/main',
                     "$generatedDirectory/src/main"
             ]
+            if (!JavaVersion.current().isJava8Compatible()) {
+                exclude '**/vm8/*'
+            }
         }
         resources {
             srcDirs = ['src/main', 'src/tools', 'src/resources']
@@ -292,6 +298,9 @@ sourceSets {
     test {
         groovy {
             srcDirs = ['src/test']
+            if (!JavaVersion.current().isJava8Compatible()) {
+                exclude '**/vm8/*'
+            }
         }
         resources {
             srcDirs = ['src/test-resources']

http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/gradle/docs.gradle
----------------------------------------------------------------------
diff --git a/gradle/docs.gradle b/gradle/docs.gradle
index d7843ab..936da47 100644
--- a/gradle/docs.gradle
+++ b/gradle/docs.gradle
@@ -143,7 +143,7 @@ task docGDK {
                     arg(value: '-link')
                     arg(value: 'groovy,org.codehaus.groovy=http://docs.groovy-lang.org/latest/html/gapi/')
                     arg(value: '-link')
-                    arg(value: 'java,org.xml,javax,org.w3c=http://docs.oracle.com/javase/7/docs/api/')
+                    arg(value: 'java,org.xml,javax,org.w3c=http://docs.oracle.com/javase/8/docs/api/')
                     // either package name if in core or fully qualified path otherwise
                     arg(value: 'org.codehaus.groovy.runtime.DefaultGroovyMethods')
                     arg(value: 'org.codehaus.groovy.runtime.DefaultGroovyStaticMethods')
@@ -155,8 +155,7 @@ task docGDK {
                     arg(value: 'org.codehaus.groovy.runtime.SocketGroovyMethods')
                     arg(value: 'org.codehaus.groovy.runtime.StringGroovyMethods')
                     arg(value: 'org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods')
-                    arg(value: 'org.codehaus.groovy.vmplugin.v6.PluginDefaultGroovyMethods')
-                    arg(value: 'org.codehaus.groovy.vmplugin.v6.PluginStaticGroovyMethods')
+                    arg(value: 'org.codehaus.groovy.vmplugin.vm8.PluginDefaultGroovyMethods')
                     // TODO don't hard-code these
                     arg(value: 'subprojects/groovy-sql/src/main/java/org/codehaus/groovy/runtime/SqlGroovyMethods.java')
                     arg(value: 'subprojects/groovy-swing/src/main/java/org/codehaus/groovy/runtime/SwingGroovyMethods.java')

http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index d9a477d..1aebf93 100644
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -37,6 +37,7 @@ import org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule;
 import org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl;
 import org.codehaus.groovy.tools.GroovyClass;
 import org.codehaus.groovy.transform.trait.Traits;
+import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.objectweb.asm.Opcodes;
 
 import java.lang.ref.WeakReference;
@@ -2124,6 +2125,9 @@ public abstract class StaticTypeCheckingSupport {
             instanceExtClasses.add(FloatArrayStaticTypesHelper.class);
             instanceExtClasses.add(DoubleArrayStaticTypesHelper.class);
 
+            Collections.addAll(instanceExtClasses, VMPluginFactory.getPlugin().getPluginDefaultGroovyMethods());
+            Collections.addAll(staticExtClasses, VMPluginFactory.getPlugin().getPluginStaticGroovyMethods());
+
             scanClassesForDGMMethods(methods, staticExtClasses, true);
             scanClassesForDGMMethods(methods, instanceExtClasses, false);
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/src/main/org/codehaus/groovy/vmplugin/VMPluginFactory.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/vmplugin/VMPluginFactory.java b/src/main/org/codehaus/groovy/vmplugin/VMPluginFactory.java
index 127f65e..fe625fb 100644
--- a/src/main/org/codehaus/groovy/vmplugin/VMPluginFactory.java
+++ b/src/main/org/codehaus/groovy/vmplugin/VMPluginFactory.java
@@ -18,6 +18,8 @@
  */
 package org.codehaus.groovy.vmplugin;
 
+import org.codehaus.groovy.vmplugin.v7.Java7;
+
 /**
  * Factory class to get functionality based on the VM version.
  * The usage of this class is not for public use, only for the
@@ -26,26 +28,17 @@ package org.codehaus.groovy.vmplugin;
  */
 public class VMPluginFactory {
 
-    private static final String JDK5_CLASSNAME_CHECK = "java.lang.annotation.Annotation";
-    private static final String JDK6_CLASSNAME_CHECK = "javax.script.ScriptEngine";
-    private static final String JDK7_CLASSNAME_CHECK = "java.util.Objects";
-
-    private static final String JDK5_PLUGIN_NAME = "org.codehaus.groovy.vmplugin.v5.Java5";
-    private static final String JDK6_PLUGIN_NAME = "org.codehaus.groovy.vmplugin.v6.Java6";
-    private static final String JDK7_PLUGIN_NAME = "org.codehaus.groovy.vmplugin.v7.Java7";
+    private static final String JDK8_CLASSNAME_CHECK = "java.util.Optional";
+    private static final String JDK8_PLUGIN_NAME = "org.codehaus.groovy.vmplugin.vm8.Java8";
 
-    private static VMPlugin plugin;
+    private static final VMPlugin plugin;
 
     static {
-        plugin = createPlugin(JDK7_CLASSNAME_CHECK, JDK7_PLUGIN_NAME);
-        if (plugin == null) {
-            // v6 plugin is the same as v5 but with some scripting stuff
-            // so check below is good enough for now (can be true for JVM 5)
-            plugin = createPlugin(JDK6_CLASSNAME_CHECK, JDK6_PLUGIN_NAME);
-        }
-        if (plugin == null) {
-            plugin = createPlugin(JDK5_CLASSNAME_CHECK, JDK5_PLUGIN_NAME);
+        VMPlugin target = createPlugin(JDK8_CLASSNAME_CHECK, JDK8_PLUGIN_NAME);
+        if (target == null) {
+            target = new Java7();
         }
+        plugin = target;
     }
 
     public static VMPlugin getPlugin() {

http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/src/main/org/codehaus/groovy/vmplugin/vm8/Java8.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/vmplugin/vm8/Java8.java b/src/main/org/codehaus/groovy/vmplugin/vm8/Java8.java
new file mode 100644
index 0000000..905af38
--- /dev/null
+++ b/src/main/org/codehaus/groovy/vmplugin/vm8/Java8.java
@@ -0,0 +1,54 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.vmplugin.vm8;
+
+import org.codehaus.groovy.vmplugin.v7.Java7;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Java 8 based functions.
+ *
+ * @since 2.5.0
+ */
+public class Java8 extends Java7 {
+
+    private final Class<?>[] PLUGIN_DGM;
+
+    public Java8() {
+        super();
+        List<Class<?>> dgmClasses = new ArrayList<>();
+        Collections.addAll(dgmClasses, (Class<?>[]) super.getPluginDefaultGroovyMethods());
+        dgmClasses.add(PluginDefaultGroovyMethods.class);
+        PLUGIN_DGM = dgmClasses.toArray(new Class<?>[0]);
+    }
+
+    @Override
+    public Class<?>[] getPluginDefaultGroovyMethods() {
+        return PLUGIN_DGM;
+    }
+
+    @Override
+    public int getVersion() {
+        return 8;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/src/main/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethods.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethods.java b/src/main/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethods.java
new file mode 100644
index 0000000..7ae5321
--- /dev/null
+++ b/src/main/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethods.java
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.vmplugin.vm8;
+
+import java.util.Optional;
+
+/**
+ * Defines new Groovy methods which appear on normal JDK 8
+ * classes inside the Groovy environment.
+ *
+ * @since 2.5.0
+ */
+public class PluginDefaultGroovyMethods {
+
+    // No instances, static methods only
+    private PluginDefaultGroovyMethods() {
+    }
+
+    /**
+     * Coerce an Optional instance to a boolean value.
+     *
+     * @param optional the Optional
+     * @return {@code true} if a value is present, otherwise {@code false}
+     */
+    public static boolean asBoolean(Optional<?> optional) {
+        return optional.isPresent();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsSCTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsSCTest.groovy b/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsSCTest.groovy
new file mode 100644
index 0000000..373403c
--- /dev/null
+++ b/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsSCTest.groovy
@@ -0,0 +1,26 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.vmplugin.vm8
+
+import org.codehaus.groovy.classgen.asm.sc.StaticCompilationTestSupport
+
+class PluginDefaultGroovyMethodsSCTest
+        extends PluginDefaultGroovyMethodsTest
+        implements StaticCompilationTestSupport {
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/0b6e8dcb/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsTest.groovy b/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsTest.groovy
new file mode 100644
index 0000000..5afe05e
--- /dev/null
+++ b/src/test/org/codehaus/groovy/vmplugin/vm8/PluginDefaultGroovyMethodsTest.groovy
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.vmplugin.vm8
+
+import groovy.transform.stc.StaticTypeCheckingTestCase
+
+class PluginDefaultGroovyMethodsTest extends StaticTypeCheckingTestCase {
+
+    // GROOVY-7611
+    void testOptionalAsBoolean() {
+        assertScript '''
+            boolean m() {
+                assert Optional.of('foo')
+                assert !Optional.empty()
+                assert !Optional.ofNullable(null)
+
+                def x = Optional.empty() ? 1 : -1
+                assert x == -1
+
+                x = Optional.ofNullable(null) ? 1 : -1
+                assert x == -1
+                
+                Optional.empty()
+            }            
+            assert !m()
+        '''
+    }
+
+}


[4/6] groovy git commit: Remove pointless sign handling (closes #552)

Posted by jw...@apache.org.
Remove pointless sign handling (closes #552)

This code is useless as both of these code paths ultimately call out to
`CharScanner#parseIntFromTo` which handles the negative sign.


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

Branch: refs/heads/master
Commit: e2640dd5771c5e1ecab9d75c690d291beb05da4d
Parents: 1dd9009
Author: James Laverack <ja...@jameslaverack.com>
Authored: Fri May 26 22:15:21 2017 +0100
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat May 27 13:30:24 2017 -0700

----------------------------------------------------------------------
 .../java/groovy/json/internal/NumberValue.java     | 17 +++--------------
 1 file changed, 3 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/e2640dd5/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java b/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
index 6fbdbcf..f6e415c 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
@@ -110,16 +110,10 @@ public class NumberValue extends java.lang.Number implements Value {
             case DOUBLE:
                 return bigDecimalValue();
             case INTEGER:
-                int sign = 1;
-                if (buffer[startIndex] == '-') {
-                    startIndex++;
-                    sign = -1;
-                }
-
                 if (isInteger(buffer, startIndex, endIndex - startIndex)) {
-                    return intValue() * sign;
+                    return intValue();
                 } else {
-                    return longValue() * sign;
+                    return longValue();
                 }
         }
         die();
@@ -174,12 +168,7 @@ public class NumberValue extends java.lang.Number implements Value {
     }
 
     public int intValue() {
-        int sign = 1;
-        if (buffer[startIndex] == '-') {
-            startIndex++;
-            sign = -1;
-        }
-        return parseIntFromTo(buffer, startIndex, endIndex) * sign;
+        return parseIntFromTo(buffer, startIndex, endIndex);
     }
 
     public long longValue() {


[5/6] groovy git commit: refactor: type safety and formatting (closes #544)

Posted by jw...@apache.org.
refactor: type safety and formatting (closes #544)


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

Branch: refs/heads/master
Commit: 774415910b4f34eb09e0fa2154be91df3902974d
Parents: e2640dd
Author: John Wagenleitner <jw...@apache.org>
Authored: Sat May 20 09:00:23 2017 -0700
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat May 27 13:39:00 2017 -0700

----------------------------------------------------------------------
 .../transform/AnnotationCollectorTransform.java | 53 ++++++++++++--------
 .../codehaus/groovy/transform/trait/Traits.java | 12 ++---
 2 files changed, 39 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/77441591/src/main/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/AnnotationCollectorTransform.java b/src/main/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
index cf153f7..9e2059c 100644
--- a/src/main/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
+++ b/src/main/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
@@ -97,8 +97,9 @@ public class AnnotationCollectorTransform {
                     break;
                 }
             }
-            if (collector==null) return;
-            
+            if (collector == null) {
+                return;
+            }
             // force final class, remove interface, annotation, enum and abstract modifiers
             cn.setModifiers((ACC_FINAL+cn.getModifiers()) & ~(ACC_ENUM|ACC_INTERFACE|ACC_ANNOTATION|ACC_ABSTRACT));
             // force Object super class
@@ -124,7 +125,9 @@ public class AnnotationCollectorTransform {
             // remove annotations
             for (ListIterator<AnnotationNode> it = cn.getAnnotations().listIterator(); it.hasNext();) {
                 AnnotationNode an = it.next();
-                if (an==collector) continue;
+                if (an == collector) {
+                    continue;
+                }
                 it.remove();
             }
         }
@@ -157,8 +160,7 @@ public class AnnotationCollectorTransform {
             List<Expression> l = new ArrayList<Expression>(2);
             l.add(new ClassExpression(an.getClassNode()));
             l.add(map);
-            ArrayExpression ae = new ArrayExpression(ClassHelper.OBJECT_TYPE, l);
-            return ae;
+            return new ArrayExpression(ClassHelper.OBJECT_TYPE, l);
         }
     }
     
@@ -177,14 +179,18 @@ public class AnnotationCollectorTransform {
 
     private List<AnnotationNode> getTargetListFromValue(AnnotationNode collector, AnnotationNode aliasAnnotationUsage, SourceUnit source) {
         Expression memberValue = collector.getMember("value");
-        if (memberValue == null) return Collections.EMPTY_LIST;
+        if (memberValue == null) {
+            return Collections.emptyList();
+        }
         if (!(memberValue instanceof ListExpression)) {
             addError("Annotation collector expected a list of classes, but got a "+memberValue.getClass(), collector, source);
-            return Collections.EMPTY_LIST;
+            return Collections.emptyList();
         }
         ListExpression memberListExp = (ListExpression) memberValue;
         List<Expression> memberList = memberListExp.getExpressions();
-        if (memberList.isEmpty()) return Collections.EMPTY_LIST;
+        if (memberList.isEmpty()) {
+            return Collections.emptyList();
+        }
         List<AnnotationNode> ret = new ArrayList<AnnotationNode>();
         for (Expression e : memberList) {
             AnnotationNode toAdd = new AnnotationNode(e.getType());
@@ -214,8 +220,9 @@ public class AnnotationCollectorTransform {
 
     private static List<AnnotationNode> getTargetListFromAnnotations(ClassNode alias) {
         List<AnnotationNode> annotations = alias.getAnnotations();
-        if (annotations.size() < 2) return Collections.EMPTY_LIST;
-        
+        if (annotations.size() < 2) {
+            return Collections.emptyList();
+        }
         List<AnnotationNode> ret = new ArrayList<AnnotationNode>(annotations.size());
         for (AnnotationNode an : annotations) {
             ClassNode type = an.getClassNode();
@@ -251,29 +258,33 @@ public class AnnotationCollectorTransform {
     }
     
     private static List<AnnotationNode> makeListOfAnnotations(Object[][] data) {
-        if (data.length==0) return Collections.EMPTY_LIST;
-
+        if (data.length == 0) {
+            return Collections.emptyList();
+        }
         List<AnnotationNode> ret = new ArrayList<AnnotationNode>(data.length);
         for (Object[] inner : data) {
-            Class anno = (Class) inner[0];
+            Class<?> anno = (Class) inner[0];
             AnnotationNode toAdd = new AnnotationNode(ClassHelper.make(anno));
             ret.add(toAdd);
 
             @SuppressWarnings("unchecked")
             Map<String,Object> member = (Map<String, Object>) inner[1];
-            if (member.isEmpty()) continue;
+            if (member.isEmpty()) {
+                continue;
+            }
             Map<String, Expression> generated = new HashMap<String, Expression>(member.size());
-            for (String name : member.keySet()) {
-                Object val = member.get(name);
-                generated.put(name, makeExpression(val));
+            for (Map.Entry<String, Object> entry : member.entrySet()) {
+                generated.put(entry.getKey(), makeExpression(entry.getValue()));
             }
             copyMembers(generated, toAdd);
         }
         return ret;
     }
-    
+
     private static Expression makeExpression(Object o) {
-        if (o instanceof Class) return new ClassExpression(ClassHelper.make((Class) o));
+        if (o instanceof Class) {
+            return new ClassExpression(ClassHelper.make((Class) o));
+        }
         //TODO: value as Annotation here!
         if (o instanceof Object[][]) {
             List<AnnotationNode> annotations = makeListOfAnnotations((Object[][])o);
@@ -305,7 +316,9 @@ public class AnnotationCollectorTransform {
         List<AnnotationNode> stored     = getStoredTargetList(aliasAnnotationUsage, source);
         List<AnnotationNode> targetList = getTargetListFromValue(collector, aliasAnnotationUsage, source);
         int size = targetList.size()+stored.size();
-        if (size==0) return Collections.EMPTY_LIST;
+        if (size == 0) {
+            return Collections.emptyList();
+        }
         List<AnnotationNode> ret = new ArrayList<AnnotationNode>(size);
         ret.addAll(stored);
         ret.addAll(targetList);

http://git-wip-us.apache.org/repos/asf/groovy/blob/77441591/src/main/org/codehaus/groovy/transform/trait/Traits.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/trait/Traits.java b/src/main/org/codehaus/groovy/transform/trait/Traits.java
index 508af26..2143ff1 100644
--- a/src/main/org/codehaus/groovy/transform/trait/Traits.java
+++ b/src/main/org/codehaus/groovy/transform/trait/Traits.java
@@ -55,7 +55,7 @@ import java.util.List;
 public abstract class Traits {
     public static final ClassNode IMPLEMENTED_CLASSNODE = ClassHelper.make(Implemented.class);
     public static final ClassNode TRAITBRIDGE_CLASSNODE = ClassHelper.make(TraitBridge.class);
-    public static final Class TRAIT_CLASS = Trait.class;
+    public static final Class<Trait> TRAIT_CLASS = Trait.class;
     public static final ClassNode TRAIT_CLASSNODE = ClassHelper.make(TRAIT_CLASS);
     public static final ClassNode GENERATED_PROXY_CLASSNODE = ClassHelper.make(GeneratedGroovyProxy.class);
     public static final ClassNode SELFTYPE_CLASSNODE = ClassHelper.make(SelfType.class);
@@ -163,7 +163,7 @@ public abstract class Traits {
      * @param clazz a class to test
      * @return true if the classnode represents a trait
      */
-    public static boolean isTrait(final Class clazz) {
+    public static boolean isTrait(final Class<?> clazz) {
         return clazz!=null && clazz.getAnnotation(Trait.class)!=null;
     }
 
@@ -217,7 +217,7 @@ public abstract class Traits {
         if (annotation==null) {
             return null;
         }
-        Class aClass = annotation.traitClass();
+        Class<?> aClass = annotation.traitClass();
         String desc = annotation.desc();
         for (Method method : aClass.getDeclaredMethods()) {
             String methodDescriptor = BytecodeHelper.getMethodDescriptor(method.getReturnType(), method.getParameterTypes());
@@ -355,7 +355,7 @@ public abstract class Traits {
      */
     @Retention(RetentionPolicy.RUNTIME)
     @Target(ElementType.METHOD)
-    public static @interface Implemented {}
+    public @interface Implemented {}
 
     /**
      * Internal annotation used to indicate that a method is a bridge method to a trait
@@ -363,11 +363,11 @@ public abstract class Traits {
      */
     @Retention(RetentionPolicy.RUNTIME)
     @Target(ElementType.METHOD)
-     public static @interface TraitBridge {
+     public @interface TraitBridge {
         /**
          * @return the trait class
          */
-        Class traitClass();
+        Class<?> traitClass();
 
         /**
          * @return The method descriptor of the method from the trait


[3/6] groovy git commit: GROOVY-7979: Add check for end of negative number

Posted by jw...@apache.org.
GROOVY-7979: Add check for end of negative number

The check for the minus sign increments the character index by one. A
check is added to ensure that this does not go over the end of the
expected character substring.


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

Branch: refs/heads/master
Commit: 257c2751ca8aa54db6cddac9b38270b9913b374c
Parents: 5642335
Author: James Laverack <ja...@jameslaverack.com>
Authored: Sun May 14 20:21:43 2017 +0100
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat May 27 13:03:55 2017 -0700

----------------------------------------------------------------------
 .../java/groovy/json/internal/CharScanner.java    | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/257c2751/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java b/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
index f226fa4..596c648 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/internal/CharScanner.java
@@ -155,6 +155,9 @@ public class CharScanner {
                 offset++;
                 negative = true;
             }
+            if (offset >= to) {
+                die();
+            }
             num = (digitChars[offset] - '0');
             if (++offset < to) {
                 num = (num * 10) + (digitChars[offset] - '0');
@@ -197,7 +200,9 @@ public class CharScanner {
             offset++;
             negative = true;
         }
-
+        if (offset >= to) {
+            die();
+        }
         c = digitChars[offset];
         num = (c - '0');
         offset++;
@@ -220,7 +225,9 @@ public class CharScanner {
             offset++;
             negative = true;
         }
-
+        if (offset >= to) {
+            die();
+        }
         c = digitChars[offset];
         num = (c - '0');
         offset++;
@@ -243,7 +250,9 @@ public class CharScanner {
             offset++;
             negative = true;
         }
-
+        if (offset >= to) {
+            die();
+        }
         c = digitChars[offset];
         num = (c - '0');
         offset++;
@@ -289,6 +298,9 @@ public class CharScanner {
         if (buffer[index] == '-') {
             index++;
         }
+        if (index >= max) {
+            die();
+        }
 
         boolean foundDot = false;
         for (; index < max; index++) {


[2/6] groovy git commit: GROOVY-7979: Check for single minus in NumberValue

Posted by jw...@apache.org.
GROOVY-7979: Check for single minus in NumberValue

This check is performed at the time of parsing, rather than while
reading the return from `JsonSlurper`. The intent is that the slurper
should, to the best of it's ability, give you a structure which is
valid.


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

Branch: refs/heads/master
Commit: 1dd90096d15ca504ecc7b1714ea3c9f7dd46601c
Parents: 257c275
Author: James Laverack <ja...@jameslaverack.com>
Authored: Fri May 26 22:10:44 2017 +0100
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat May 27 13:03:55 2017 -0700

----------------------------------------------------------------------
 .../src/main/java/groovy/json/internal/NumberValue.java        | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/1dd90096/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java b/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
index ec2a95a..6fbdbcf 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/internal/NumberValue.java
@@ -66,6 +66,12 @@ public class NumberValue extends java.lang.Number implements Value {
         } catch (Exception ex) {
             Exceptions.handle(sputs("exception", ex, "start", startIndex, "end", endIndex), ex);
         }
+
+        // Check for a single minus now, rather than finding out later during lazy parsing.
+        if (this.endIndex - this.startIndex == 1 && this.buffer[this.startIndex] == '-') {
+            die("A single minus is not a valid number");
+        }
+
     }
 
     public String toString() {