[Commonizer] Drop useless "allowPrivate" flag in VisibilityCommonizer

This commit is contained in:
Dmitriy Dolovov
2020-06-08 15:08:50 +07:00
parent d9bfe11ca1
commit f3b400975e
3 changed files with 10 additions and 43 deletions
@@ -43,7 +43,7 @@ private class TypeAliasLiftingUpCommonizer(cache: CirClassifiersCache) : Abstrac
private val typeParameters = TypeParameterListCommonizer(cache) private val typeParameters = TypeParameterListCommonizer(cache)
private val underlyingType = TypeCommonizer(cache) private val underlyingType = TypeCommonizer(cache)
private lateinit var expandedType: CirSimpleType private lateinit var expandedType: CirSimpleType
private val visibility = VisibilityCommonizer.lowering(allowPrivate = false) private val visibility = VisibilityCommonizer.lowering()
override fun commonizationResult(): CirTypeAlias = CirTypeAliasFactory.create( override fun commonizationResult(): CirTypeAlias = CirTypeAliasFactory.create(
annotations = emptyList(), annotations = emptyList(),
@@ -10,10 +10,10 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionOrProperty import org.jetbrains.kotlin.descriptors.commonizer.cir.CirFunctionOrProperty
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility import org.jetbrains.kotlin.descriptors.commonizer.cir.CirHasVisibility
abstract class VisibilityCommonizer(private val allowPrivate: Boolean) : Commonizer<CirHasVisibility, Visibility> { abstract class VisibilityCommonizer : Commonizer<CirHasVisibility, Visibility> {
companion object { companion object {
fun lowering(allowPrivate: Boolean = false): VisibilityCommonizer = LoweringVisibilityCommonizer(allowPrivate) fun lowering(): VisibilityCommonizer = LoweringVisibilityCommonizer()
fun equalizing(): VisibilityCommonizer = EqualizingVisibilityCommonizer() fun equalizing(): VisibilityCommonizer = EqualizingVisibilityCommonizer()
} }
@@ -27,7 +27,7 @@ abstract class VisibilityCommonizer(private val allowPrivate: Boolean) : Commoni
return false return false
val nextVisibility = next.visibility val nextVisibility = next.visibility
if (!allowPrivate && Visibilities.isPrivate(nextVisibility) || !canBeCommonized(next)) { if (Visibilities.isPrivate(nextVisibility) || !canBeCommonized(next)) {
temp = Visibilities.UNKNOWN temp = Visibilities.UNKNOWN
return false return false
} }
@@ -42,10 +42,10 @@ abstract class VisibilityCommonizer(private val allowPrivate: Boolean) : Commoni
} }
/** /**
* Choose the lowest possible visibility ignoring private for all given member descriptors, if possible. * Choose the lowest possible visibility ignoring private for all given member descriptors.
* If at least one member descriptor is virtual, then the commonizer succeeds only if all visibilities are equal. * If at least one member descriptor is virtual, then the commonizer succeeds only if all visibilities are equal.
*/ */
private class LoweringVisibilityCommonizer(allowPrivate: Boolean) : VisibilityCommonizer(allowPrivate) { private class LoweringVisibilityCommonizer : VisibilityCommonizer() {
private var atLeastOneVirtualCallableMet = false private var atLeastOneVirtualCallableMet = false
private var atLeastTwoVisibilitiesMet = false private var atLeastTwoVisibilitiesMet = false
@@ -73,7 +73,7 @@ private class LoweringVisibilityCommonizer(allowPrivate: Boolean) : VisibilityCo
/** /**
* Make sure that visibilities of all member descriptors are equal and are not private according to [Visibilities.isPrivate]. * Make sure that visibilities of all member descriptors are equal and are not private according to [Visibilities.isPrivate].
*/ */
private class EqualizingVisibilityCommonizer : VisibilityCommonizer(false) { private class EqualizingVisibilityCommonizer : VisibilityCommonizer() {
override fun canBeCommonized(next: CirHasVisibility) = true override fun canBeCommonized(next: CirHasVisibility) = true
override fun getNext(current: Visibility, next: Visibility) = override fun getNext(current: Visibility, next: Visibility) =
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.unsupported
import org.junit.Test import org.junit.Test
abstract class LoweringVisibilityCommonizerTest( abstract class LoweringVisibilityCommonizerTest(
private val allowPrivate: Boolean,
private val areMembersVirtual: Boolean private val areMembersVirtual: Boolean
) : AbstractCommonizerTest<CirHasVisibility, Visibility>() { ) : AbstractCommonizerTest<CirHasVisibility, Visibility>() {
@@ -43,7 +42,7 @@ abstract class LoweringVisibilityCommonizerTest(
PUBLIC.toMock(), LOCAL.toMock() PUBLIC.toMock(), LOCAL.toMock()
) )
final override fun createCommonizer() = VisibilityCommonizer.lowering(allowPrivate = allowPrivate) final override fun createCommonizer() = VisibilityCommonizer.lowering()
protected fun Visibility.toMock() = object : CirFunctionOrProperty { protected fun Visibility.toMock() = object : CirFunctionOrProperty {
override val annotations get() = unsupported() override val annotations get() = unsupported()
@@ -59,39 +58,7 @@ abstract class LoweringVisibilityCommonizerTest(
override val kind get() = unsupported() override val kind get() = unsupported()
} }
class PrivateMembers : LoweringVisibilityCommonizerTest(true, false) { class NonVirtualMembers : LoweringVisibilityCommonizerTest(false) {
@Test
fun publicAndProtected() = doTestSuccess(
expected = PROTECTED,
PUBLIC.toMock(), PROTECTED.toMock(), PUBLIC.toMock()
)
@Test
fun publicAndInternal() = doTestSuccess(
expected = INTERNAL,
PUBLIC.toMock(), INTERNAL.toMock(), PUBLIC.toMock()
)
@Test(expected = IllegalCommonizerStateException::class)
fun publicAndInternalAndProtected() = doTestFailure(
PUBLIC.toMock(), INTERNAL.toMock(), PROTECTED.toMock()
)
@Test
fun publicAndInternalAndPrivate() = doTestSuccess(
expected = PRIVATE,
PUBLIC.toMock(), INTERNAL.toMock(), PRIVATE.toMock()
)
@Test
fun privateOnly() = doTestSuccess(
expected = PRIVATE,
PRIVATE.toMock(), PRIVATE.toMock(), PRIVATE.toMock()
)
}
class NonVirtualMembers : LoweringVisibilityCommonizerTest(false, false) {
@Test @Test
fun publicAndProtected() = doTestSuccess( fun publicAndProtected() = doTestSuccess(
@@ -121,7 +88,7 @@ abstract class LoweringVisibilityCommonizerTest(
) )
} }
class VirtualMembers : LoweringVisibilityCommonizerTest(false, true) { class VirtualMembers : LoweringVisibilityCommonizerTest(true) {
@Test(expected = IllegalCommonizerStateException::class) @Test(expected = IllegalCommonizerStateException::class)
fun publicAndProtected1() = doTestFailure( fun publicAndProtected1() = doTestFailure(