203 lines
4.9 KiB
Kotlin
Vendored
203 lines
4.9 KiB
Kotlin
Vendored
// 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
|
|
|
|
<!INVALID_REFINES_IN_SWIFT_TARGETS!>@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
|
|
<!REDUNDANT_SWIFT_REFINEMENT!>@RefinesInSwift<!>
|
|
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION)
|
|
@Retention(AnnotationRetention.BINARY)
|
|
annotation class MyRefinedAnnotationA
|
|
|
|
<!INVALID_OBJC_HIDES_TARGETS!>@HidesFromObjC<!>
|
|
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FILE)
|
|
@Retention(AnnotationRetention.BINARY)
|
|
annotation class MyRefinedAnnotationB
|
|
|
|
<!INVALID_REFINES_IN_SWIFT_TARGETS!>@RefinesInSwift<!>
|
|
@Retention(AnnotationRetention.BINARY)
|
|
annotation class MyRefinedAnnotationC
|
|
|
|
@RefinesInSwift
|
|
@Target(AnnotationTarget.PROPERTY)
|
|
@Retention(AnnotationRetention.BINARY)
|
|
annotation class MyRefinedAnnotationD
|
|
|
|
typealias HFOC = HiddenFromObjC
|
|
|
|
@HFOC
|
|
<!REDUNDANT_SWIFT_REFINEMENT!>@ShouldRefineInSwift<!>
|
|
var refinedProperty: Int = 0
|
|
|
|
@PluginHiddenFromObjC
|
|
<!REDUNDANT_SWIFT_REFINEMENT!>@PluginShouldRefineInSwift<!>
|
|
fun pluginRefinedFunction() { }
|
|
|
|
@HiddenFromObjC
|
|
@PluginHiddenFromObjC
|
|
fun multipleObjCRefinementsFunction() { }
|
|
|
|
@ShouldRefineInSwift
|
|
@PluginShouldRefineInSwift
|
|
fun multipleSwiftRefinementsFunction() { }
|
|
|
|
@HiddenFromObjC
|
|
@PluginHiddenFromObjC
|
|
<!REDUNDANT_SWIFT_REFINEMENT!>@ShouldRefineInSwift<!>
|
|
<!REDUNDANT_SWIFT_REFINEMENT!>@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 {
|
|
<!INCOMPATIBLE_OBJC_REFINEMENT_OVERRIDE!>@HiddenFromObjC<!>
|
|
override val barA: Int = 0
|
|
<!INCOMPATIBLE_OBJC_REFINEMENT_OVERRIDE!>@ShouldRefineInSwift<!>
|
|
override val barB: Int = 0
|
|
<!INCOMPATIBLE_OBJC_REFINEMENT_OVERRIDE!>override fun fooA() { }<!>
|
|
override fun fooB() { }
|
|
@HiddenFromObjC
|
|
open fun fooC() { }
|
|
}
|
|
|
|
class ClassB: ClassA() {
|
|
@HiddenFromObjC
|
|
override fun fooB() { }
|
|
<!INCOMPATIBLE_OBJC_REFINEMENT_OVERRIDE!>@ShouldRefineInSwift<!>
|
|
override fun fooC() { }
|
|
}
|
|
|
|
open class Base {
|
|
@HiddenFromObjC
|
|
open fun foo() {}
|
|
}
|
|
|
|
interface I {
|
|
fun foo()
|
|
}
|
|
|
|
<!INCOMPATIBLE_OBJC_REFINEMENT_OVERRIDE!>open class Derived : Base(), I<!>
|
|
|
|
open class Derived2 : Derived() {
|
|
override fun foo() {}
|
|
}
|
|
|
|
@HiddenFromObjC
|
|
open class OpenHiddenClass
|
|
|
|
<!SUBTYPE_OF_HIDDEN_FROM_OBJC!>class InheritsFromOpenHiddenClass : OpenHiddenClass()<!>
|
|
|
|
@HiddenFromObjC
|
|
interface HiddenInterface
|
|
|
|
interface NotHiddenInterface
|
|
|
|
<!SUBTYPE_OF_HIDDEN_FROM_OBJC!>class ImplementsHiddenInterface : NotHiddenInterface, HiddenInterface<!>
|
|
|
|
<!SUBTYPE_OF_HIDDEN_FROM_OBJC!>class InheritsFromOpenHiddenClass2 : NotHiddenInterface, OpenHiddenClass()<!>
|
|
|
|
@HiddenFromObjC
|
|
class OuterHidden {
|
|
class Nested {
|
|
open class Nested
|
|
}
|
|
}
|
|
|
|
<!SUBTYPE_OF_HIDDEN_FROM_OBJC!>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!"
|
|
}
|
|
}
|