// FIR_IDENTICAL // FILE: kotlin.kt package kotlin.native @Target(AnnotationTarget.ANNOTATION_CLASS) @Retention(AnnotationRetention.BINARY) @MustBeDocumented annotation class HidesFromObjC @HidesFromObjC @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS) @Retention(AnnotationRetention.BINARY) annotation class HiddenFromObjC @Target(AnnotationTarget.ANNOTATION_CLASS) @Retention(AnnotationRetention.BINARY) annotation class RefinesInSwift @RefinesInSwift @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.BINARY) public annotation class ShouldRefineInSwift @RefinesInSwift @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS) @Retention(AnnotationRetention.BINARY) public annotation class WrongShouldRefineInSwift // FILE: plugin.kt package plugin @HidesFromObjC @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS) @Retention(AnnotationRetention.BINARY) annotation class PluginHiddenFromObjC @RefinesInSwift @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.BINARY) annotation class PluginShouldRefineInSwift // FILE: test.kt import plugin.PluginHiddenFromObjC import plugin.PluginShouldRefineInSwift @HidesFromObjC @RefinesInSwift @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.BINARY) annotation class MyRefinedAnnotationA @HidesFromObjC @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FILE) @Retention(AnnotationRetention.BINARY) annotation class MyRefinedAnnotationB @RefinesInSwift @Retention(AnnotationRetention.BINARY) annotation class MyRefinedAnnotationC @RefinesInSwift @Target(AnnotationTarget.PROPERTY) @Retention(AnnotationRetention.BINARY) annotation class MyRefinedAnnotationD typealias HFOC = HiddenFromObjC @HFOC @ShouldRefineInSwift var refinedProperty: Int = 0 @PluginHiddenFromObjC @PluginShouldRefineInSwift fun pluginRefinedFunction() { } @HiddenFromObjC @PluginHiddenFromObjC fun multipleObjCRefinementsFunction() { } @ShouldRefineInSwift @PluginShouldRefineInSwift fun multipleSwiftRefinementsFunction() { } @HiddenFromObjC @PluginHiddenFromObjC @ShouldRefineInSwift @PluginShouldRefineInSwift fun multipleMixedRefinementsFunction() { } interface InterfaceA { val barA: Int val barB: Int fun fooA() @HiddenFromObjC fun fooB() } interface InterfaceB { val barA: Int @ShouldRefineInSwift val barB: Int @HFOC fun fooA() @HiddenFromObjC fun fooB() } open class ClassA: InterfaceA, InterfaceB { @HiddenFromObjC override val barA: Int = 0 @ShouldRefineInSwift override val barB: Int = 0 override fun fooA() { } override fun fooB() { } @HiddenFromObjC open fun fooC() { } } class ClassB: ClassA() { @HiddenFromObjC override fun fooB() { } @ShouldRefineInSwift override fun fooC() { } } open class Base { @HiddenFromObjC open fun foo() {} } interface I { fun foo() } open class Derived : Base(), I open class Derived2 : Derived() { override fun foo() {} } @HiddenFromObjC open class OpenHiddenClass class InheritsFromOpenHiddenClass : OpenHiddenClass() @HiddenFromObjC interface HiddenInterface interface NotHiddenInterface class ImplementsHiddenInterface : NotHiddenInterface, HiddenInterface class InheritsFromOpenHiddenClass2 : NotHiddenInterface, OpenHiddenClass() @HiddenFromObjC class OuterHidden { class Nested { open class Nested } } class InheritsFromNested : OuterHidden.Nested.Nested() private class PrivateInheritsFromNested : OuterHidden.Nested.Nested() internal class InternalInheritsFromNested : OuterHidden.Nested.Nested() fun produceInstanceOfHidden(): OuterHidden.Nested.Nested { return object : OuterHidden.Nested.Nested() {} } @HiddenFromObjC enum class MyHiddenEnum { A, B, C } @HiddenFromObjC object MyHiddenObject sealed class MySealedClass { @HiddenFromObjC class MyHiddenSealedVariant : MySealedClass() class MyPublicVariant : MySealedClass() } @HiddenFromObjC enum class MyHiddenNonTrivialEnum { A, B, C { override fun sayCheese(): String { return "Boo :(" } }; open fun sayCheese(): String { return "Cheese!" } }