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() {