abstract class Visibility {
  constructor(name: String, isPublicAPI: Boolean) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  val name: String
    field = name
    get

  val isPublicAPI: Boolean
    field = isPublicAPI
    get

  open val internalDisplayName: String
    open get(): String {
      return <this>.<get-name>()
    }

  open val externalDisplayName: String
    open get(): String {
      return <this>.<get-internalDisplayName>()
    }

  abstract fun mustCheckInImports(): Boolean

}

object Visibilities {
  private constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  object Private : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "private", isPublicAPI = false)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      return true
    }

  }

  object PrivateToThis : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "private_to_this", isPublicAPI = false)
      /* <init>() */

    }

    override val internalDisplayName: String
      override get(): String {
        return "private/*private to this*/"
      }

    override fun mustCheckInImports(): Boolean {
      return true
    }

  }

  object Protected : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "protected", isPublicAPI = true)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      return false
    }

  }

  object Internal : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "internal", isPublicAPI = false)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      return true
    }

  }

  object Public : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "public", isPublicAPI = true)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      return false
    }

  }

  object Local : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "local", isPublicAPI = false)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      return true
    }

  }

  object Inherited : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "inherited", isPublicAPI = false)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      throw IllegalStateException(p0 = "This method shouldn't be invoked for INHERITED visibility")
    }

  }

  object InvisibleFake : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "invisible_fake", isPublicAPI = false)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      return true
    }

    override val externalDisplayName: String
      override get(): String {
        return "invisible (private in a supertype)"
      }

  }

  object Unknown : Visibility {
    private constructor() /* primary */ {
      super/*Visibility*/(name = "unknown", isPublicAPI = false)
      /* <init>() */

    }

    override fun mustCheckInImports(): Boolean {
      throw IllegalStateException(p0 = "This method shouldn't be invoked for UNKNOWN visibility")
    }

  }

  private val ORDERED_VISIBILITIES: Map<Visibility, Int>
    field = buildMap<Visibility, Int>(builderAction = local fun MutableMap<Visibility, Int>.<anonymous>() {
      $this$buildMap.put(key = PrivateToThis, value = 0) /*~> Unit */
      $this$buildMap.put(key = Private, value = 0) /*~> Unit */
      $this$buildMap.put(key = Internal, value = 1) /*~> Unit */
      $this$buildMap.put(key = Protected, value = 1) /*~> Unit */
      $this$buildMap.put(key = Public, value = 2) /*~> Unit */
    }
)
    private get

}
