瀏覽代碼

[java] fix boolean args in Type.createInstance() (fixes #9025)

Aleksandr Kuzmenko 5 年之前
父節點
當前提交
787a9caf47
共有 2 個文件被更改,包括 18 次插入0 次删除
  1. 2 0
      std/java/_std/Type.hx
  2. 16 0
      tests/unit/src/unit/issues/Issue9025.hx

+ 2 - 0
std/java/_std/Type.hx

@@ -142,6 +142,8 @@ enum ValueType {
 
 				if (arg == null || isDynamic || (argType != null && expectedType.isAssignableFrom(java.Lib.toNativeType(argType)))) {
 					callArguments[argNum] = arg;
+				} else if(expectedType.getName() == 'boolean' && (cast argType:java.lang.Class<Dynamic>).getName() == 'java.lang.Boolean') {
+					callArguments[argNum] = (cast arg : java.lang.Boolean).booleanValue();
 				} else if (Std.isOfType(arg, java.lang.Number)) {
 					var name = expectedType.getName();
 					switch (name) {

+ 16 - 0
tests/unit/src/unit/issues/Issue9025.hx

@@ -0,0 +1,16 @@
+package unit.issues;
+
+class Issue9025 extends unit.Test {
+	function test() {
+		var a:A = Type.createInstance(A, [true]);
+		t(a.field);
+	}
+}
+
+@:keep
+private class A {
+	public var field:Bool = false;
+	public function new(b:Bool) {
+		field = b;
+	}
+}