From 6354d9d54fd73094a5b007b4542bf0d8d63dd583 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 9 Aug 2017 22:15:38 +0300 Subject: [PATCH] Treat SEALED_SUBCLASS_FQ_NAME_LIST change as a class signature change #KT-19580 --- .../incremental/protoDifferenceUtils.kt | 10 ++++- .../build/IncrementalJpsTestGenerated.java | 12 ++++++ .../JsProtoComparisonTestGenerated.java | 42 +++++++++++++++++++ .../JvmProtoComparisonTestGenerated.java | 42 +++++++++++++++++++ .../nestedClassMembersChanged/new.kt | 9 ++++ .../nestedClassMembersChanged/old.kt | 9 ++++ .../nestedClassMembersChanged/result.out | 3 ++ .../nestedClassSignatureChanged/new.kt | 7 ++++ .../nestedClassSignatureChanged/old.kt | 7 ++++ .../nestedClassSignatureChanged/result.out | 2 + .../sealedClassImplAdded/new.kt | 9 ++++ .../sealedClassImplAdded/old.kt | 8 ++++ .../sealedClassImplAdded/result.out | 7 ++++ .../sealedClassImplRemoved/new.kt | 8 ++++ .../sealedClassImplRemoved/old.kt | 9 ++++ .../sealedClassImplRemoved/result.out | 7 ++++ .../sealedClassNestedImplAdded/new.kt | 12 ++++++ .../sealedClassNestedImplAdded/old.kt | 11 +++++ .../sealedClassNestedImplAdded/result.out | 8 ++++ .../sealedClassNestedImplAddedDeep/new.kt | 22 ++++++++++ .../sealedClassNestedImplAddedDeep/old.kt | 19 +++++++++ .../sealedClassNestedImplAddedDeep/result.out | 12 ++++++ .../sealedClassNestedImplRemoved/new.kt | 11 +++++ .../sealedClassNestedImplRemoved/old.kt | 12 ++++++ .../sealedClassNestedImplRemoved/result.out | 8 ++++ .../sealedClassImplAdded/Base.kt | 8 ++-- .../sealedClassImplAdded/Base.kt.new.1 | 10 ++--- .../sealedClassImplAdded/build.log | 12 +++--- .../sealedClassImplAdded/use.kt | 2 - .../sealedClassIndirectImplAdded/Base.kt | 3 ++ .../Base.kt.new.1 | 4 ++ .../sealedClassIndirectImplAdded/build.log | 40 ++++++++++++++++++ .../sealedClassIndirectImplAdded/use.kt | 4 ++ .../sealedClassIndirectImplAdded/use.kt.new.2 | 5 +++ .../sealedClassNestedImplAdded/Base.kt | 4 ++ .../sealedClassNestedImplAdded/Base.kt.new.1 | 5 +++ .../sealedClassNestedImplAdded/build.log | 40 ++++++++++++++++++ .../sealedClassNestedImplAdded/use.kt | 7 ++++ .../sealedClassNestedImplAdded/use.kt.new.2 | 8 ++++ 39 files changed, 440 insertions(+), 18 deletions(-) create mode 100644 jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/new.kt create mode 100644 jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/old.kt create mode 100644 jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/result.out create mode 100644 jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/new.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/old.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/result.out create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/new.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/old.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/result.out create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/new.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/old.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/result.out create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/new.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/old.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/result.out create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/new.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/old.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/result.out create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/new.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/old.kt create mode 100644 jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/result.out create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt.new.1 create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt.new.2 create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt.new.1 create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt create mode 100644 jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt.new.2 diff --git a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt index 644db0ca0c5..1bfa16fc7fb 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt @@ -236,7 +236,15 @@ private class DifferenceCalculatorForClass( isClassAffected = true } ProtoBufClassKind.SEALED_SUBCLASS_FQ_NAME_LIST -> { - // TODO + isClassAffected = true + // Subclasses are considered to be affected to fix the case where + // an implementation is added to an nth-level (n > 1) sealed class. + // In case of the following hierarchy: + // Base <- Intermediate <- Impl + // the change of the SEALED_SUBCLASS_FQ_NAME_LIST will be detected in the Intermediate, + // but there can be usages, that should be rebuilt, without direct references to the Intermediate: + // when (x as Base) { is Impl -> ... } + areSubclassesAffected = true } ProtoBufClassKind.TYPE_TABLE -> { // TODO diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index f3d3b61ee31..cef611354eb 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -1580,6 +1580,18 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("sealedClassIndirectImplAdded") + public void testSealedClassIndirectImplAdded() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/"); + doTest(fileName); + } + + @TestMetadata("sealedClassNestedImplAdded") + public void testSealedClassNestedImplAdded() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/"); + doTest(fileName); + } + @TestMetadata("secondaryConstructorAdded") public void testSecondaryConstructorAdded() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/"); diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JsProtoComparisonTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JsProtoComparisonTestGenerated.java index 57af389c73c..27376f3b2e9 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JsProtoComparisonTestGenerated.java +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JsProtoComparisonTestGenerated.java @@ -67,6 +67,42 @@ public class JsProtoComparisonTestGenerated extends AbstractJsProtoComparisonTes String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/classWithSuperTypeListChanged/"); doTest(fileName); } + + @TestMetadata("nestedClassSignatureChanged") + public void testNestedClassSignatureChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/"); + doTest(fileName); + } + + @TestMetadata("sealedClassImplAdded") + public void testSealedClassImplAdded() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/"); + doTest(fileName); + } + + @TestMetadata("sealedClassImplRemoved") + public void testSealedClassImplRemoved() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/"); + doTest(fileName); + } + + @TestMetadata("sealedClassNestedImplAdded") + public void testSealedClassNestedImplAdded() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/"); + doTest(fileName); + } + + @TestMetadata("sealedClassNestedImplAddedDeep") + public void testSealedClassNestedImplAddedDeep() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/"); + doTest(fileName); + } + + @TestMetadata("sealedClassNestedImplRemoved") + public void testSealedClassNestedImplRemoved() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/"); + doTest(fileName); + } } @TestMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange") @@ -158,6 +194,12 @@ public class JsProtoComparisonTestGenerated extends AbstractJsProtoComparisonTes doTest(fileName); } + @TestMetadata("nestedClassMembersChanged") + public void testNestedClassMembersChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/"); + doTest(fileName); + } + @TestMetadata("sealedClassImplAdded") public void testSealedClassImplAdded() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/sealedClassImplAdded/"); diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JvmProtoComparisonTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JvmProtoComparisonTestGenerated.java index e8af27c8bc8..422ca0e61fb 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JvmProtoComparisonTestGenerated.java +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/JvmProtoComparisonTestGenerated.java @@ -67,6 +67,42 @@ public class JvmProtoComparisonTestGenerated extends AbstractJvmProtoComparisonT String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/classWithSuperTypeListChanged/"); doTest(fileName); } + + @TestMetadata("nestedClassSignatureChanged") + public void testNestedClassSignatureChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/"); + doTest(fileName); + } + + @TestMetadata("sealedClassImplAdded") + public void testSealedClassImplAdded() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/"); + doTest(fileName); + } + + @TestMetadata("sealedClassImplRemoved") + public void testSealedClassImplRemoved() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/"); + doTest(fileName); + } + + @TestMetadata("sealedClassNestedImplAdded") + public void testSealedClassNestedImplAdded() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/"); + doTest(fileName); + } + + @TestMetadata("sealedClassNestedImplAddedDeep") + public void testSealedClassNestedImplAddedDeep() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/"); + doTest(fileName); + } + + @TestMetadata("sealedClassNestedImplRemoved") + public void testSealedClassNestedImplRemoved() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/"); + doTest(fileName); + } } @TestMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange") @@ -158,6 +194,12 @@ public class JvmProtoComparisonTestGenerated extends AbstractJvmProtoComparisonT doTest(fileName); } + @TestMetadata("nestedClassMembersChanged") + public void testNestedClassMembersChanged() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/"); + doTest(fileName); + } + @TestMetadata("sealedClassImplAdded") public void testSealedClassImplAdded() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged/sealedClassImplAdded/"); diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/new.kt b/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/new.kt new file mode 100644 index 00000000000..e70454ffb41 --- /dev/null +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/new.kt @@ -0,0 +1,9 @@ +package test + +class Base { + class Nested1 { + class Nested2 { + fun added() {} + } + } +} \ No newline at end of file diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/old.kt b/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/old.kt new file mode 100644 index 00000000000..d3aacfa415c --- /dev/null +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/old.kt @@ -0,0 +1,9 @@ +package test + +class Base { + class Nested1 { + class Nested2 { + fun removed() {} + } + } +} \ No newline at end of file diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/result.out b/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/result.out new file mode 100644 index 00000000000..595aff44280 --- /dev/null +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/nestedClassMembersChanged/result.out @@ -0,0 +1,3 @@ +PROTO DIFFERENCE in test/Base.Nested1.Nested2: FUNCTION_LIST +CHANGES in test/Base.Nested1.Nested2: MEMBERS + [added, removed] diff --git a/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/new.kt b/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/new.kt new file mode 100644 index 00000000000..ade1f6fb033 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/new.kt @@ -0,0 +1,7 @@ +package test + +open class Base { + class Nested1 { + class Nested2 + } +} \ No newline at end of file diff --git a/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/old.kt b/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/old.kt new file mode 100644 index 00000000000..bdc78a8f032 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/old.kt @@ -0,0 +1,7 @@ +package test + +open class Base { + class Nested1 { + class Nested2 : Base() + } +} \ No newline at end of file diff --git a/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/result.out b/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/result.out new file mode 100644 index 00000000000..51e6416c9e4 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/nestedClassSignatureChanged/result.out @@ -0,0 +1,2 @@ +PROTO DIFFERENCE in test/Base.Nested1.Nested2: SUPERTYPE_LIST +CHANGES in test/Base.Nested1.Nested2: CLASS_SIGNATURE diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/new.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/new.kt new file mode 100644 index 00000000000..5c4d97e0232 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/new.kt @@ -0,0 +1,9 @@ +package test + +sealed class Base1 +class Impl1 : Base1() +class Impl11 : Base1() + +sealed class Base2 +class Impl2 : Base2() +class Impl22 : Base2() diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/old.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/old.kt new file mode 100644 index 00000000000..bfb054c9fbb --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/old.kt @@ -0,0 +1,8 @@ +package test + +sealed class Base1 +class Impl1 : Base1() + +sealed class Base2 +class Impl2 : Base2() +class Impl22 diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/result.out b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/result.out new file mode 100644 index 00000000000..027ee98b281 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplAdded/result.out @@ -0,0 +1,7 @@ +ADDED test/Impl11 +PROTO DIFFERENCE in test/Base1: SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base1: CLASS_SIGNATURE +PROTO DIFFERENCE in test/Base2: SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base2: CLASS_SIGNATURE +PROTO DIFFERENCE in test/Impl22: SUPERTYPE_LIST +CHANGES in test/Impl22: CLASS_SIGNATURE diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/new.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/new.kt new file mode 100644 index 00000000000..bfb054c9fbb --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/new.kt @@ -0,0 +1,8 @@ +package test + +sealed class Base1 +class Impl1 : Base1() + +sealed class Base2 +class Impl2 : Base2() +class Impl22 diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/old.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/old.kt new file mode 100644 index 00000000000..5c4d97e0232 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/old.kt @@ -0,0 +1,9 @@ +package test + +sealed class Base1 +class Impl1 : Base1() +class Impl11 : Base1() + +sealed class Base2 +class Impl2 : Base2() +class Impl22 : Base2() diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/result.out b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/result.out new file mode 100644 index 00000000000..07cefb49155 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassImplRemoved/result.out @@ -0,0 +1,7 @@ +REMOVED test/Impl11 +PROTO DIFFERENCE in test/Base1: SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base1: CLASS_SIGNATURE +PROTO DIFFERENCE in test/Base2: SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base2: CLASS_SIGNATURE +PROTO DIFFERENCE in test/Impl22: SUPERTYPE_LIST +CHANGES in test/Impl22: CLASS_SIGNATURE diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/new.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/new.kt new file mode 100644 index 00000000000..17258934aca --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/new.kt @@ -0,0 +1,12 @@ +package test + +sealed class Base1 { + class Nested1 : Base1() + class Nested2 : Base1() +} + +sealed class Base2 { + class Nested1 : Base2() + class Nested2 : Base2() +} + diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/old.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/old.kt new file mode 100644 index 00000000000..bc57072314f --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/old.kt @@ -0,0 +1,11 @@ +package test + +sealed class Base1 { + class Nested1 : Base1() +} + +sealed class Base2 { + class Nested1 : Base2() + class Nested2 +} + diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/result.out b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/result.out new file mode 100644 index 00000000000..c7661b6ed2c --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAdded/result.out @@ -0,0 +1,8 @@ +ADDED test/Base1.Nested2 +PROTO DIFFERENCE in test/Base1: NESTED_CLASS_NAME_LIST, SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base1: CLASS_SIGNATURE, MEMBERS + [Nested2] +PROTO DIFFERENCE in test/Base2: SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base2: CLASS_SIGNATURE +PROTO DIFFERENCE in test/Base2.Nested2: SUPERTYPE_LIST +CHANGES in test/Base2.Nested2: CLASS_SIGNATURE diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/new.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/new.kt new file mode 100644 index 00000000000..4f3c46b44e1 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/new.kt @@ -0,0 +1,22 @@ +package test + +sealed class Base1 { + sealed class Nested1 : Base1() { + sealed class Nested2 : Nested1() { + class Nested3 : Nested2() + } + } +} + +sealed class Base2 { + sealed class Nested1 : Base2() { + class Nested2 : Nested1() + class Nested3 : Nested1() + } +} + +sealed class Base3 { + sealed class Nested1 : Base3() { + class Nested2 : Nested1() + } +} diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/old.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/old.kt new file mode 100644 index 00000000000..026fe02139b --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/old.kt @@ -0,0 +1,19 @@ +package test + +sealed class Base1 { + sealed class Nested1 : Base1() { + sealed class Nested2 : Nested1() + } +} + +sealed class Base2 { + sealed class Nested1 : Base2() { + class Nested2 : Nested1() + } +} + +sealed class Base3 { + sealed class Nested1 : Base3() { + class Nested2 + } +} diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/result.out b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/result.out new file mode 100644 index 00000000000..3363b854df1 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplAddedDeep/result.out @@ -0,0 +1,12 @@ +ADDED test/Base1.Nested1.Nested2.Nested3 +ADDED test/Base2.Nested1.Nested3 +PROTO DIFFERENCE in test/Base1.Nested1.Nested2: NESTED_CLASS_NAME_LIST, SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base1.Nested1.Nested2: CLASS_SIGNATURE, MEMBERS + [Nested3] +PROTO DIFFERENCE in test/Base2.Nested1: NESTED_CLASS_NAME_LIST, SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base2.Nested1: CLASS_SIGNATURE, MEMBERS + [Nested3] +PROTO DIFFERENCE in test/Base3.Nested1: SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base3.Nested1: CLASS_SIGNATURE +PROTO DIFFERENCE in test/Base3.Nested1.Nested2: SUPERTYPE_LIST +CHANGES in test/Base3.Nested1.Nested2: CLASS_SIGNATURE diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/new.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/new.kt new file mode 100644 index 00000000000..bc57072314f --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/new.kt @@ -0,0 +1,11 @@ +package test + +sealed class Base1 { + class Nested1 : Base1() +} + +sealed class Base2 { + class Nested1 : Base2() + class Nested2 +} + diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/old.kt b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/old.kt new file mode 100644 index 00000000000..17258934aca --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/old.kt @@ -0,0 +1,12 @@ +package test + +sealed class Base1 { + class Nested1 : Base1() + class Nested2 : Base1() +} + +sealed class Base2 { + class Nested1 : Base2() + class Nested2 : Base2() +} + diff --git a/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/result.out b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/result.out new file mode 100644 index 00000000000..87fa076f273 --- /dev/null +++ b/jps-plugin/testData/comparison/classSignatureChange/sealedClassNestedImplRemoved/result.out @@ -0,0 +1,8 @@ +REMOVED test/Base1.Nested2 +PROTO DIFFERENCE in test/Base1: NESTED_CLASS_NAME_LIST, SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base1: CLASS_SIGNATURE, MEMBERS + [Nested2] +PROTO DIFFERENCE in test/Base2: SEALED_SUBCLASS_FQ_NAME_LIST +CHANGES in test/Base2: CLASS_SIGNATURE +PROTO DIFFERENCE in test/Base2.Nested2: SUPERTYPE_LIST +CHANGES in test/Base2.Nested2: CLASS_SIGNATURE diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt index c09db0c3c10..8357128264a 100644 --- a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt @@ -1,4 +1,4 @@ -sealed class Base { - class A : Base() - class B : Base() -} \ No newline at end of file +sealed class Base + +class A : Base() +class B : Base() \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt.new.1 b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt.new.1 index bda48c9d044..456d3dd6e24 100644 --- a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt.new.1 +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/Base.kt.new.1 @@ -1,5 +1,5 @@ -sealed class Base { - class A : Base() - class B : Base() - class C : Base() -} \ No newline at end of file +sealed class Base + +class A : Base() +class B : Base() +class C : Base() \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log index 5ea3c686357..8517024c192 100644 --- a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log @@ -1,8 +1,8 @@ ================ Step #1 ================= Cleaning output files: - out/production/module/Base$A.class - out/production/module/Base$B.class + out/production/module/A.class + out/production/module/B.class out/production/module/Base.class End of files Compiling files: @@ -27,14 +27,14 @@ COMPILATION FAILED ================ Step #2 ================= Cleaning output files: - out/production/module/Base$A.class - out/production/module/Base$B.class - out/production/module/Base$C.class + out/production/module/A.class + out/production/module/B.class out/production/module/Base.class + out/production/module/C.class End of files Compiling files: src/Base.kt src/use.kt End of files Exit code: OK ------------------------------------------- +------------------------------------------ \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/use.kt b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/use.kt index dbf02b5d2a4..deba19d836a 100644 --- a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/use.kt +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/use.kt @@ -1,5 +1,3 @@ -import Base.* - fun use(x: Base): String = when (x) { is A -> "A" diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt new file mode 100644 index 00000000000..dfc8caa5681 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt @@ -0,0 +1,3 @@ +sealed class Base +sealed class Intermediate : Base() +class Impl1 : Intermediate() \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt.new.1 b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt.new.1 new file mode 100644 index 00000000000..388061e91c6 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/Base.kt.new.1 @@ -0,0 +1,4 @@ +sealed class Base +sealed class Intermediate : Base() +class Impl1 : Intermediate() +class Impl2 : Intermediate() \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log new file mode 100644 index 00000000000..5f9c5ba277b --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log @@ -0,0 +1,40 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/Base.class + out/production/module/Impl1.class + out/production/module/Intermediate.class +End of files +Compiling files: + src/Base.kt +End of files +Marked as dirty by Kotlin: + src/use.kt +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/UseKt.class +End of files +Compiling files: + src/use.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +'when' expression must be exhaustive, add necessary 'is Impl2' branch or 'else' branch instead + +================ Step #2 ================= + +Cleaning output files: + out/production/module/Base.class + out/production/module/Impl1.class + out/production/module/Impl2.class + out/production/module/Intermediate.class +End of files +Compiling files: + src/Base.kt + src/use.kt +End of files +Exit code: OK +------------------------------------------ \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt new file mode 100644 index 00000000000..28952f03122 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt @@ -0,0 +1,4 @@ +fun use(x: Base): Int = + when (x) { + is Impl1 -> 1 + } \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt.new.2 b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt.new.2 new file mode 100644 index 00000000000..956ba3a3ac0 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/use.kt.new.2 @@ -0,0 +1,5 @@ +fun use(x: Base): Int = + when (x) { + is Impl1 -> 1 + is Impl2 -> 2 + } \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt new file mode 100644 index 00000000000..c09db0c3c10 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt @@ -0,0 +1,4 @@ +sealed class Base { + class A : Base() + class B : Base() +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt.new.1 b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt.new.1 new file mode 100644 index 00000000000..bda48c9d044 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/Base.kt.new.1 @@ -0,0 +1,5 @@ +sealed class Base { + class A : Base() + class B : Base() + class C : Base() +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log new file mode 100644 index 00000000000..5ea3c686357 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log @@ -0,0 +1,40 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/Base$A.class + out/production/module/Base$B.class + out/production/module/Base.class +End of files +Compiling files: + src/Base.kt +End of files +Marked as dirty by Kotlin: + src/use.kt +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/UseKt.class +End of files +Compiling files: + src/use.kt +End of files +Exit code: ABORT +------------------------------------------ +COMPILATION FAILED +'when' expression must be exhaustive, add necessary 'is C' branch or 'else' branch instead + +================ Step #2 ================= + +Cleaning output files: + out/production/module/Base$A.class + out/production/module/Base$B.class + out/production/module/Base$C.class + out/production/module/Base.class +End of files +Compiling files: + src/Base.kt + src/use.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt new file mode 100644 index 00000000000..dbf02b5d2a4 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt @@ -0,0 +1,7 @@ +import Base.* + +fun use(x: Base): String = + when (x) { + is A -> "A" + is B -> "B" + } \ No newline at end of file diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt.new.2 b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt.new.2 new file mode 100644 index 00000000000..3034c5921b3 --- /dev/null +++ b/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/use.kt.new.2 @@ -0,0 +1,8 @@ +import Base.* + +fun use(x: Base): String = + when (x) { + is A -> "A" + is B -> "B" + is C -> "C" + } \ No newline at end of file