Browse Source

Merge pull request #7233 from ciscoheat/development

Java fix for Type.createInstance issue with anonymous structures.
Cauê Waneck 7 years ago
parent
commit
7ed3bbd83d
2 changed files with 22 additions and 1 deletions
  1. 4 1
      std/java/_std/Type.hx
  2. 18 0
      tests/unit/src/unit/issues/Issue7233.hx

+ 4 - 1
std/java/_std/Type.hx

@@ -145,7 +145,10 @@ enum ValueType {
 			for (arg in args) {
 			for (arg in args) {
 				argNum++;
 				argNum++;
 				var expectedType = argNum < ptypes.length ? ptypes[argNum] : ptypes[ptypes.length - 1]; // varags
 				var expectedType = argNum < ptypes.length ? ptypes[argNum] : ptypes[ptypes.length - 1]; // varags
-				if (arg == null || expectedType.isAssignableFrom(java.Lib.toNativeType(Type.getClass(arg)))) {
+				var isDynamic = Std.is(arg, DynamicObject) && expectedType.isAssignableFrom(java.Lib.getNativeType(arg));
+				var argType = Type.getClass(arg);
+
+				if (arg == null || isDynamic || (argType != null && expectedType.isAssignableFrom(java.Lib.toNativeType(argType)))) {
 					callArguments[argNum] = arg;
 					callArguments[argNum] = arg;
 				} else if (Std.is(arg, java.lang.Number)) {
 				} else if (Std.is(arg, java.lang.Number)) {
 					var name = expectedType.getName();
 					var name = expectedType.getName();

+ 18 - 0
tests/unit/src/unit/issues/Issue7233.hx

@@ -0,0 +1,18 @@
+package unit.issues;
+
+class Issue7233 extends unit.Test {
+	function test() {
+		var data = {name: "Test"};
+		var obj = Type.createInstance(TestClass, [data]);
+
+		eq("Test", obj.name);
+	}
+}
+
+private class TestClass {
+    public var name : String;
+
+    public function new(data) {
+        this.name = data.name;
+    }
+}