Skip to content

Commit

Permalink
[J2KT] Extend NullabilityConversion readable with union types.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 720213259
  • Loading branch information
Googler authored and copybara-github committed Jan 27, 2025
1 parent d57e3ae commit b12961b
Show file tree
Hide file tree
Showing 3 changed files with 198 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -655,5 +655,86 @@ public static class VariableLowerWildcardToLowerWildcard {
}
}
}

public static class Unions {
public abstract static class ExceptionNonNull1 extends RuntimeException
implements Supplier<Child> {}

public abstract static class ExceptionNonNull2 extends RuntimeException
implements Supplier<Child> {}

public abstract static class ExceptionNullable1 extends RuntimeException
implements Supplier<@Nullable Child> {}

public abstract static class ExceptionNullable2 extends RuntimeException
implements Supplier<@Nullable Child> {}

// TODO(b/361769898): Uncomment when fixed
// public static Supplier<Child> mixedToNonNull() {
// try {
// throw new RuntimeException();
// } catch (ExceptionNonNull1 | ExceptionNullable1 e) {
// return e;
// }
// }

// TODO(b/361769898): Uncomment when fixed
// public static Supplier<@Nullable Child> mixedToNullable() {
// try {
// throw new RuntimeException();
// } catch (ExceptionNonNull1 | ExceptionNullable1 e) {
// return e;
// }
// }

public static Supplier<Child> nonNullToNonNull() {
try {
throw new RuntimeException();
} catch (ExceptionNonNull1 | ExceptionNonNull2 e) {
return e;
}
}

public static Supplier<@Nullable Child> nullableToNullable() {
try {
throw new RuntimeException();
} catch (ExceptionNullable1 | ExceptionNullable2 e) {
return e;
}
}

// TODO(b/361769898): Uncomment when fixed
// public static Child typeArgumentMixedToNonNull() {
// try {
// throw new RuntimeException();
// } catch (ExceptionNonNull1 | ExceptionNullable1 e) {
// return e.get();
// }
// }

public static @Nullable Child typeArgumentMixedToNullable() {
try {
throw new RuntimeException();
} catch (ExceptionNonNull1 | ExceptionNullable1 e) {
return e.get();
}
}

public static Child typeArgumentNonNullToNonNull() {
try {
throw new RuntimeException();
} catch (ExceptionNonNull1 | ExceptionNonNull2 e) {
return e.get();
}
}

public static @Nullable Child typeArgumentNullableToNullable() {
try {
throw new RuntimeException();
} catch (ExceptionNullable1 | ExceptionNullable2 e) {
return e.get();
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@
@class J2ktJ2ktNullabilityConversion_Tests_Types_VariableToVariable_UpperWildcardToVariableCompanion;
@class J2ktJ2ktNullabilityConversion_Tests_Types_VariableToVariable_VariableToLowerWildcard;
@class J2ktJ2ktNullabilityConversion_Tests_Types_VariableToVariable_VariableToLowerWildcardCompanion;
@class J2ktJ2ktNullabilityConversion_Tests_Unions;
@class J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion;
@class J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNonNull1;
@class J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNonNull2;
@class J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNullable1;
@class J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNullable2;

@protocol J2ktJ2ktNullabilityConversion_Child;
@protocol J2ktJ2ktNullabilityConversion_Consumer;
Expand Down Expand Up @@ -527,4 +533,36 @@ NS_INLINE id<J2ktJ2ktNullabilityConversion_Generic> J2ktNullabilityConversion_Te
return [J2ktJ2ktNullabilityConversion_Tests_Types_TypeArguments_VariableLowerWildcardToLowerWildcardCompanion.shared nonNullToNonNullWithJ2ktNullabilityConversion_Generic:it];
}

@compatibility_alias J2ktNullabilityConversion_Tests_Unions J2ktJ2ktNullabilityConversion_Tests_Unions;

@compatibility_alias J2ktNullabilityConversion_Tests_UnionsCompanion J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion;

NS_INLINE id<J2ktJ2ktNullabilityConversion_Supplier> J2ktNullabilityConversion_Tests_Unions_nonNullToNonNull(void) {
return [J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion.shared nonNullToNonNull];
}

NS_INLINE id<J2ktJ2ktNullabilityConversion_Supplier> J2ktNullabilityConversion_Tests_Unions_nullableToNullable(void) {
return [J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion.shared nullableToNullable];
}

NS_INLINE id<J2ktJ2ktNullabilityConversion_Child> _Nullable J2ktNullabilityConversion_Tests_Unions_typeArgumentMixedToNullable(void) {
return [J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion.shared typeArgumentMixedToNullable];
}

NS_INLINE id<J2ktJ2ktNullabilityConversion_Child> J2ktNullabilityConversion_Tests_Unions_typeArgumentNonNullToNonNull(void) {
return [J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion.shared typeArgumentNonNullToNonNull];
}

NS_INLINE id<J2ktJ2ktNullabilityConversion_Child> _Nullable J2ktNullabilityConversion_Tests_Unions_typeArgumentNullableToNullable(void) {
return [J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion.shared typeArgumentNullableToNullable];
}

@compatibility_alias J2ktNullabilityConversion_Tests_Unions_ExceptionNonNull1 J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNonNull1;

@compatibility_alias J2ktNullabilityConversion_Tests_Unions_ExceptionNonNull2 J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNonNull2;

@compatibility_alias J2ktNullabilityConversion_Tests_Unions_ExceptionNullable1 J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNullable1;

@compatibility_alias J2ktNullabilityConversion_Tests_Unions_ExceptionNullable2 J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNullable2;

NS_ASSUME_NONNULL_END
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package j2kt

import javaemul.lang.*
import java.lang.RuntimeException
import kotlin.Any
import kotlin.OptIn
import kotlin.Suppress
Expand Down Expand Up @@ -959,5 +960,83 @@ open class NullabilityConversion {
}
}
}

