Skip to content

Commit

Permalink
[JS] Avoid boxing for JsEnum.equals by replacing it with Enums.equals.
Browse files Browse the repository at this point in the history
When we encounter `a.equals(b)` if both qualifier and argument are jsenums of the same type, replace it with `Enums.equals(a, b)`. Previously, the output was `Objects.equals(box(a), box(b))`.

PiperOrigin-RevId: 582847772
  • Loading branch information
Googler authored and copybara-github committed Nov 16, 2023
1 parent 2e98d6c commit 73b8082
Show file tree
Hide file tree
Showing 8 changed files with 168 additions and 10 deletions.
7 changes: 7 additions & 0 deletions jre/java/javaemul/internal/Enums.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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> {
T get();
Expand Down
16 changes: 16 additions & 0 deletions transpiler/java/com/google/j2cl/transpiler/ast/RuntimeMethods.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ComparableJsEnum> supplier = () -> ComparableJsEnum.ONE;
Consumer<ComparableJsEnum> consummer = e -> e.ordinal();
Expand All @@ -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> {
T get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay)));
$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay)));
let supplier = Supplier.$adapt(() =>{
return /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay));
});
Expand All @@ -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<!ComparableJsEnum>}*/ ($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<!StringJsEnum>}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), null);
$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum<!StringJsEnum>}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), o);
$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(o, /**@type {$Enums_BoxedLightEnum<!StringJsEnum>}*/ ($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<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), null);
$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), o);
$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(o, /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay)));
$Objects.m_equals__java_lang_Object__java_lang_Object__boolean(/**@type {$Enums_BoxedLightEnum<!StringJsEnum>}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), /**@type {$Enums_BoxedComparableLightEnum<?ComparableJsEnum>}*/ ($Enums.boxComparable(jsEnum, $Overlay)));
}
/** @nodts */
static m_acceptsJsFunctionSupplier__jsenum_Main_JsFunctionSuppiler__void(/** ?function():$Enums_BoxedComparableLightEnum<?ComparableJsEnum> */ supplier) {}
/** @nodts */
static m_acceptsSupplierOfSupplier__jsenum_Main_Supplier__void(/** Supplier<Supplier<$Enums_BoxedComparableLightEnum<?ComparableJsEnum>>> */ supplier) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($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<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay)), /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ZERO, $Overlay)));] "jsenum.Main.testJsEnumSwitch"
[Supplier<ComparableJsEnum> supplier = () -> ComparableJsEnum.ONE;] => [let supplier = Supplier.$adapt(() =>{
return /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay));
});] "jsenum.Main.testJsEnumSwitch"
Expand All @@ -83,6 +81,30 @@
return /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay));
});] "jsenum.Main.<lambda in testJsEnumSwitch>"
[ComparableJsEnum.ONE] => [return /**@type {$Enums_BoxedComparableLightEnum<!ComparableJsEnum>}*/ ($Enums.boxComparable(ComparableJsEnum.ONE, $Overlay));] "jsenum.Main.<lambda in testJsEnumSwitch>"
[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<!ComparableJsEnum>}*/ ($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<!StringJsEnum>}*/ ($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<!StringJsEnum>}*/ ($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<!StringJsEnum>}*/ ($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<!ComparableJsEnum>}*/ ($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<!ComparableJsEnum>}*/ ($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<!ComparableJsEnum>}*/ ($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<!StringJsEnum>}*/ ($Enums.box(StringJsEnum.ONE, StringJsEnum_$Overlay)), /**@type {$Enums_BoxedComparableLightEnum<?ComparableJsEnum>}*/ ($Enums.boxComparable(jsEnum, $Overlay)));] "jsenum.Main.testJsEnumAutoboxingSpecialMethods"
[acceptsJsFunctionSupplier] => [m_acceptsJsFunctionSupplier__jsenum_Main_JsFunctionSuppiler__void]
[supplier] => [supplier] "supplier"
[acceptsSupplierOfSupplier] => [m_acceptsSupplierOfSupplier__jsenum_Main_Supplier__void]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.ComparableJsEnum?>? = Main.Supplier<Main.ComparableJsEnum?> {
return@Supplier Main.ComparableJsEnum.ONE
}
Expand All @@ -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<Main.ComparableJsEnum?>?) {}

Expand Down

0 comments on commit 73b8082

Please sign in to comment.