diff --git a/jre/java/javaemul/internal/Enums.java b/jre/java/javaemul/internal/Enums.java index cb1f2e49f1..c8ecdfc0d7 100644 --- a/jre/java/javaemul/internal/Enums.java +++ b/jre/java/javaemul/internal/Enums.java @@ -17,8 +17,10 @@ import static javaemul.internal.InternalPreconditions.checkArgument; import static javaemul.internal.InternalPreconditions.checkCriticalNotNull; +import static javaemul.internal.InternalPreconditions.checkNotNull; import java.io.Serializable; +import javaemul.internal.annotations.DoNotAutobox; import javaemul.internal.annotations.UncheckedCast; import jsinterop.annotations.JsConstructor; import jsinterop.annotations.JsFunction; @@ -131,6 +133,11 @@ public static boolean isInstanceOf(Object instance, Constructor ctor) { return instance instanceof BoxedLightEnum && ((BoxedLightEnum) instance).constructor == ctor; } + public static boolean equals(@DoNotAutobox Object instance, @DoNotAutobox Object other) { + checkNotNull(instance); + return instance == other; + } + @JsFunction private interface Supplier { T get(); diff --git a/transpiler/java/com/google/j2cl/transpiler/ast/RuntimeMethods.java b/transpiler/java/com/google/j2cl/transpiler/ast/RuntimeMethods.java index 818ecd7d27..612a56a085 100644 --- a/transpiler/java/com/google/j2cl/transpiler/ast/RuntimeMethods.java +++ b/transpiler/java/com/google/j2cl/transpiler/ast/RuntimeMethods.java @@ -255,6 +255,22 @@ public static Expression createEnumsUnboxMethodCall( "unbox", expression, toTypeDescriptor.getMetadataConstructorReference()); } + public static Expression createEnumsEqualsMethodCall(Expression instance, Expression other) { + checkArgument( + instance.getTypeDescriptor().isJsEnum() + && instance.getTypeDescriptor().hasSameRawType(other.getTypeDescriptor())); + + return createEnumsMethodCall("equals", instance, other); + } + + public static Expression createEnumsCompareToMethodCall(Expression instance, Expression other) { + checkArgument( + AstUtils.isNonNativeJsEnum(instance.getTypeDescriptor()) + && instance.getTypeDescriptor().hasSameRawType(other.getTypeDescriptor())); + + return createEnumsMethodCall("compareTo", instance, other); + } + public static Expression createEnumsMethodCall(String unbox, Expression... arguments) { MethodDescriptor methodDescriptor = TypeDescriptors.get().javaemulInternalEnums.getMethodDescriptorByName(unbox); diff --git a/transpiler/java/com/google/j2cl/transpiler/passes/NormalizeJsEnums.java b/transpiler/java/com/google/j2cl/transpiler/passes/NormalizeJsEnums.java index f8d187e807..7625f78376 100644 --- a/transpiler/java/com/google/j2cl/transpiler/passes/NormalizeJsEnums.java +++ b/transpiler/java/com/google/j2cl/transpiler/passes/NormalizeJsEnums.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; +import com.google.common.collect.Iterables; import com.google.j2cl.common.InternalCompilerError; import com.google.j2cl.transpiler.ast.AbstractRewriter; import com.google.j2cl.transpiler.ast.AstUtils; @@ -34,6 +35,7 @@ import com.google.j2cl.transpiler.ast.NewInstance; import com.google.j2cl.transpiler.ast.Node; import com.google.j2cl.transpiler.ast.NumberLiteral; +import com.google.j2cl.transpiler.ast.RuntimeMethods; import com.google.j2cl.transpiler.ast.Type; import com.google.j2cl.transpiler.ast.TypeDescriptor; import com.google.j2cl.transpiler.ast.TypeDescriptors; @@ -149,13 +151,25 @@ public Expression rewriteMethodCall(MethodCall methodCall) { // Not a java.lang.Enum method, nothing to do. return methodCall; } - TypeDescriptor qualifierTypeDescriptor = methodCall.getQualifier().getTypeDescriptor(); + Expression qualifier = methodCall.getQualifier(); + TypeDescriptor qualifierTypeDescriptor = qualifier.getTypeDescriptor(); if (!qualifierTypeDescriptor.isJsEnum()) { // Not a JsEnum receiver, nothing to do. return methodCall; } - if (methodCall.getTarget().getSignature().equals("ordinal()")) { + String targetSignature = methodDescriptor.getSignature(); + if (targetSignature.equals("equals(java.lang.Object)")) { + Expression argument = Iterables.getOnlyElement(methodCall.getArguments()); + if (AstUtils.isNonNativeJsEnum(qualifierTypeDescriptor) + && argument.getTypeDescriptor().hasSameRawType(qualifierTypeDescriptor)) { + // Use a non boxing version of equals when comparing two non-native JsEnums of the + // same type. + return RuntimeMethods.createEnumsEqualsMethodCall(qualifier, argument); + } + } + + if (targetSignature.equals("ordinal()")) { return castJsEnumToValue(methodCall); } diff --git a/transpiler/javatests/com/google/j2cl/integration/java/jsenum/Main.java b/transpiler/javatests/com/google/j2cl/integration/java/jsenum/Main.java index 0ec159f795..a0c0f01f74 100644 --- a/transpiler/javatests/com/google/j2cl/integration/java/jsenum/Main.java +++ b/transpiler/javatests/com/google/j2cl/integration/java/jsenum/Main.java @@ -346,11 +346,20 @@ private static void testComparableJsEnum() { assertFalse(v.equals(ONE_DOUBLE)); assertFalse(PlainJsEnum.ZERO.equals(OtherPlainJsEnum.NONE)); + assertThrows( + NullPointerException.class, + () -> { + PlainJsEnum nullJsEnum = null; + nullJsEnum.equals(PlainJsEnum.ZERO); + }); + // Object methods calls on a variable of Object type. assertTrue(o.hashCode() == PlainJsEnum.ONE.hashCode()); assertTrue(o.hashCode() != PlainJsEnum.ZERO.hashCode()); assertTrue(o.toString().equals(String.valueOf(ONE_DOUBLE))); assertTrue(o.equals(PlainJsEnum.ONE)); + assertFalse(o.equals(PlainJsEnum.TWO)); + assertTrue(o.equals(v)); assertFalse(o.equals(ONE_DOUBLE)); assertTrue(v.getValue() == 1); @@ -472,11 +481,20 @@ private static void testStringJsEnum() { assertTrue(v.equals(StringJsEnum.HELLO)); assertFalse(v.equals(HELLO_STRING)); + assertThrows( + NullPointerException.class, + () -> { + StringJsEnum nullJsEnum = null; + nullJsEnum.equals(StringJsEnum.HELLO); + }); + // Object methods calls on a variable of Object type. assertTrue(o.hashCode() == StringJsEnum.HELLO.hashCode()); assertTrue(o.hashCode() != StringJsEnum.GOODBYE.hashCode()); assertTrue(o.toString().equals(HELLO_STRING)); assertTrue(o.equals(StringJsEnum.HELLO)); + assertFalse(o.equals(StringJsEnum.GOODBYE)); + assertTrue(o.equals(v)); assertFalse(o.equals(HELLO_STRING)); assertTrue(v.value.equals(HELLO_STRING)); @@ -649,6 +667,26 @@ private static void testAutoBoxing_specialMethods() { assertTrue(PlainJsEnum.ONE.compareTo(PlainJsEnum.ONE) == 0); assertTrue(PlainJsEnum.ONE.compareTo(PlainJsEnum.ZERO) > 0); assertTrue(PlainJsEnum.TWO.compareTo(PlainJsEnum.TEN) < 0); + + PlainJsEnum jsEnum = PlainJsEnum.ONE; + PlainJsEnum nullJsEnum = null; + Object objectJsEnum = PlainJsEnum.ONE; + + StringJsEnum stringJsEnum = StringJsEnum.HELLO; + PlainJsEnum nullStringJsEnum = null; + Object objectStringJsEnum = StringJsEnum.HELLO; + + assertFalse(jsEnum.equals(PlainJsEnum.TWO)); + assertTrue(jsEnum.equals(objectJsEnum)); + assertFalse(jsEnum.equals(nullJsEnum)); + assertFalse(jsEnum.equals(null)); + + assertFalse(stringJsEnum.equals(StringJsEnum.GOODBYE)); + assertTrue(stringJsEnum.equals(objectStringJsEnum)); + assertFalse(stringJsEnum.equals(nullJsEnum)); + assertFalse(stringJsEnum.equals(null)); + + assertFalse(jsEnum.equals(stringJsEnum)); } private static void testAutoBoxing_intersectionCasts() { diff --git a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/Main.java b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/Main.java index 0e267998ab..b8f873a978 100644 --- a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/Main.java +++ b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/Main.java @@ -135,8 +135,6 @@ public static void testJsEnumSwitch() { NativeStringEnum.ONE.compareTo(NativeStringEnum.THREE); NativeStringEnum.ONE.equals(NativeStringEnum.THREE); - ComparableJsEnum.ONE.compareTo(ComparableJsEnum.ZERO); - ComparableJsEnum.ONE.equals(ComparableJsEnum.ZERO); Supplier supplier = () -> ComparableJsEnum.ONE; Consumer consummer = e -> e.ordinal(); @@ -145,6 +143,30 @@ public static void testJsEnumSwitch() { acceptsSupplierOfSupplier(() -> (() -> ComparableJsEnum.ONE)); } + private static void testJsEnumAutoboxingSpecialMethods() { + StringJsEnum stringJsEnum = StringJsEnum.ONE; + StringJsEnum nullStringJsEnum = null; + ComparableJsEnum jsEnum = ComparableJsEnum.ONE; + ComparableJsEnum nullJsEnum = null; + Object o = ComparableJsEnum.ONE; + + StringJsEnum.ONE.equals(StringJsEnum.THREE); + StringJsEnum.ONE.equals(stringJsEnum); + StringJsEnum.ONE.equals(nullStringJsEnum); + StringJsEnum.ONE.equals(null); + StringJsEnum.ONE.equals(o); + o.equals(StringJsEnum.THREE); + + ComparableJsEnum.ONE.equals(ComparableJsEnum.ZERO); + ComparableJsEnum.ONE.equals(jsEnum); + ComparableJsEnum.ONE.equals(nullJsEnum); + ComparableJsEnum.ONE.equals(null); + ComparableJsEnum.ONE.equals(o); + o.equals(ComparableJsEnum.ZERO); + + StringJsEnum.ONE.equals(jsEnum); + } + @JsFunction interface JsFunctionSuppiler { T get(); diff --git a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.impl.java.js.txt b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.impl.java.js.txt index 701fe7d41d..796ae8179a 100644 --- a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.impl.java.js.txt +++ b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.impl.java.js.txt @@ -71,8 +71,6 @@ class Main extends j_l_Object { } $Comparables.m_compareTo__java_lang_Comparable__java_lang_Object__int(NativeStringEnum.ONE, NativeStringEnum.THREE); $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(NativeStringEnum.ONE, NativeStringEnum.THREE); - $Comparables.m_compareTo__java_lang_Comparable__java_lang_Object__int(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay))); - $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay))); let supplier = Supplier.$adapt(() =>{ return /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)); }); @@ -89,6 +87,27 @@ class Main extends j_l_Object { })); } /** @nodts */ + static m_testJsEnumAutoboxingSpecialMethods__void() { + let stringJsEnum = StringJsEnum.ONE; + let nullStringJsEnum = /**@type {?StringJsEnum}*/ ($Enums.unbox(null, StringJsEnum_$Overlay)); + let jsEnum = ComparableJsEnum.ONE; + let nullJsEnum = /**@type {?ComparableJsEnum}*/ ($Enums.unbox(null, $Overlay)); + let o = /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)); + $Enums.equals(StringJsEnum.ONE, StringJsEnum.THREE); + $Enums.equals(StringJsEnum.ONE, stringJsEnum); + $Enums.equals(StringJsEnum.ONE, nullStringJsEnum); + $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), null); + $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), o); + $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(o, /**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.THREE, StringJsEnum_$Overlay))); + $Enums.equals(ComparableJsEnum.ONE, ComparableJsEnum.ZERO); + $Enums.equals(ComparableJsEnum.ONE, jsEnum); + $Enums.equals(ComparableJsEnum.ONE, nullJsEnum); + $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), null); + $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), o); + $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(o, /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay))); + $Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(jsEnum, $Overlay))); + } + /** @nodts */ static m_acceptsJsFunctionSupplier__jsenum_Main_JsFunctionSuppiler__void(/** ?function():$Enums_BoxedComparableLightEnum */ supplier) {} /** @nodts */ static m_acceptsSupplierOfSupplier__jsenum_Main_Supplier__void(/** Supplier>> */ supplier) {} diff --git a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.js.mappings.txt b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.js.mappings.txt index 5b75b056ae..fee346bbef 100644 --- a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.js.mappings.txt +++ b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_closure/Main.js.mappings.txt @@ -57,8 +57,6 @@ [break;] => [break;] "jsenum.Main.testJsEnumSwitch" [NativeStringEnum.ONE.compareTo(NativeStringEnum.THREE);] => [$Comparables.m_compareTo__java_lang_Comparable__java_lang_Object__int(NativeStringEnum.ONE, NativeStringEnum.THREE);] "jsenum.Main.testJsEnumSwitch" [NativeStringEnum.ONE.equals(NativeStringEnum.THREE);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(NativeStringEnum.ONE, NativeStringEnum.THREE);] "jsenum.Main.testJsEnumSwitch" -[ComparableJsEnum.ONE.compareTo(ComparableJsEnum.ZERO);] => [$Comparables.m_compareTo__java_lang_Comparable__java_lang_Object__int(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay)));] "jsenum.Main.testJsEnumSwitch" -[ComparableJsEnum.ONE.equals(ComparableJsEnum.ZERO);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay)));] "jsenum.Main.testJsEnumSwitch" [Supplier supplier = () -> ComparableJsEnum.ONE;] => [let supplier = Supplier.$adapt(() =>{ return /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)); });] "jsenum.Main.testJsEnumSwitch" @@ -83,6 +81,30 @@ return /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)); });] "jsenum.Main." [ComparableJsEnum.ONE] => [return /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay));] "jsenum.Main." +[testJsEnumAutoboxingSpecialMethods] => [m_testJsEnumAutoboxingSpecialMethods__void] +[StringJsEnum stringJsEnum = StringJsEnum.ONE;] => [let stringJsEnum = StringJsEnum.ONE;] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[stringJsEnum] => [stringJsEnum] "stringJsEnum" +[StringJsEnum nullStringJsEnum = null;] => [let nullStringJsEnum = /**@type {?StringJsEnum}*/ ($Enums.unbox(null, StringJsEnum_$Overlay));] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[nullStringJsEnum] => [nullStringJsEnum] "nullStringJsEnum" +[ComparableJsEnum jsEnum = ComparableJsEnum.ONE;] => [let jsEnum = ComparableJsEnum.ONE;] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[jsEnum] => [jsEnum] "jsEnum" +[ComparableJsEnum nullJsEnum = null;] => [let nullJsEnum = /**@type {?ComparableJsEnum}*/ ($Enums.unbox(null, $Overlay));] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[nullJsEnum] => [nullJsEnum] "nullJsEnum" +[Object o = ComparableJsEnum.ONE;] => [let o = /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay));] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[o] => [o] "o" +[StringJsEnum.ONE.equals(StringJsEnum.THREE);] => [$Enums.equals(StringJsEnum.ONE, StringJsEnum.THREE);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[StringJsEnum.ONE.equals(stringJsEnum);] => [$Enums.equals(StringJsEnum.ONE, stringJsEnum);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[StringJsEnum.ONE.equals(nullStringJsEnum);] => [$Enums.equals(StringJsEnum.ONE, nullStringJsEnum);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[StringJsEnum.ONE.equals(null);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), null);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[StringJsEnum.ONE.equals(o);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), o);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[o.equals(StringJsEnum.THREE);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(o, /**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.THREE, StringJsEnum_$Overlay)));] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[ComparableJsEnum.ONE.equals(ComparableJsEnum.ZERO);] => [$Enums.equals(ComparableJsEnum.ONE, ComparableJsEnum.ZERO);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[ComparableJsEnum.ONE.equals(jsEnum);] => [$Enums.equals(ComparableJsEnum.ONE, jsEnum);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[ComparableJsEnum.ONE.equals(nullJsEnum);] => [$Enums.equals(ComparableJsEnum.ONE, nullJsEnum);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[ComparableJsEnum.ONE.equals(null);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), null);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[ComparableJsEnum.ONE.equals(o);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), o);] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[o.equals(ComparableJsEnum.ZERO);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(o, /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay)));] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" +[StringJsEnum.ONE.equals(jsEnum);] => [$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), /**@type {$Enums_BoxedComparableLightEnum}*/ ($Enums.boxComparable(jsEnum, $Overlay)));] "jsenum.Main.testJsEnumAutoboxingSpecialMethods" [acceptsJsFunctionSupplier] => [m_acceptsJsFunctionSupplier__jsenum_Main_JsFunctionSuppiler__void] [supplier] => [supplier] "supplier" [acceptsSupplierOfSupplier] => [m_acceptsSupplierOfSupplier__jsenum_Main_Supplier__void] diff --git a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_kt/Main.kt.txt b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_kt/Main.kt.txt index 9cbbe99c14..cc65174c7b 100644 --- a/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_kt/Main.kt.txt +++ b/transpiler/javatests/com/google/j2cl/readable/java/jsenum/output_kt/Main.kt.txt @@ -81,8 +81,6 @@ open class Main { } while (false) Main.NativeStringEnum.ONE.compareTo(Main.NativeStringEnum.THREE) Main.NativeStringEnum.ONE.equals(Main.NativeStringEnum.THREE) - Main.ComparableJsEnum.ONE.compareTo(Main.ComparableJsEnum.ZERO) - Main.ComparableJsEnum.ONE.equals(Main.ComparableJsEnum.ZERO) val supplier: Main.Supplier? = Main.Supplier { return@Supplier Main.ComparableJsEnum.ONE } @@ -99,6 +97,28 @@ open class Main { }) } + @JvmStatic + internal fun testJsEnumAutoboxingSpecialMethods_private_2() { + val stringJsEnum: Main.StringJsEnum? = Main.StringJsEnum.ONE + val nullStringJsEnum: Main.StringJsEnum? = null + val jsEnum: Main.ComparableJsEnum? = Main.ComparableJsEnum.ONE + val nullJsEnum: Main.ComparableJsEnum? = null + val o: Any? = Main.ComparableJsEnum.ONE + Main.StringJsEnum.ONE.equals(Main.StringJsEnum.THREE) + Main.StringJsEnum.ONE.equals(stringJsEnum) + Main.StringJsEnum.ONE.equals(nullStringJsEnum) + Main.StringJsEnum.ONE.equals(null) + Main.StringJsEnum.ONE.equals(o) + o!!.equals(Main.StringJsEnum.THREE) + Main.ComparableJsEnum.ONE.equals(Main.ComparableJsEnum.ZERO) + Main.ComparableJsEnum.ONE.equals(jsEnum) + Main.ComparableJsEnum.ONE.equals(nullJsEnum) + Main.ComparableJsEnum.ONE.equals(null) + Main.ComparableJsEnum.ONE.equals(o) + o!!.equals(Main.ComparableJsEnum.ZERO) + Main.StringJsEnum.ONE.equals(jsEnum) + } + @JvmStatic internal fun acceptsJsFunctionSupplier_private_2(supplier: Main.JsFunctionSuppiler?) {}