@ObjCName("J2ktJ2ktNullabilityConversion_Tests_Unions", exact = true)
open class Unions {
@ObjCName("J2ktJ2ktNullabilityConversion_Tests_UnionsCompanion", exact = true)
companion object {
@JvmStatic
@ObjCName("nonNullToNonNull")
fun nonNullToNonNull(): NullabilityConversion.Supplier<NullabilityConversion.Child> {
try {
throw RuntimeException()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNonNull1) {
return e
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNonNull2) {
return e
}
}

@JvmStatic
@ObjCName("nullableToNullable")
fun nullableToNullable(): NullabilityConversion.Supplier<NullabilityConversion.Child?> {
try {
throw RuntimeException()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNullable1) {
return e
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNullable2) {
return e
}
}

@JvmStatic
@ObjCName("typeArgumentMixedToNullable")
fun typeArgumentMixedToNullable(): NullabilityConversion.Child? {
try {
throw RuntimeException()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNonNull1) {
return e.get()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNullable1) {
return e.get()
}
}

@JvmStatic
@ObjCName("typeArgumentNonNullToNonNull")
fun typeArgumentNonNullToNonNull(): NullabilityConversion.Child {
try {
throw RuntimeException()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNonNull1) {
return e.get()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNonNull2) {
return e.get()
}
}

@JvmStatic
@ObjCName("typeArgumentNullableToNullable")
fun typeArgumentNullableToNullable(): NullabilityConversion.Child? {
try {
throw RuntimeException()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNullable1) {
return e.get()
} catch (e: NullabilityConversion.Tests.Unions.ExceptionNullable2) {
return e.get()
}
}
}

@ObjCName("J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNonNull1", exact = true)
abstract class ExceptionNonNull1: RuntimeException(), NullabilityConversion.Supplier<NullabilityConversion.Child>

@ObjCName("J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNonNull2", exact = true)
abstract class ExceptionNonNull2: RuntimeException(), NullabilityConversion.Supplier<NullabilityConversion.Child>

@ObjCName("J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNullable1", exact = true)
abstract class ExceptionNullable1: RuntimeException(), NullabilityConversion.Supplier<NullabilityConversion.Child?>

@ObjCName("J2ktJ2ktNullabilityConversion_Tests_Unions_ExceptionNullable2", exact = true)
abstract class ExceptionNullable2: RuntimeException(), NullabilityConversion.Supplier<NullabilityConversion.Child?>
}
}
}

0 comments on commit b12961b

Please sign in to comment.