From c7b52bfdc15fa95891ab20e0276512c89111a2c4 Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Fri, 25 Sep 2015 16:27:47 +0300 Subject: [PATCH] fix KT-8977 Ignore non-public API changes for packages in incremental compilation #KT-8977 Fixed --- .../kotlin/jps/incremental/protoDifferenceUtils.kt | 8 ++++---- .../jps/incremental/ProtoComparisonTestGenerated.java | 6 ++++++ .../packageFacadeDifference/new.kt | 10 ++++++---- .../packageFacadeDifference/old.kt | 10 ++++++---- .../packageFacadeDifference/new.kt | 11 +++++++++++ .../packageFacadeDifference/old.kt | 11 +++++++++++ .../packageFacadeDifference/result.out | 2 ++ 7 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/new.kt create mode 100644 jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/old.kt create mode 100644 jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/result.out diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/protoDifferenceUtils.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/protoDifferenceUtils.kt index 4a1508b3c38..d123201c3e4 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/protoDifferenceUtils.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/protoDifferenceUtils.kt @@ -112,6 +112,9 @@ private abstract class DifferenceCalculator() { val newNames = newList.map { compareObject.newNameResolver.getString(it) }.toSet() return HashSetUtil.symmetricDifference(oldNames, newNames) } + + protected val ProtoBuf.Callable.isPrivate: Boolean + get() = Visibilities.isPrivate(Deserialization.visibility(Flags.VISIBILITY.get(flags))) } private class DifferenceCalculatorForClass(oldData: ProtoMapValue, newData: ProtoMapValue) : DifferenceCalculator() { @@ -211,9 +214,6 @@ private class DifferenceCalculatorForClass(oldData: ProtoMapValue, newData: Prot return if (primaryConstructor?.data?.isPrivate ?: false) null else primaryConstructor } - - private val ProtoBuf.Callable.isPrivate: Boolean - get() = Visibilities.isPrivate(Deserialization.visibility(Flags.VISIBILITY.get(flags))) } private class DifferenceCalculatorForPackageFacade(oldData: ProtoMapValue, newData: ProtoMapValue) : DifferenceCalculator() { @@ -240,7 +240,7 @@ private class DifferenceCalculatorForPackageFacade(oldData: ProtoMapValue, newDa for (kind in diff) { when (kind!!) { ProtoCompareGenerated.ProtoBufPackageKind.MEMBER_LIST -> - names.addAll(calcDifferenceForMembers(oldProto.memberList, newProto.memberList)) + names.addAll(calcDifferenceForMembers(oldProto.memberList.filter { !it.isPrivate }, newProto.memberList.filter { !it.isPrivate })) else -> throw IllegalArgumentException("Unsupported kind: $kind") } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/incremental/ProtoComparisonTestGenerated.java b/jps-plugin/test/org/jetbrains/kotlin/jps/incremental/ProtoComparisonTestGenerated.java index 079ab425bd0..0452cdf8273 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/incremental/ProtoComparisonTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/incremental/ProtoComparisonTestGenerated.java @@ -113,6 +113,12 @@ public class ProtoComparisonTestGenerated extends AbstractProtoComparisonTest { doTest(fileName); } + @TestMetadata("packageFacadeDifference") + public void testPackageFacadeDifference() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/"); + doTest(fileName); + } + } @TestMetadata("jps-plugin/testData/comparison/classMembersOnlyChanged") diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/new.kt b/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/new.kt index 9f98bc5a4b9..e8d2d04161e 100644 --- a/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/new.kt +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/new.kt @@ -2,10 +2,12 @@ package test public fun unchangedFun() {} -private fun addedFun(): Int = 10 +public fun addedFun(): Int = 10 -private val addedVal: String = "A" +public val addedVal: String = "A" -private val changedVal: String = "" +public val changedVal: String = "" -private fun changedFun(arg: String) {} +internal fun changedFun(arg: String) {} + +private fun privateAddedFun() {} diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/old.kt b/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/old.kt index d84e45cd33e..70876015aa5 100644 --- a/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/old.kt +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/packageFacadeDifference/old.kt @@ -2,10 +2,12 @@ package test public fun unchangedFun() {} -private fun removedFun(): Int = 10 +public fun removedFun(): Int = 10 -private val removedVal: String = "A" +public val removedVal: String = "A" -private val changedVal: Int = 20 +public val changedVal: Int = 20 -private fun changedFun(arg: Int) {} +internal fun changedFun(arg: Int) {} + +private fun privateRemovedFun() {} \ No newline at end of file diff --git a/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/new.kt b/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/new.kt new file mode 100644 index 00000000000..9f98bc5a4b9 --- /dev/null +++ b/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/new.kt @@ -0,0 +1,11 @@ +package test + +public fun unchangedFun() {} + +private fun addedFun(): Int = 10 + +private val addedVal: String = "A" + +private val changedVal: String = "" + +private fun changedFun(arg: String) {} diff --git a/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/old.kt b/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/old.kt new file mode 100644 index 00000000000..d84e45cd33e --- /dev/null +++ b/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/old.kt @@ -0,0 +1,11 @@ +package test + +public fun unchangedFun() {} + +private fun removedFun(): Int = 10 + +private val removedVal: String = "A" + +private val changedVal: Int = 20 + +private fun changedFun(arg: Int) {} diff --git a/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/result.out b/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/result.out new file mode 100644 index 00000000000..2b72c17b8c9 --- /dev/null +++ b/jps-plugin/testData/comparison/classPrivateOnlyChange/packageFacadeDifference/result.out @@ -0,0 +1,2 @@ +changes in test/MainKt: NONE +changes in test/TestPackage: NONE