You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2017/01/28 16:08:14 UTC
[06/10] groovy git commit: GROOVY-8065: Map created as
org.springframework.http.HttpHeaders is empty in 2.4.8,
works fine in 2.4.7 (closes #480)
GROOVY-8065: Map created as org.springframework.http.HttpHeaders is empty in 2.4.8, works fine in 2.4.7 (closes #480)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/1358ed58
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/1358ed58
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/1358ed58
Branch: refs/heads/parrot
Commit: 1358ed58af0df10a959924816310f8f1c020aa50
Parents: e96a961
Author: paulk <pa...@asert.com.au>
Authored: Thu Jan 26 23:51:32 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Sat Jan 28 08:46:13 2017 +1000
----------------------------------------------------------------------
src/main/groovy/lang/MetaClassImpl.java | 21 ++++++-----
src/test/groovy/bugs/Groovy8065Bug.groovy | 48 ++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/1358ed58/src/main/groovy/lang/MetaClassImpl.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/lang/MetaClassImpl.java b/src/main/groovy/lang/MetaClassImpl.java
index d7d8d9b..93c013b 100644
--- a/src/main/groovy/lang/MetaClassImpl.java
+++ b/src/main/groovy/lang/MetaClassImpl.java
@@ -2686,18 +2686,15 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
}
//----------------------------------------------------------------------
- // turn setProperty on a Map to put on the Map itself
- //----------------------------------------------------------------------
- if (method == null && !isStatic && this.isMap) {
- ((Map) object).put(name, newValue);
- return;
- }
-
- //----------------------------------------------------------------------
// field
//----------------------------------------------------------------------
if (method == null && field != null) {
if (Modifier.isFinal(field.getModifiers())) {
+ // GROOVY-5985
+ if (!isStatic && this.isMap) {
+ ((Map) object).put(name, newValue);
+ return;
+ }
throw new ReadOnlyPropertyException(name, theClass);
}
if(!(this.isMap && isPrivateOrPkgPrivate(field.getModifiers()))) {
@@ -2742,6 +2739,14 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
}
//----------------------------------------------------------------------
+ // turn setProperty on a Map to put on the Map itself
+ //----------------------------------------------------------------------
+ if (method == null && !isStatic && this.isMap) {
+ ((Map) object).put(name, newValue);
+ return;
+ }
+
+ //----------------------------------------------------------------------
// error due to missing method/field
//----------------------------------------------------------------------
if (ambiguousListener) {
http://git-wip-us.apache.org/repos/asf/groovy/blob/1358ed58/src/test/groovy/bugs/Groovy8065Bug.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/bugs/Groovy8065Bug.groovy b/src/test/groovy/bugs/Groovy8065Bug.groovy
new file mode 100644
index 0000000..5c3f018
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy8065Bug.groovy
@@ -0,0 +1,48 @@
+/*
+ * 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 groovy.bugs
+
+class Groovy8065Bug extends GroovyTestCase {
+ void testMapWithCustomSetDuringAsTypeCast() {
+ assertScript '''
+ class MapWithSet extends LinkedHashMap {
+ void set(String k, String v) {
+ put(k.toLowerCase(), v.toUpperCase())
+ }
+ }
+ def m = [Foo: 'Bar'] as MapWithSet
+ assert m == [foo: 'BAR']
+ '''
+ }
+
+ void testMapWithPublicField() {
+ assertScript '''
+ class A extends HashMap {
+ public foo
+ }
+ def a = new A()
+ a.x = 1
+ assert a.x == 1
+ a.foo = 2
+ assert a.@foo == 2
+ assert a.foo == null
+ assert a == [x:1]
+ '''
+ }
+}