diff --git a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt index 1b660cd06a1..db7d0055f57 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/protoDifferenceUtils.kt @@ -57,6 +57,7 @@ internal val MessageLite.isPrivate: Boolean is ProtoBuf.Constructor -> Flags.VISIBILITY.get(flags) is ProtoBuf.Function -> Flags.VISIBILITY.get(flags) is ProtoBuf.Property -> Flags.VISIBILITY.get(flags) + is ProtoBuf.TypeAlias -> Flags.VISIBILITY.get(flags) else -> error("Unknown message: $this") })) @@ -65,6 +66,7 @@ private fun MessageLite.name(nameResolver: NameResolver): String { is ProtoBuf.Constructor -> "" is ProtoBuf.Function -> nameResolver.getString(name) is ProtoBuf.Property -> nameResolver.getString(name) + is ProtoBuf.TypeAlias -> nameResolver.getString(name) else -> error("Unknown message: $this") } } @@ -141,6 +143,7 @@ private abstract class DifferenceCalculator() { is ProtoBuf.Constructor -> hashCode(stringIndexes, fqNameIndexes) is ProtoBuf.Function -> hashCode(stringIndexes, fqNameIndexes) is ProtoBuf.Property -> hashCode(stringIndexes, fqNameIndexes) + is ProtoBuf.TypeAlias -> hashCode(stringIndexes, fqNameIndexes) else -> error("Unknown message: $this") } } @@ -150,6 +153,7 @@ private abstract class DifferenceCalculator() { old is ProtoBuf.Constructor && new is ProtoBuf.Constructor -> checkEquals(old, new) old is ProtoBuf.Function && new is ProtoBuf.Function -> checkEquals(old, new) old is ProtoBuf.Property && new is ProtoBuf.Property -> checkEquals(old, new) + old is ProtoBuf.TypeAlias && new is ProtoBuf.TypeAlias -> checkEquals(old, new) else -> error("Unknown message: $this") } } @@ -261,9 +265,10 @@ private class DifferenceCalculatorForPackageFacade(oldData: ProtoMapValue, newDa names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Package::getFunctionList)) ProtoBufPackageKind.PROPERTY_LIST -> names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Package::getPropertyList)) + ProtoBufPackageKind.TYPE_ALIAS_LIST -> + names.addAll(calcDifferenceForNonPrivateMembers(ProtoBuf.Package::getTypeAliasList)) ProtoBufPackageKind.TYPE_TABLE, - ProtoBufPackageKind.PACKAGE_MODULE_NAME, - ProtoBufPackageKind.TYPE_ALIAS_LIST -> { + ProtoBufPackageKind.PACKAGE_MODULE_NAME -> { // TODO } else -> throw IllegalArgumentException("Unsupported kind: $kind") diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java index c8b4fab5886..3e527eadfe8 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/ExperimentalIncrementalJpsTestGenerated.java @@ -205,6 +205,18 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta doTest(fileName); } + @TestMetadata("addMemberTypeAlias") + public void testAddMemberTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/"); + doTest(fileName); + } + + @TestMetadata("addTopLevelTypeAlias") + public void testAddTopLevelTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/"); + doTest(fileName); + } + @TestMetadata("allConstants") public void testAllConstants() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/allConstants/"); @@ -839,6 +851,18 @@ public class ExperimentalIncrementalJpsTestGenerated extends AbstractExperimenta doTest(fileName); } + @TestMetadata("removeMemberTypeAlias") + public void testRemoveMemberTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/"); + doTest(fileName); + } + + @TestMetadata("removeTopLevelTypeAlias") + public void testRemoveTopLevelTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/"); + doTest(fileName); + } + @TestMetadata("renameClass") public void testRenameClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/renameClass/"); 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 cd72810ef37..47451ca06ab 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 @@ -205,6 +205,18 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("addMemberTypeAlias") + public void testAddMemberTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/"); + doTest(fileName); + } + + @TestMetadata("addTopLevelTypeAlias") + public void testAddTopLevelTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/"); + doTest(fileName); + } + @TestMetadata("allConstants") public void testAllConstants() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/allConstants/"); @@ -839,6 +851,18 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("removeMemberTypeAlias") + public void testRemoveMemberTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/"); + doTest(fileName); + } + + @TestMetadata("removeTopLevelTypeAlias") + public void testRemoveTopLevelTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/"); + doTest(fileName); + } + @TestMetadata("renameClass") public void testRenameClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/renameClass/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a.kt b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a.kt new file mode 100644 index 00000000000..7563b0f4d1d --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a.kt @@ -0,0 +1,8 @@ +package a + +class Outer { + inner class B(x: String) + + fun A1(x: Any) = x + fun A2(x: Any) = x +} diff --git a/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a.kt.new b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a.kt.new new file mode 100644 index 00000000000..2f651d8a0c9 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a.kt.new @@ -0,0 +1,11 @@ +package a + +class Outer { + inner class B(x: String) + + typealias A1 = B + private typealias A2 = B + + fun A1(x: Any) = x + fun A2(x: Any) = x +} diff --git a/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a1Usage.kt b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a1Usage.kt new file mode 100644 index 00000000000..d61b70bda0c --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a1Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun bar() { + a.Outer().A1("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a2Usage.kt b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a2Usage.kt new file mode 100644 index 00000000000..c06dc193b88 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/a2Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun baz() { + a.Outer().A2("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/build.log b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/build.log new file mode 100644 index 00000000000..e7664fe6108 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/build.log @@ -0,0 +1,22 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/a/Outer$B.class + out/production/module/a/Outer.class +End of files +Compiling files: + src/a.kt +End of files +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class + out/production/module/usage/A2UsageKt.class +End of files +Compiling files: + src/a1Usage.kt + src/a2Usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/experimental-ic-build.log b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/experimental-ic-build.log new file mode 100644 index 00000000000..523076d8fd0 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/experimental-ic-build.log @@ -0,0 +1,22 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/a/Outer$B.class + out/production/module/a/Outer.class +End of files +Compiling files: + src/a.kt +End of files +Marked as dirty by Kotlin: + src/a1Usage.kt +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class +End of files +Compiling files: + src/a1Usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a.kt b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a.kt new file mode 100644 index 00000000000..e7bbb5080ec --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a.kt @@ -0,0 +1,6 @@ +package a + +class B(x: String) + +fun A1(x: Any) = x +fun A2(x: Any) = x diff --git a/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a.kt.new b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a.kt.new new file mode 100644 index 00000000000..3e0d138c454 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a.kt.new @@ -0,0 +1,8 @@ +package a + +class B(x: String) +typealias A1 = B +private typealias A2 = B + +fun A1(x: Any) = x +fun A2(x: Any) = x diff --git a/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a1Usage.kt b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a1Usage.kt new file mode 100644 index 00000000000..78523ab3a17 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a1Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun bar() { + a.A1("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a2Usage.kt b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a2Usage.kt new file mode 100644 index 00000000000..eaf8e2a6247 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/a2Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun baz() { + a.A2("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/build.log b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/build.log new file mode 100644 index 00000000000..6996a4d490b --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/build.log @@ -0,0 +1,23 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/a/AKt.class + out/production/module/a/B.class +End of files +Compiling files: + src/a.kt +End of files +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class + out/production/module/usage/A2UsageKt.class +End of files +Compiling files: + src/a1Usage.kt + src/a2Usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/experimental-ic-build.log b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/experimental-ic-build.log new file mode 100644 index 00000000000..4f5133e9753 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/experimental-ic-build.log @@ -0,0 +1,23 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/a/AKt.class + out/production/module/a/B.class +End of files +Compiling files: + src/a.kt +End of files +Marked as dirty by Kotlin: + src/a1Usage.kt +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class +End of files +Compiling files: + src/a1Usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a.kt b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a.kt new file mode 100644 index 00000000000..2f651d8a0c9 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a.kt @@ -0,0 +1,11 @@ +package a + +class Outer { + inner class B(x: String) + + typealias A1 = B + private typealias A2 = B + + fun A1(x: Any) = x + fun A2(x: Any) = x +} diff --git a/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a.kt.new b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a.kt.new new file mode 100644 index 00000000000..7563b0f4d1d --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a.kt.new @@ -0,0 +1,8 @@ +package a + +class Outer { + inner class B(x: String) + + fun A1(x: Any) = x + fun A2(x: Any) = x +} diff --git a/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a1Usage.kt b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a1Usage.kt new file mode 100644 index 00000000000..d61b70bda0c --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a1Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun bar() { + a.Outer().A1("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a2Usage.kt b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a2Usage.kt new file mode 100644 index 00000000000..c06dc193b88 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/a2Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun baz() { + a.Outer().A2("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/build.log b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/build.log new file mode 100644 index 00000000000..e7664fe6108 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/build.log @@ -0,0 +1,22 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/a/Outer$B.class + out/production/module/a/Outer.class +End of files +Compiling files: + src/a.kt +End of files +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class + out/production/module/usage/A2UsageKt.class +End of files +Compiling files: + src/a1Usage.kt + src/a2Usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/experimental-ic-build.log b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/experimental-ic-build.log new file mode 100644 index 00000000000..523076d8fd0 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/experimental-ic-build.log @@ -0,0 +1,22 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/a/Outer$B.class + out/production/module/a/Outer.class +End of files +Compiling files: + src/a.kt +End of files +Marked as dirty by Kotlin: + src/a1Usage.kt +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class +End of files +Compiling files: + src/a1Usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a.kt b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a.kt new file mode 100644 index 00000000000..8c7438ac921 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a.kt @@ -0,0 +1,9 @@ +package a + +class B(x: String) + +typealias A1 = B +private typealias A2 = B + +fun A1(x: Any) = x +fun A2(x: Any) = x diff --git a/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a.kt.new b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a.kt.new new file mode 100644 index 00000000000..e7bbb5080ec --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a.kt.new @@ -0,0 +1,6 @@ +package a + +class B(x: String) + +fun A1(x: Any) = x +fun A2(x: Any) = x diff --git a/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a1Usage.kt b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a1Usage.kt new file mode 100644 index 00000000000..78523ab3a17 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a1Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun bar() { + a.A1("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a2Usage.kt b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a2Usage.kt new file mode 100644 index 00000000000..eaf8e2a6247 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/a2Usage.kt @@ -0,0 +1,5 @@ +package usage + +fun baz() { + a.A2("") +} diff --git a/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/build.log b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/build.log new file mode 100644 index 00000000000..6996a4d490b --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/build.log @@ -0,0 +1,23 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/a/AKt.class + out/production/module/a/B.class +End of files +Compiling files: + src/a.kt +End of files +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class + out/production/module/usage/A2UsageKt.class +End of files +Compiling files: + src/a1Usage.kt + src/a2Usage.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/experimental-ic-build.log b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/experimental-ic-build.log new file mode 100644 index 00000000000..4f5133e9753 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/experimental-ic-build.log @@ -0,0 +1,23 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/a/AKt.class + out/production/module/a/B.class +End of files +Compiling files: + src/a.kt +End of files +Marked as dirty by Kotlin: + src/a1Usage.kt +Exit code: ADDITIONAL_PASS_REQUIRED +------------------------------------------ +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/usage/A1UsageKt.class +End of files +Compiling files: + src/a1Usage.kt +End of files +Exit code: OK +------------------------------------------