@@ -5778,6 +5778,96 @@ class TypeSpecTest {
57785778 }.hasMessageThat().isEqualTo(" primary constructor can't delegate to other constructors" )
57795779 }
57805780
5781+ // https://github.com/square/kotlinpoet/issues/1301
5782+ @Test fun permissiveModifiersOmittedOnRestrictedVisibilityTypesInSealedInterface () {
5783+ val pageStateClass = ClassName (" " , " FeaturePageState" )
5784+ val type =
5785+ TypeSpec .interfaceBuilder(" FeaturePageState" )
5786+ .addModifiers(SEALED )
5787+ .addModifiers(INTERNAL )
5788+ .addType(
5789+ TypeSpec .objectBuilder(" Loading" )
5790+ .addModifiers(DATA )
5791+ .addSuperinterface(pageStateClass)
5792+ .build(),
5793+ )
5794+ .addType(
5795+ TypeSpec .objectBuilder(" Error" )
5796+ .addModifiers(DATA )
5797+ .addSuperinterface(pageStateClass)
5798+ .build(),
5799+ )
5800+ .addType(
5801+ TypeSpec .objectBuilder(" Content" )
5802+ .addModifiers(DATA )
5803+ .addSuperinterface(pageStateClass)
5804+ .build(),
5805+ )
5806+ .build()
5807+
5808+ // language=kotlin
5809+ assertThat(type.toString()).isEqualTo(
5810+ // no public visibility modifier on implicitly internal sealed types
5811+ """
5812+ internal sealed interface FeaturePageState {
5813+ data object Loading : FeaturePageState
5814+
5815+ data object Error : FeaturePageState
5816+
5817+ data object Content : FeaturePageState
5818+ }
5819+
5820+ """ .trimIndent(),
5821+ )
5822+ }
5823+
5824+ @Test fun permissiveModifiersOmittedOnRestrictedVisibilityPropertyInClass () {
5825+ val type = TypeSpec .classBuilder(" Taco" )
5826+ .addModifiers(INTERNAL )
5827+ .addProperty(" ints" , IntArray ::class )
5828+ .build()
5829+
5830+ // language=kotlin
5831+ assertThat(toString(type)).isEqualTo(
5832+ """
5833+ package com.squareup.tacos
5834+
5835+ import kotlin.IntArray
5836+
5837+ internal class Taco {
5838+ val ints: IntArray
5839+ }
5840+
5841+ """ .trimIndent(),
5842+ )
5843+ }
5844+
5845+ @Test fun permissiveModifiersOmittedOnRestrictedVisibilityFunctionInClass () {
5846+ val taco = TypeSpec .classBuilder(" Taco" )
5847+ .addModifiers(INTERNAL )
5848+ .addFunction(
5849+ FunSpec .builder(" toString" )
5850+ .addModifiers(KModifier .FINAL , KModifier .OVERRIDE )
5851+ .returns(String ::class )
5852+ .addStatement(" return %S" , " taco" )
5853+ .build(),
5854+ )
5855+ .build()
5856+
5857+ assertThat(toString(taco)).isEqualTo(
5858+ """
5859+ |package com.squareup.tacos
5860+ |
5861+ |import kotlin.String
5862+ |
5863+ |internal class Taco {
5864+ | final override fun toString(): String = "taco"
5865+ |}
5866+ |
5867+ """ .trimMargin(),
5868+ )
5869+ }
5870+
57815871 companion object {
57825872 private const val donutsPackage = " com.squareup.donuts"
57835873 }
0 commit comments