diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index 617525728c5..9b781296ac6 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.session import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.config.JvmAnalysisFlags import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.CheckersComponent @@ -35,7 +36,6 @@ import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClassIndex import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider import org.jetbrains.kotlin.fir.types.FirCorrespondingSupertypesCache import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState // -------------------------- Required components -------------------------- @@ -63,7 +63,8 @@ fun FirSession.registerCliCompilerOnlyComponents() { @OptIn(SessionConfiguration::class) fun FirSession.registerCommonJavaComponents() { - register(FirJavaTypeEnhancementStateComponent::class, FirJavaTypeEnhancementStateComponent(JavaTypeEnhancementState.DEFAULT)) + val jsr305State = languageVersionSettings.getFlag(JvmAnalysisFlags.javaTypeEnhancementState) + register(FirJavaTypeEnhancementStateComponent::class, FirJavaTypeEnhancementStateComponent(jsr305State)) } // -------------------------- Resolve components -------------------------- diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index 183b360cb77..6d75d59142a 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -135,8 +135,8 @@ object FirSessionFactory { sessionProvider.registerSession(moduleData, this@session) registerModuleData(moduleData) registerCliCompilerOnlyComponents() - registerCommonJavaComponents() registerCommonComponents(languageVersionSettings) + registerCommonJavaComponents() registerResolveComponents(lookupTracker) registerJavaSpecificResolveComponents() diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/ignore/parametersAreNonnullByDefault.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/ignore/parametersAreNonnullByDefault.fir.kt deleted file mode 100644 index 480894574f1..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/ignore/parametersAreNonnullByDefault.fir.kt +++ /dev/null @@ -1,33 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -// JSR305_GLOBAL_REPORT: ignore - -// FILE: A.java -import javax.annotation.*; - -@ParametersAreNonnullByDefault -public class A { - @Nullable public String field = null; - - public String foo(String q, @Nonnull String x, @CheckForNull CharSequence y) { - return ""; - } - - @Nonnull - public String bar() { - return ""; - } -} - -// FILE: main.kt -fun main(a: A) { - // foo is platform - a.foo("", "", null)?.length - a.foo("", "", null).length - a.foo(null, null, "").length - - a.bar().length - a.bar()!!.length - - a.field?.length - a.field.length -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/ignore/parametersAreNonnullByDefault.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/ignore/parametersAreNonnullByDefault.kt index 41ffb44a453..f0affa16c51 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/ignore/parametersAreNonnullByDefault.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/ignore/parametersAreNonnullByDefault.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER // JSR305_GLOBAL_REPORT: ignore diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.fir.kt deleted file mode 100644 index e566afc40ff..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.fir.kt +++ /dev/null @@ -1,92 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -// JSR305_GLOBAL_REPORT: strict - -// FILE: spr/NonNullApi.java -package spr; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.Nonnull; -import javax.annotation.meta.TypeQualifierDefault; - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Nonnull -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER}) -public @interface NonNullApi { -} - -// FILE: spr/UnknownNullability.java -package spr; - -import javax.annotation.*; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -import javax.annotation.meta.TypeQualifierNickname; -import javax.annotation.meta.When; - -@Documented -@TypeQualifierNickname -@Nonnull(when = When.UNKNOWN) -@Retention(RetentionPolicy.RUNTIME) -public @interface UnknownNullability { - -} - -// FILE: spr/ForceFlexibility.java -package spr; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.Nonnull; -import javax.annotation.meta.TypeQualifierDefault; -import javax.annotation.meta.When; - -@Retention(RetentionPolicy.RUNTIME) -@Documented -@UnknownNullability -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER}) -public @interface ForceFlexibility { -} - -// FILE: B.java -public interface B { - public void foo(@javax.annotation.Nonnull String x); - public void bar(@javax.annotation.Nonnull String x); - public void baz(@javax.annotation.Nonnull String x); - public void foobar(@javax.annotation.Nonnull String x); -} - -// FILE: A.java -import spr.*; - -@NonNullApi -public class A implements B { - @ForceFlexibility - public void foo(String x) {} - public void bar(@ForceFlexibility String x) {} - public void baz(@UnknownNullability String x) {} - public void foobar(@javax.annotation.Nonnull(when = javax.annotation.meta.When.UNKNOWN) String x) {} -} - -// FILE: main.kt -fun main(a: A, b: B) { - b.foo(null) - b.bar(null) - b.baz(null) - b.foobar(null) - - a.foo(null) - a.bar(null) - a.baz(null) - a.foobar(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.kt index 4d388b41636..ce5e4afdd94 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER // JSR305_GLOBAL_REPORT: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/nullabilityFromOverridden.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/nullabilityFromOverridden.fir.kt deleted file mode 100644 index cf8e5c6d141..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/nullabilityFromOverridden.fir.kt +++ /dev/null @@ -1,152 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -// JSR305_GLOBAL_REPORT: strict - -// FILE: NonNullApi.java -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.Nonnull; -import javax.annotation.meta.TypeQualifierDefault; - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Nonnull -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) -public @interface NonNullApi { -} - -// FILE: NullableApi.java -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.CheckForNull; -import javax.annotation.meta.TypeQualifierDefault; - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@CheckForNull -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) -public @interface NullableApi { -} - -// FILE: A.java -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import javax.annotation.Nonnull; - -@NonNullApi -public class A { - public String foo1(String x) { return ""; } - public String foo2(String x) { return ""; } - public String foo3(String x) { return ""; } - - - @Nullable - public String bar1(@Nullable String x) { return ""; } - @Nullable - public String bar2(@Nullable String x) { return ""; } - - public String baz(@Nonnull String x) { return ""; } -} - -// FILE: AInt.java -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import javax.annotation.Nonnull; - -@NonNullApi -public interface AInt { - public CharSequence foo1(String x); - public CharSequence foo2(String x); - public CharSequence foo3(String x); - - - @Nullable - public CharSequence bar1(@Nullable String x); - @Nullable - public CharSequence bar2(@Nullable String x); - - public CharSequence baz(@Nonnull String x); -} - - -// FILE: B.java -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import javax.annotation.Nonnull; - -@NullableApi -public class B extends A implements AInt { - // conflicts - public String foo1(String x) { return ""; } - - // no conflicts - @Nonnull - public String foo2(@Nonnull String x) { return ""; } - - // fake override for foo3 shouldn't have any conflicts - - // no conflicts - public String bar1(String x) { return ""; } - - // conflicts - public String baz(String x) { return ""; } -} - -// FILE: C.java -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import javax.annotation.Nonnull; - -@NonNullApi -public class C extends A implements AInt { - // no conflicts - public String foo1(String x) { return ""; } - - // no conflicts - public String foo2(@Nonnull String x) { return ""; } - - // fake override for foo3 shouldn't have any conflicts - - // no conflicts, covariant override - public String bar1(String x) { return ""; } - // no conflicts - @Nullable - public String bar2(@Nullable String x) { return ""; } - - // no conflicts - public String baz(String x) { return ""; } -} - -// FILE: main.kt -fun main(a: A, b: B, c: C) { - a.foo1(null).length - a.foo2(null).length - a.foo3(null).length - a.bar1(null).length - a.bar2(null).length - a.baz(null).length - - b.foo1(null).length - b.foo1(null)?.length - b.foo2(null).length - b.foo3(null).length - b.bar1(null).length - b.bar2(null).length - b.baz(null).length - b.baz(null)?.length - - c.foo1(null).length - c.foo2(null).length - c.foo3(null).length - c.bar1(null).length - c.bar1(null)?.length - c.bar2(null).length - c.baz(null).length -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/nullabilityFromOverridden.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/nullabilityFromOverridden.kt index ac14cc09ff7..ccfbbf3eacc 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/nullabilityFromOverridden.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/nullabilityFromOverridden.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER // JSR305_GLOBAL_REPORT: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalIgnore.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalIgnore.fir.kt index 04865c891c4..32a75c8e455 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalIgnore.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalIgnore.fir.kt @@ -44,12 +44,12 @@ fun main(a: A) { a.field.length a.foo2("", null)?.length - a.foo2("", null).length - a.foo2(null, "").length + a.foo2("", null).length + a.foo2(null, "").length a.bar2().length a.bar2()!!.length a.field2?.length - a.field2.length + a.field2.length } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalWarningMigrationIgnore.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalWarningMigrationIgnore.fir.kt index 421316ce97d..63dc596c6a3 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalWarningMigrationIgnore.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/globalWarningMigrationIgnore.fir.kt @@ -34,14 +34,14 @@ public class A { // FILE: main.kt fun main(a: A) { a.foo("", null)?.length - a.foo("", null).length - a.foo(null, "").length + a.foo("", null).length + a.foo(null, "").length a.bar().length a.bar()!!.length a.field?.length - a.field.length + a.field.length a.foo2("", null)?.length a.foo2("", null).length diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationError.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationError.fir.kt index 80159471ffa..af554670b68 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationError.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationError.fir.kt @@ -63,10 +63,10 @@ fun main(a: A) { a.foo2("", null)?.length a.foo2("", null).length - a.foo2(null, "").length + a.foo2(null, "").length a.bar2().length - a.bar2()!!.length + a.bar2()!!.length a.field2?.length a.field2.length diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationIgnore.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationIgnore.fir.kt index 1d509401668..a3e0ebb430b 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationIgnore.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationIgnore.fir.kt @@ -34,14 +34,14 @@ public class A { // FILE: main.kt fun main(a: A) { a.foo("", null)?.length - a.foo("", null).length - a.foo(null, "").length + a.foo("", null).length + a.foo(null, "").length a.bar().length a.bar()!!.length a.field?.length - a.field.length + a.field.length a.foo2("", null)?.length a.foo2("", null).length diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationWarning.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationWarning.fir.kt index e566e0eec0c..cd1a46490f8 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationWarning.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/migrationWarning.fir.kt @@ -44,12 +44,12 @@ fun main(a: A) { a.field.length a.foo2("", null)?.length - a.foo2("", null).length - a.foo2(null, "").length + a.foo2("", null).length + a.foo2(null, "").length a.bar2().length a.bar2()!!.length a.field2?.length - a.field2.length + a.field2.length } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/specialCollision.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/specialCollision.fir.kt deleted file mode 100644 index 2a8cb0599da..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/specialCollision.fir.kt +++ /dev/null @@ -1,35 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -// JSR305_GLOBAL_REPORT: ignore -// JSR305_MIGRATION_REPORT: ignore -// JSR305_SPECIAL_REPORT: MyNonnull:warn, MyMigrationNonnull:strict - -// FILE: A.java -import javax.annotation.*; - -public class A { - @MyMigrationNullable public String field = null; - - @MyMigrationNullable - public String foo(@MyMigrationNonnull String x, CharSequence y) { - return ""; - } - - @MyNonnull - @MyMigrationNonnull - public String bar() { - return ""; - } -} - -// FILE: main.kt -fun main(a: A) { - a.foo("", null)?.length - a.foo("", null).length - a.foo(null, "").length - - a.bar().length - a.bar()!!.length - - a.field?.length - a.field.length -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/specialCollision.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/specialCollision.kt index 6d8aae90a20..0def2c9bbbd 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/specialCollision.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/specialCollision.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER // JSR305_GLOBAL_REPORT: ignore // JSR305_MIGRATION_REPORT: ignore diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/stateRefinement.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/stateRefinement.fir.kt index 6b1b998832d..10c75034c3b 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/stateRefinement.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305NullabilityWarnings/migration/stateRefinement.fir.kt @@ -44,12 +44,12 @@ fun main(a: A) { a.field.length a.foo2("", null)?.length - a.foo2("", null).length - a.foo2(null, "").length + a.foo2("", null).length + a.foo2(null, "").length a.bar2().length a.bar2()!!.length a.field2?.length - a.field2.length + a.field2.length } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/multiple.fir.fail b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/multiple.fir.fail deleted file mode 100644 index 91b80a0aff5..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/multiple.fir.fail +++ /dev/null @@ -1 +0,0 @@ -INCONSISTENT_DIAGNOSTICS \ No newline at end of file diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/rxjava3Ignore.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/rxjava3Ignore.fir.kt deleted file mode 100644 index def10dff864..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/rxjava3Ignore.fir.kt +++ /dev/null @@ -1,43 +0,0 @@ -// NULLABILITY_ANNOTATIONS: @io.reactivex.rxjava3.annotations:ignore - -// FILE: A.java - -import io.reactivex.rxjava3.annotations.*; - -public class A { - @Nullable public String field = null; - - @Nullable - public String foo(@NonNull String x, @Nullable CharSequence y) { - return ""; - } - - @NonNull - public String bar() { - return ""; - } - - @Nullable - public T baz(@NonNull T x) { return x; } -} - -// FILE: main.kt - -fun main(a: A, a1: A) { - a.foo("", null)?.length - a.foo("", null).length - a.foo(null, "").length - - a.bar().length - a.bar()!!.length - - a.field?.length - a.field.length - - a.baz("").length - a.baz("")?.length - a.baz(null).length - - a1.baz("")!!.length - a1.baz(null)!!.length -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/rxjava3Ignore.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/rxjava3Ignore.kt index 63fd719279a..428635308b3 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/rxjava3Ignore.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/rxjava3Ignore.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // NULLABILITY_ANNOTATIONS: @io.reactivex.rxjava3.annotations:ignore // FILE: A.java