-
Notifications
You must be signed in to change notification settings - Fork 147
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[J2KT] Add VarargOverloads to j2ktnotpassing and extend varargs reada…
…ble to include vararg method call with null array. PiperOrigin-RevId: 599168312
- Loading branch information
1 parent
94fbcf4
commit e2293ba
Showing
7 changed files
with
244 additions
and
29 deletions.
There are no files selected for viewing
89 changes: 89 additions & 0 deletions
89
transpiler/javatests/com/google/j2cl/readable/java/j2ktnotpassing/VarargOverloads.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
/* | ||
* Copyright 2024 Google Inc. | ||
* | ||
* Licensed 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 | ||
* | ||
* https://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 j2ktnotpassing; | ||
|
||
// TODO(b/319620723): Move to j2kt readable when the bug is fixed. | ||
// Kotlin requires explicit overload conflict resolution for method calls with empty varargs. | ||
class VarargOverloads { | ||
static class NewInstanceOverload { | ||
NewInstanceOverload(int foo, Object... object) {} | ||
|
||
NewInstanceOverload(int foo, String... object) {} | ||
|
||
static void test() { | ||
new NewInstanceOverload(0); | ||
} | ||
} | ||
|
||
static class ThisConstructorCallOverload { | ||
ThisConstructorCallOverload(Object... object) {} | ||
|
||
ThisConstructorCallOverload(String... object) {} | ||
|
||
ThisConstructorCallOverload(int foo) { | ||
this(); | ||
} | ||
} | ||
|
||
static class SuperConstructorCallOverload { | ||
SuperConstructorCallOverload(Object... object) {} | ||
|
||
SuperConstructorCallOverload(String... object) {} | ||
|
||
static class Explicit extends SuperConstructorCallOverload { | ||
Explicit() { | ||
super(); | ||
} | ||
} | ||
|
||
static class Implicit extends SuperConstructorCallOverload { | ||
Implicit() {} | ||
} | ||
|
||
static class FromImplicitConstructor extends SuperConstructorCallOverload {} | ||
} | ||
|
||
static class MethodCallOverload { | ||
void method(Object... object) {} | ||
|
||
void method(String... object) {} | ||
|
||
void test() { | ||
method(); | ||
} | ||
} | ||
|
||
static class MethodCallOverloadInSubtype { | ||
void method(Object... object) {} | ||
|
||
static class Subtype extends MethodCallOverloadInSubtype { | ||
void method(String... object) {} | ||
|
||
void test() { | ||
method(); | ||
} | ||
} | ||
} | ||
|
||
enum EnumWithOverloadedConstructors { | ||
CONSTRUCTOR_OVERLOAD, | ||
SUPER_CONSTRUCTOR_OVERLOAD {}; | ||
|
||
EnumWithOverloadedConstructors(Object... args) {} | ||
|
||
EnumWithOverloadedConstructors(String... args) {} | ||
} | ||
} |
120 changes: 120 additions & 0 deletions
120
...r/javatests/com/google/j2cl/readable/java/j2ktnotpassing/output_kt/VarargOverloads.kt.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
// Generated from "j2ktnotpassing/VarargOverloads.java" | ||
@file:Suppress( | ||
"ALWAYS_NULL", | ||
"PARAMETER_NAME_CHANGED_ON_OVERRIDE", | ||
"REPEATED_BOUND", | ||
"SENSELESS_COMPARISON", | ||
"UNCHECKED_CAST", | ||
"UNNECESSARY_LATEINIT", | ||
"UNNECESSARY_NOT_NULL_ASSERTION", | ||
"UNREACHABLE_CODE", | ||
"UNUSED_ANONYMOUS_PARAMETER", | ||
"UNUSED_PARAMETER", | ||
"UNUSED_VARIABLE", | ||
"USELESS_CAST", | ||
"VARIABLE_IN_SINGLETON_WITHOUT_THREAD_LOCAL", | ||
"VARIABLE_WITH_REDUNDANT_INITIALIZER") | ||
|
||
package j2ktnotpassing | ||
|
||
import javaemul.lang.* | ||
import kotlin.Any | ||
import kotlin.Array | ||
import kotlin.Int | ||
import kotlin.String | ||
import kotlin.Suppress | ||
import kotlin.jvm.JvmStatic | ||
|
||
open class VarargOverloads internal constructor() { | ||
open class NewInstanceOverload { | ||
internal constructor(foo: Int, vararg `object`: Any?) { | ||
val object_1: Array<Any?>? = `object` as Array<Any?>? | ||
} | ||
|
||
internal constructor(foo: Int, vararg `object`: String?) { | ||
val object_1: Array<String?>? = `object` as Array<String?>? | ||
} | ||
|
||
companion object { | ||
@JvmStatic | ||
internal fun test_pp_j2ktnotpassing() { | ||
VarargOverloads.NewInstanceOverload(0) | ||
} | ||
} | ||
} | ||
|
||
open class ThisConstructorCallOverload { | ||
internal constructor(vararg `object`: Any?) { | ||
val object_1: Array<Any?>? = `object` as Array<Any?>? | ||
} | ||
|
||
internal constructor(vararg `object`: String?) { | ||
val object_1: Array<String?>? = `object` as Array<String?>? | ||
} | ||
|
||
internal constructor(foo: Int): this() | ||
} | ||
|
||
open class SuperConstructorCallOverload { | ||
internal constructor(vararg `object`: Any?) { | ||
val object_1: Array<Any?>? = `object` as Array<Any?>? | ||
} | ||
|
||
internal constructor(vararg `object`: String?) { | ||
val object_1: Array<String?>? = `object` as Array<String?>? | ||
} | ||
|
||
open class Explicit: VarargOverloads.SuperConstructorCallOverload { | ||
internal constructor(): super() | ||
} | ||
|
||
open class Implicit: VarargOverloads.SuperConstructorCallOverload { | ||
internal constructor() | ||
} | ||
|
||
open class FromImplicitConstructor internal constructor(): VarargOverloads.SuperConstructorCallOverload() {} | ||
} | ||
|
||
open class MethodCallOverload internal constructor() { | ||
internal open fun method_pp_j2ktnotpassing(vararg `object`: Any?) { | ||
val object_1: Array<Any?>? = `object` as Array<Any?>? | ||
} | ||
|
||
internal open fun method_pp_j2ktnotpassing(vararg `object`: String?) { | ||
val object_1: Array<String?>? = `object` as Array<String?>? | ||
} | ||
|
||
internal open fun test_pp_j2ktnotpassing() { | ||
this.method_pp_j2ktnotpassing() | ||
} | ||
} | ||
|
||
open class MethodCallOverloadInSubtype internal constructor() { | ||
internal open fun method_pp_j2ktnotpassing(vararg `object`: Any?) { | ||
val object_1: Array<Any?>? = `object` as Array<Any?>? | ||
} | ||
|
||
open class Subtype internal constructor(): VarargOverloads.MethodCallOverloadInSubtype() { | ||
internal open fun method_pp_j2ktnotpassing(vararg `object`: String?) { | ||
val object_1: Array<String?>? = `object` as Array<String?>? | ||
} | ||
|
||
internal open fun test_pp_j2ktnotpassing() { | ||
this.method_pp_j2ktnotpassing() | ||
} | ||
} | ||
} | ||
|
||
enum class EnumWithOverloadedConstructors { | ||
CONSTRUCTOR_OVERLOAD, | ||
SUPER_CONSTRUCTOR_OVERLOAD {}; | ||
|
||
constructor(vararg args: Any?) { | ||
val args_1: Array<Any?>? = args as Array<Any?>? | ||
} | ||
|
||
constructor(vararg args: String?) { | ||
val args_1: Array<String?>? = args as Array<String?>? | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -422,10 +422,12 @@ | |
;;@ varargs/Varargs.java:57:4 | ||
(call_ref $function.m_test__int__arrayOf_java_lang_Object__void (ref.as_non_null (local.get $v))(i32.const 1)(call $m_newWithLiteral__arrayOf_java_lang_Object__javaemul_internal_WasmArray_OfObject@javaemul.internal.WasmArray.OfObject (array.new_fixed $java.lang.Object.array ))(struct.get $varargs.Varargs.vtable $m_test__int__arrayOf_java_lang_Object__void (struct.get $varargs.Varargs $vtable(local.get $v)))) | ||
;;@ varargs/Varargs.java:58:4 | ||
(call_ref $function.m_testCloneable__arrayOf_java_lang_Cloneable__void (ref.as_non_null (local.get $v))(call $m_newWithLiteral__arrayOf_java_lang_Object__javaemul_internal_WasmArray_OfObject@javaemul.internal.WasmArray.OfObject (array.new_fixed $java.lang.Object.array ))(struct.get $varargs.Varargs.vtable $m_testCloneable__arrayOf_java_lang_Cloneable__void (struct.get $varargs.Varargs $vtable(local.get $v)))) | ||
(call_ref $function.m_test__int__arrayOf_java_lang_Object__void (ref.as_non_null (local.get $v))(i32.const 1)(ref.null $javaemul.internal.WasmArray.OfObject)(struct.get $varargs.Varargs.vtable $m_test__int__arrayOf_java_lang_Object__void (struct.get $varargs.Varargs $vtable(local.get $v)))) | ||
;;@ varargs/Varargs.java:59:4 | ||
(call_ref $function.m_testSerializable__arrayOf_java_io_Serializable__void (ref.as_non_null (local.get $v))(call $m_newWithLiteral__arrayOf_java_lang_Object__javaemul_internal_WasmArray_OfObject@javaemul.internal.WasmArray.OfObject (array.new_fixed $java.lang.Object.array ))(struct.get $varargs.Varargs.vtable $m_testSerializable__arrayOf_java_io_Serializable__void (struct.get $varargs.Varargs $vtable(local.get $v)))) | ||
(call_ref $function.m_testCloneable__arrayOf_java_lang_Cloneable__void (ref.as_non_null (local.get $v))(call $m_newWithLiteral__arrayOf_java_lang_Object__javaemul_internal_WasmArray_OfObject@javaemul.internal.WasmArray.OfObject (array.new_fixed $java.lang.Object.array ))(struct.get $varargs.Varargs.vtable $m_testCloneable__arrayOf_java_lang_Cloneable__void (struct.get $varargs.Varargs $vtable(local.get $v)))) | ||
;;@ varargs/Varargs.java:60:4 | ||
(call_ref $function.m_testSerializable__arrayOf_java_io_Serializable__void (ref.as_non_null (local.get $v))(call $m_newWithLiteral__arrayOf_java_lang_Object__javaemul_internal_WasmArray_OfObject@javaemul.internal.WasmArray.OfObject (array.new_fixed $java.lang.Object.array ))(struct.get $varargs.Varargs.vtable $m_testSerializable__arrayOf_java_io_Serializable__void (struct.get $varargs.Varargs $vtable(local.get $v)))) | ||
;;@ varargs/Varargs.java:61:4 | ||
(call_ref $function.m_testLambda__varargs_Varargs_FunctionalInterface__void (ref.as_non_null (local.get $v))(call [email protected].$LambdaImplementor$1 (local.get $this))(struct.get $varargs.Varargs.vtable $m_testLambda__varargs_Varargs_FunctionalInterface__void (struct.get $varargs.Varargs $vtable(local.get $v)))) | ||
) | ||
) | ||
|
@@ -496,16 +498,16 @@ | |
(func [email protected].$LambdaImplementor$1 | ||
(param $$outer_this (ref null $varargs.Varargs)) | ||
(result (ref null $varargs.Varargs.$LambdaImplementor$1)) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(local $$instance (ref null $varargs.Varargs.$LambdaImplementor$1)) | ||
(block | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(call $$clinit__void_<once>[email protected].$LambdaImplementor$1 ) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(local.set $$instance (struct.new $varargs.Varargs.$LambdaImplementor$1 (ref.as_non_null (global.get $varargs.Varargs.$LambdaImplementor$1.vtable)) (ref.as_non_null (global.get $varargs.Varargs.$LambdaImplementor$1.itable)) (i32.const 0) (ref.null $varargs.Varargs))) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(call $$ctor__varargs_Varargs__void_$p_varargs_Varargs_$LambdaImplementor$1@varargs.Varargs.$LambdaImplementor$1 (ref.as_non_null (local.get $$instance))(local.get $$outer_this)) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(return (local.get $$instance)) | ||
) | ||
) | ||
|
@@ -514,11 +516,11 @@ | |
(func $$ctor__varargs_Varargs__void_$p_varargs_Varargs_$LambdaImplementor$1@varargs.Varargs.$LambdaImplementor$1 | ||
(param $this (ref null $varargs.Varargs.$LambdaImplementor$1)) | ||
(param $$outer_this (ref null $varargs.Varargs)) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(block | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(struct.set $varargs.Varargs.$LambdaImplementor$1 [email protected].$LambdaImplementor$1 (local.get $this) (local.get $$outer_this)) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(call [email protected] (ref.as_non_null (local.get $this))) | ||
) | ||
) | ||
|
@@ -528,30 +530,30 @@ | |
(type $function.m_apply__arrayOf_java_lang_String__void) | ||
(param $this.untyped (ref $java.lang.Object)) | ||
(param $it (ref null $javaemul.internal.WasmArray.OfObject)) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(local $this (ref null $varargs.Varargs.$LambdaImplementor$1)) | ||
(local.set $this (ref.cast (ref $varargs.Varargs.$LambdaImplementor$1) (local.get $this.untyped))) | ||
(block | ||
;;@ varargs/Varargs.java:60:23 | ||
;;@ varargs/Varargs.java:61:23 | ||
(struct.set $varargs.Varargs [email protected] (struct.get $varargs.Varargs.$LambdaImplementor$1 [email protected].$LambdaImplementor$1 (local.get $this)) (local.get $it)) | ||
) | ||
) | ||
(elem declare func [email protected].$LambdaImplementor$1) | ||
|
||
;;; void <anonymous> implements FunctionalInterface.$clinit() | ||
(func $$clinit__void_<once>[email protected].$LambdaImplementor$1 | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(block | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(if (global.get [email protected].$LambdaImplementor$1) | ||
(then | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(return ) | ||
) | ||
) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(global.set [email protected].$LambdaImplementor$1 (i32.const 1)) | ||
;;@ varargs/Varargs.java:60:17 | ||
;;@ varargs/Varargs.java:61:17 | ||
(call $$clinit__void_<once>[email protected] ) | ||
) | ||
) | ||
|
@@ -602,44 +604,44 @@ | |
;;; Child Child.$create() | ||
(func [email protected] | ||
(result (ref null $varargs.Child)) | ||
;;@ varargs/Varargs.java:65:9 | ||
;;@ varargs/Varargs.java:66:9 | ||
(local $$instance (ref null $varargs.Child)) | ||
(block | ||
;;@ varargs/Varargs.java:65:9 | ||
;;@ varargs/Varargs.java:66:9 | ||
(call $$clinit__void_<once>[email protected] ) | ||
;;@ varargs/Varargs.java:65:9 | ||
;;@ varargs/Varargs.java:66:9 | ||
(local.set $$instance (struct.new $varargs.Child (ref.as_non_null (global.get $varargs.Child.vtable)) (ref.as_non_null (global.get $itable.empty)) (i32.const 0) (ref.null $javaemul.internal.WasmArray.OfObject))) | ||
;;@ varargs/Varargs.java:65:9 | ||
;;@ varargs/Varargs.java:66:9 | ||
(call [email protected] (ref.as_non_null (local.get $$instance))) | ||
;;@ varargs/Varargs.java:65:9 | ||
;;@ varargs/Varargs.java:66:9 | ||
(return (local.get $$instance)) | ||
) | ||
) | ||
|
||
;;; void Child.$ctor() | ||
(func [email protected] | ||
(param $this (ref null $varargs.Child)) | ||
;;@ varargs/Varargs.java:65:9 | ||
;;@ varargs/Varargs.java:66:9 | ||
(block | ||
;;@ varargs/Varargs.java:66:4 | ||
;;@ varargs/Varargs.java:67:4 | ||
(call [email protected] (ref.as_non_null (local.get $this))(call $m_newWithLiteral__arrayOf_int__javaemul_internal_WasmArray_OfInt@javaemul.internal.WasmArray.OfInt (array.new_data $int.array [email protected] (i32.const 0) (i32.const 1)))) | ||
) | ||
) | ||
|
||
;;; void Child.$clinit() | ||
(func $$clinit__void_<once>[email protected] | ||
;;@ varargs/Varargs.java:64:6 | ||
;;@ varargs/Varargs.java:65:6 | ||
(block | ||
;;@ varargs/Varargs.java:64:6 | ||
;;@ varargs/Varargs.java:65:6 | ||
(if (global.get [email protected]) | ||
(then | ||
;;@ varargs/Varargs.java:64:6 | ||
;;@ varargs/Varargs.java:65:6 | ||
(return ) | ||
) | ||
) | ||
;;@ varargs/Varargs.java:64:6 | ||
;;@ varargs/Varargs.java:65:6 | ||
(global.set [email protected] (i32.const 1)) | ||
;;@ varargs/Varargs.java:64:6 | ||
;;@ varargs/Varargs.java:65:6 | ||
(call $$clinit__void_<once>[email protected] ) | ||
) | ||
) | ||
|