From 157c260fda9687bea609973c88ca09ca15498a68 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Mon, 13 Mar 2023 17:48:35 +0100 Subject: [PATCH] Add test data with current behavior for KT-56656 --- ...nAnnotationsCompiledJavaTestGenerated.java | 6 ++ ...dJavaWithPsiClassReadingTestGenerated.java | 6 ++ ...ignAnnotationsSourceJavaTestGenerated.java | 6 ++ ...rrideOfMethodWithParametricNullness.fir.kt | 56 +++++++++++++++++++ .../overrideOfMethodWithParametricNullness.kt | 56 +++++++++++++++++++ ...nAnnotationsCompiledJavaTestGenerated.java | 6 ++ ...dJavaWithPsiClassReadingTestGenerated.java | 6 ++ ...ignAnnotationsSourceJavaTestGenerated.java | 6 ++ 8 files changed, 148 insertions(+) create mode 100644 compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.fir.kt create mode 100644 compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaTestGenerated.java index 59797bc0e98..c099161ccd0 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaTestGenerated.java @@ -618,6 +618,12 @@ public class FirPsiOldFrontendForeignAnnotationsCompiledJavaTestGenerated extend runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/eclipse.kt"); } + @Test + @TestMetadata("overrideOfMethodWithParametricNullness.kt") + public void testOverrideOfMethodWithParametricNullness() throws Exception { + runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt"); + } + @Test @TestMetadata("typeUseOnObject.kt") public void testTypeUseOnObject() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java index a92e6ca6745..2bd4cbc1f20 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java @@ -618,6 +618,12 @@ public class FirPsiOldFrontendForeignAnnotationsCompiledJavaWithPsiClassReadingT runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/eclipse.kt"); } + @Test + @TestMetadata("overrideOfMethodWithParametricNullness.kt") + public void testOverrideOfMethodWithParametricNullness() throws Exception { + runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt"); + } + @Test @TestMetadata("typeUseOnObject.kt") public void testTypeUseOnObject() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsSourceJavaTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsSourceJavaTestGenerated.java index f876b5b1c88..cfd05b33717 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsSourceJavaTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendForeignAnnotationsSourceJavaTestGenerated.java @@ -618,6 +618,12 @@ public class FirPsiOldFrontendForeignAnnotationsSourceJavaTestGenerated extends runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/eclipse.kt"); } + @Test + @TestMetadata("overrideOfMethodWithParametricNullness.kt") + public void testOverrideOfMethodWithParametricNullness() throws Exception { + runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt"); + } + @Test @TestMetadata("typeUseOnObject.kt") public void testTypeUseOnObject() throws Exception { diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.fir.kt new file mode 100644 index 00000000000..91737436753 --- /dev/null +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.fir.kt @@ -0,0 +1,56 @@ +// FULL_JDK +// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER +// ISSUE: KT-56656 + +// FILE: ParametricNullness.java +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +@Target({FIELD, METHOD, PARAMETER}) +@javax.annotation.meta.TypeQualifierNickname +@javax.annotation.Nonnull(when = javax.annotation.meta.When.UNKNOWN) +@interface ParametricNullness {} + +// FILE: ElementTypesAreNonnullByDefault.java +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Marks all "top-level" types as non-null in a way that is recognized by Kotlin. Note that this + * unfortunately includes type-variable usages, so we also provide {@link ParametricNullness} to + * "undo" it as best we can. + */ +@Retention(RUNTIME) +@Target(TYPE) +@TypeQualifierDefault({FIELD, METHOD, PARAMETER}) +@Nonnull +@interface ElementTypesAreNonnullByDefault {} + +// FILE: MyFunction.java +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; + +@ElementTypesAreNonnullByDefault +public interface MyFunction extends java.util.function.Function { + @Override + @ParametricNullness + T apply (@ParametricNullness F input); +} + +// FILE: main.kt + +class A : MyFunction { + override fun apply(x: String?): String? = "" +} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt new file mode 100644 index 00000000000..a1193e9cb98 --- /dev/null +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt @@ -0,0 +1,56 @@ +// FULL_JDK +// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER +// ISSUE: KT-56656 + +// FILE: ParametricNullness.java +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +@Target({FIELD, METHOD, PARAMETER}) +@javax.annotation.meta.TypeQualifierNickname +@javax.annotation.Nonnull(when = javax.annotation.meta.When.UNKNOWN) +@interface ParametricNullness {} + +// FILE: ElementTypesAreNonnullByDefault.java +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Marks all "top-level" types as non-null in a way that is recognized by Kotlin. Note that this + * unfortunately includes type-variable usages, so we also provide {@link ParametricNullness} to + * "undo" it as best we can. + */ +@Retention(RUNTIME) +@Target(TYPE) +@TypeQualifierDefault({FIELD, METHOD, PARAMETER}) +@Nonnull +@interface ElementTypesAreNonnullByDefault {} + +// FILE: MyFunction.java +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; + +@ElementTypesAreNonnullByDefault +public interface MyFunction extends java.util.function.Function { + @Override + @ParametricNullness + T apply (@ParametricNullness F input); +} + +// FILE: main.kt + +class A : MyFunction { + override fun apply(x: String?): String? = "" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java index 972f5d62081..a7d79ed1106 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaTestGenerated.java @@ -618,6 +618,12 @@ public class ForeignAnnotationsCompiledJavaTestGenerated extends AbstractForeign runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/eclipse.kt"); } + @Test + @TestMetadata("overrideOfMethodWithParametricNullness.kt") + public void testOverrideOfMethodWithParametricNullness() throws Exception { + runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt"); + } + @Test @TestMetadata("typeUseOnObject.kt") public void testTypeUseOnObject() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java index 11fd47ee74d..5ca9c1a1f43 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated.java @@ -618,6 +618,12 @@ public class ForeignAnnotationsCompiledJavaWithPsiClassReadingTestGenerated exte runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/eclipse.kt"); } + @Test + @TestMetadata("overrideOfMethodWithParametricNullness.kt") + public void testOverrideOfMethodWithParametricNullness() throws Exception { + runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt"); + } + @Test @TestMetadata("typeUseOnObject.kt") public void testTypeUseOnObject() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java index 81d188e6fdd..58bcd57e83c 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ForeignAnnotationsSourceJavaTestGenerated.java @@ -618,6 +618,12 @@ public class ForeignAnnotationsSourceJavaTestGenerated extends AbstractForeignAn runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/eclipse.kt"); } + @Test + @TestMetadata("overrideOfMethodWithParametricNullness.kt") + public void testOverrideOfMethodWithParametricNullness() throws Exception { + runTest("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/overrideOfMethodWithParametricNullness.kt"); + } + @Test @TestMetadata("typeUseOnObject.kt") public void testTypeUseOnObject() throws Exception {