You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2019/11/08 22:02:21 UTC

[royale-asjs] branch develop updated: Fix: Don't try to coerce to 'any' type.

This is an automated email from the ASF dual-hosted git repository.

gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 25295a3  Fix: Don't try to coerce to 'any' type.
25295a3 is described below

commit 25295a31d1bcdc658d22bae8effdd9304540ac9d
Author: greg-dove <gr...@gmail.com>
AuthorDate: Sat Nov 9 11:02:01 2019 +1300

    Fix: Don't try to coerce to 'any' type.
---
 .../royale/org/apache/royale/reflection/AccessorDefinition.as  | 10 +++++++---
 .../royale/org/apache/royale/reflection/VariableDefinition.as  | 10 +++++++---
 .../flexUnitTests/reflection/ReflectionTesterTestEdgeCases.as  |  9 +++++++++
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/AccessorDefinition.as b/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/AccessorDefinition.as
index bc2c7b8..310143d 100644
--- a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/AccessorDefinition.as
+++ b/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/AccessorDefinition.as
@@ -122,11 +122,15 @@ package org.apache.royale.reflection {
             }
 			var fieldName:String = name;
             if (uri) fieldName = QName.getAsObjectAccessFormat(uri, fieldName);
-            var valueClass:Class = getDefinitionByName(_rawData.type);
+            var valueClass:Class;
+            var type:String = _rawData.type;
+            if (type && type != '*') {
+                valueClass = getDefinitionByName(type);
+            }
 			if (isStatic) {
 				_setter = function(value:*):* {
                     //coerce
-                    value = Language.as(value, valueClass, true);
+                    if (valueClass) value = Language.as(value, valueClass, true);
 					cl[fieldName] = value
 				}
 			} else {
@@ -135,7 +139,7 @@ package org.apache.royale.reflection {
 						if (arguments.length != 2 || (!(instance is cl))) throw 'invalid setValue parameters';
 					}
                     //coerce
-                    value = Language.as(value, valueClass, true);
+                    if (valueClass) value = Language.as(value, valueClass, true);
 					instance[fieldName] = value;
 				}
 			}
diff --git a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/VariableDefinition.as b/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/VariableDefinition.as
index 1c9b161..b225ee0 100755
--- a/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/VariableDefinition.as
+++ b/frameworks/projects/Reflection/src/main/royale/org/apache/royale/reflection/VariableDefinition.as
@@ -122,7 +122,11 @@ package org.apache.royale.reflection
    
 			COMPILE::JS {
 				var f:Function = _rawData.get_set;
-				var valueClass:Class = getDefinitionByName(_rawData.type);
+				var valueClass:Class;
+				var type:String = _rawData.type;
+				if (type && type != '*') {
+					valueClass = getDefinitionByName(type);
+				}
 				if (isStatic) {
 					_setter = function(value:*):* {
                         if (goog.DEBUG) {
@@ -130,7 +134,7 @@ package org.apache.royale.reflection
 							//todo: more robust runtime checking of value here for debug mode
                         }
 						//coerce
-						value = Language.as(value, valueClass, true);
+						if (valueClass) value = Language.as(value, valueClass, true);
                         f(value);
                     }
 				} else {
@@ -140,7 +144,7 @@ package org.apache.royale.reflection
 							//todo: more robust runtime checking of value here for debug mode
 						}
 						//coerce
-						value = Language.as(value, valueClass, true);
+						if (valueClass) value = Language.as(value, valueClass, true);
 						f(instance, value);
 					}
 				}
diff --git a/frameworks/projects/Reflection/src/test/royale/flexUnitTests/reflection/ReflectionTesterTestEdgeCases.as b/frameworks/projects/Reflection/src/test/royale/flexUnitTests/reflection/ReflectionTesterTestEdgeCases.as
index ff4f6c0..557ef2c 100644
--- a/frameworks/projects/Reflection/src/test/royale/flexUnitTests/reflection/ReflectionTesterTestEdgeCases.as
+++ b/frameworks/projects/Reflection/src/test/royale/flexUnitTests/reflection/ReflectionTesterTestEdgeCases.as
@@ -296,6 +296,8 @@ package flexUnitTests.reflection
             assertEquals( TestClass6.testnamespace::myStaticAccessor,'setViaCustomNSReflection', 'unexpected accessor post-write access result');
         
         }
+        
+        public static var anything:*;
     
         [Test]
         public function testWrongSetValueType():void{
@@ -315,6 +317,13 @@ package flexUnitTests.reflection
             var accessorTestDef:AccessorDefinition = subset[0];
             accessorTestDef.setValue(inst, 0.0);
             assertStrictlyEquals(inst.accessorTest, '0', 'unexpected assigned value');
+            
+            def = describeType(this);
+            collection = getMembers(def,true,MemberTypes.VARIABLES|MemberTypes.STATIC_ONLY);
+            subset = getMembersWithNameMatch(collection,'anything');
+            testVarDef = subset[0];
+            testVarDef.setValue('anything');
+            assertStrictlyEquals(ReflectionTesterTestEdgeCases.anything, 'anything', 'unexpected assigned value');
         }
         
     }