diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java index d6e877b8eee..98968612f81 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java @@ -1065,6 +1065,24 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta doTest(fileName); } + @TestMetadata("javaFieldNullabilityChanged") + public void testJavaFieldNullabilityChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/"); + doTest(fileName); + } + + @TestMetadata("javaMethodParamNullabilityChanged") + public void testJavaMethodParamNullabilityChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/"); + doTest(fileName); + } + + @TestMetadata("javaMethodReturnTypeNullabilityChanged") + public void testJavaMethodReturnTypeNullabilityChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/"); + doTest(fileName); + } + @TestMetadata("methodAddedInSuper") public void testMethodAddedInSuper() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/methodAddedInSuper/"); diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index 39d92ad1aca..904047b95c1 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -1065,6 +1065,24 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("javaFieldNullabilityChanged") + public void testJavaFieldNullabilityChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/"); + doTest(fileName); + } + + @TestMetadata("javaMethodParamNullabilityChanged") + public void testJavaMethodParamNullabilityChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/"); + doTest(fileName); + } + + @TestMetadata("javaMethodReturnTypeNullabilityChanged") + public void testJavaMethodReturnTypeNullabilityChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/"); + doTest(fileName); + } + @TestMetadata("methodAddedInSuper") public void testMethodAddedInSuper() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/withJava/javaUsedInKotlin/methodAddedInSuper/"); diff --git a/jps/jps-plugin/src/META-INF/services/org.jetbrains.jps.builders.java.dependencyView.AnnotationsChangeTracker b/jps/jps-plugin/src/META-INF/services/org.jetbrains.jps.builders.java.dependencyView.AnnotationsChangeTracker new file mode 100644 index 00000000000..2acdad61d00 --- /dev/null +++ b/jps/jps-plugin/src/META-INF/services/org.jetbrains.jps.builders.java.dependencyView.AnnotationsChangeTracker @@ -0,0 +1 @@ +org.jetbrains.jps.builders.java.dependencyView.NullabilityAnnotationsTracker \ No newline at end of file diff --git a/jps/jps-plugin/src/org/jetbrains/jps/builders/java/dependencyView/NullabilityAnnotationsTracker.kt b/jps/jps-plugin/src/org/jetbrains/jps/builders/java/dependencyView/NullabilityAnnotationsTracker.kt new file mode 100644 index 00000000000..940a09fde89 --- /dev/null +++ b/jps/jps-plugin/src/org/jetbrains/jps/builders/java/dependencyView/NullabilityAnnotationsTracker.kt @@ -0,0 +1,73 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jps.builders.java.dependencyView + +import gnu.trove.TIntHashSet +import org.jetbrains.jps.builders.java.dependencyView.TypeRepr.ClassType +import org.jetbrains.kotlin.fileClasses.internalNameWithoutInnerClasses +import org.jetbrains.kotlin.load.java.JAVAX_NONNULL_ANNOTATION +import org.jetbrains.kotlin.load.java.NOT_NULL_ANNOTATIONS +import org.jetbrains.kotlin.load.java.NULLABLE_ANNOTATIONS +import java.util.* + +internal class NullabilityAnnotationsTracker : AnnotationsChangeTracker() { + private val annotations = (NULLABLE_ANNOTATIONS + JAVAX_NONNULL_ANNOTATION + NOT_NULL_ANNOTATIONS).mapTo(HashSet()) { it.internalNameWithoutInnerClasses }.toTypedArray() + + override fun methodAnnotationsChanged( + context: DependencyContext, + method: MethodRepr, + annotationsDiff: Difference.Specifier, + paramAnnotationsDiff: Difference.Specifier + ): Set { + val changedAnnotations = annotationsDiff.addedOrRemoved() + + paramAnnotationsDiff.addedOrRemoved().map { it.type } + + return handleNullAnnotationsChanges(context, method, changedAnnotations) + } + + + override fun fieldAnnotationsChanged( + context: NamingContext, + field: FieldRepr, + annotationsDiff: Difference.Specifier + ): Set { + return handleNullAnnotationsChanges(context, field, annotationsDiff.addedOrRemoved()) + } + + private fun handleNullAnnotationsChanges(context: NamingContext, protoMember: ProtoMember, annotations: Sequence): Set { + val nullabilityAnnotations = TIntHashSet(this.annotations.toIntArray { context.get(it) }) + val changedNullAnnotation = annotations.firstOrNull { nullabilityAnnotations.contains(it.className) } + + val result = EnumSet.noneOf(Recompile::class.java) + if (changedNullAnnotation != null) { + result.add(Recompile.USAGES) + + if (protoMember is MethodRepr && !protoMember.isFinal) { + // methods can be overridden, whereas fields cannot be + result.add(Recompile.SUBCLASSES) + } + } + + return result + } + + private fun Difference.Specifier.addedOrRemoved(): Sequence = + added().asSequence() + removed().asSequence() + + private inline fun Array.toIntArray(fn: (T)->Int): IntArray = + IntArray(size) { i -> fn(get(i)) } +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/A.java b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/A.java new file mode 100644 index 00000000000..84cdc5aa2fa --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/A.java @@ -0,0 +1,5 @@ +import org.jetbrains.annotations.Nullable; + +class A { + @Nullable String s = "A.s"; +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/A.java.new.1 b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/A.java.new.1 new file mode 100644 index 00000000000..aadb3a9a699 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/A.java.new.1 @@ -0,0 +1,5 @@ +import org.jetbrains.annotations.NotNull; + +class A { + @NotNull String s = "A.s"; +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/AChild.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/AChild.kt new file mode 100644 index 00000000000..80bf657d9ee --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/AChild.kt @@ -0,0 +1 @@ +internal class AChild : A() \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/Dummy.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/Dummy.kt new file mode 100644 index 00000000000..be783c00c18 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/Dummy.kt @@ -0,0 +1 @@ +class Dummy \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/build.log b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/build.log new file mode 100644 index 00000000000..71afaa9238a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/build.log @@ -0,0 +1,19 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/A.java +End of files +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/UseAKt.class +End of files +Compiling files: + src/useA.kt +End of files +Exit code: OK +------------------------------------------ \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/useA.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/useA.kt new file mode 100644 index 00000000000..2300e214d17 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaFieldNullabilityChanged/useA.kt @@ -0,0 +1,3 @@ +fun useA() { + A().s +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/A.java b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/A.java new file mode 100644 index 00000000000..962471e0db4 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/A.java @@ -0,0 +1,7 @@ +import org.jetbrains.annotations.Nullable; + +class A { + void f(@Nullable String s) { + System.out.println(s); + } +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/A.java.new.1 b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/A.java.new.1 new file mode 100644 index 00000000000..b4a5d22bc45 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/A.java.new.1 @@ -0,0 +1,7 @@ +import org.jetbrains.annotations.NotNull; + +class A { + void f(@NotNull String s) { + System.out.println(s); + } +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/AChild.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/AChild.kt new file mode 100644 index 00000000000..97cfbde5d2d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/AChild.kt @@ -0,0 +1,3 @@ +internal class AChild : A() { + override fun f(s: String?) {} +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/AChild.kt.new.2 b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/AChild.kt.new.2 new file mode 100644 index 00000000000..c8fb196e400 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/AChild.kt.new.2 @@ -0,0 +1,3 @@ +internal class AChild : A() { + override fun f(s: String) {} +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/Dummy.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/Dummy.kt new file mode 100644 index 00000000000..be783c00c18 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/Dummy.kt @@ -0,0 +1 @@ +class Dummy \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/build.log b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/build.log new file mode 100644 index 00000000000..288a865c164 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/build.log @@ -0,0 +1,47 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/A.java +End of files +Cleaning output files: + out/production/module/AChild.class + out/production/module/META-INF/module.kotlin_module + out/production/module/UseAKt.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +'f' overrides nothing +Null can not be a value of a non-null type String + +================ Step #2 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Compiling files: + src/A.java +End of files +Cleaning output files: + out/production/module/Dummy.class +End of files +Compiling files: + src/Dummy.kt +End of files +Exit code: OK +------------------------------------------ \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/experimental-ic-build.log b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/experimental-ic-build.log new file mode 100644 index 00000000000..f22ff34c7da --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/experimental-ic-build.log @@ -0,0 +1,39 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/A.java +End of files +Cleaning output files: + out/production/module/AChild.class + out/production/module/META-INF/module.kotlin_module + out/production/module/UseAKt.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +'f' overrides nothing +Null can not be a value of a non-null type String + +================ Step #2 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: OK +------------------------------------------ +Compiling files: + src/A.java +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/useA.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/useA.kt new file mode 100644 index 00000000000..39133eb87e9 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/useA.kt @@ -0,0 +1,3 @@ +fun useA() { + A().f(null) +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/useA.kt.new.2 b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/useA.kt.new.2 new file mode 100644 index 00000000000..3e74807f4cb --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodParamNullabilityChanged/useA.kt.new.2 @@ -0,0 +1,3 @@ +fun useA() { + A().f("useA") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/A.java b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/A.java new file mode 100644 index 00000000000..47421155425 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/A.java @@ -0,0 +1,8 @@ +import org.jetbrains.annotations.Nullable; + +class A { + @Nullable + String f() { + return "A.f"; + } +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/A.java.new.1 b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/A.java.new.1 new file mode 100644 index 00000000000..8fdf10eea55 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/A.java.new.1 @@ -0,0 +1,8 @@ +import org.jetbrains.annotations.NotNull; + +class A { + @NotNull + String f() { + return "A.f"; + } +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/AChild.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/AChild.kt new file mode 100644 index 00000000000..67236df6aee --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/AChild.kt @@ -0,0 +1,3 @@ +internal class AChild : A() { + override fun f(): String? = "AChild.f" +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/AChild.kt.new.2 b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/AChild.kt.new.2 new file mode 100644 index 00000000000..b5f45e4e0f3 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/AChild.kt.new.2 @@ -0,0 +1,3 @@ +internal class AChild : A() { + override fun f(): String = "AChild.f" +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/Dummy.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/Dummy.kt new file mode 100644 index 00000000000..be783c00c18 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/Dummy.kt @@ -0,0 +1 @@ +class Dummy \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/build.log b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/build.log new file mode 100644 index 00000000000..09500bf6496 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/build.log @@ -0,0 +1,46 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/A.java +End of files +Cleaning output files: + out/production/module/AChild.class + out/production/module/META-INF/module.kotlin_module + out/production/module/UseAKt.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +Return type of 'f' is not a subtype of the return type of the overridden member '@NotNull public/*package*/ open fun f(): String defined in A' + +================ Step #2 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Compiling files: + src/A.java +End of files +Cleaning output files: + out/production/module/Dummy.class +End of files +Compiling files: + src/Dummy.kt +End of files +Exit code: OK +------------------------------------------ \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/experimental-ic-build.log b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/experimental-ic-build.log new file mode 100644 index 00000000000..3aea89e6c85 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/experimental-ic-build.log @@ -0,0 +1,38 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Exit code: NOTHING_DONE +------------------------------------------ +Compiling files: + src/A.java +End of files +Cleaning output files: + out/production/module/AChild.class + out/production/module/META-INF/module.kotlin_module + out/production/module/UseAKt.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +Return type of 'f' is not a subtype of the return type of the overridden member '@NotNull public/*package*/ open fun f(): String defined in A' + +================ Step #2 ================= + +Cleaning output files: + out/production/module/A.class +End of files +Compiling files: + src/AChild.kt + src/useA.kt +End of files +Exit code: OK +------------------------------------------ +Compiling files: + src/A.java +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/useA.kt b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/useA.kt new file mode 100644 index 00000000000..f485f3fb8d8 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/javaMethodReturnTypeNullabilityChanged/useA.kt @@ -0,0 +1,3 @@ +fun useA() { + val s = A().f() +} \ No newline at end of file