// !LANGUAGE: -ProhibitSuperCallsFromPublicInline +QualifiedSupertypeMayBeExtendedByOtherSupertype // !DIAGNOSTICS: -EXPOSED_PARAMETER_TYPE -NOTHING_TO_INLINE // FILE: main.kt open class AndroidTargetConfigurator : Base(), ModuleConfiguratorWithTests, AndroidModuleConfigurator { public inline fun inlineFun(): String { return super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } @PublishedApi internal inline fun inlineFunPublished(): String { return super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } public inline fun inlineFunAnonymousObjects(): String { { super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() }() return object { fun run() = super@AndroidTargetConfigurator.classFun() + super@AndroidTargetConfigurator.getConfiguratorSettings() + super@AndroidTargetConfigurator.getConfiguratorSettings() }.run() } public inline fun inlineFunAnonymousNoDiagnostics(): String { return object: AndroidTargetConfigurator(), ModuleConfiguratorWithTests, AndroidModuleConfigurator { override fun getConfiguratorSettings(): String { return super.getConfiguratorSettings() } inline fun anonymousInline() { super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } fun run() = super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() }.run() } internal inline fun inlineInternal(): String { return super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } private inline fun inlinePrivate(): String { return super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } //non-inline override fun getConfiguratorSettings() = super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() fun noInline() { { super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() }() object { fun run() = super@AndroidTargetConfigurator.classFun() + super@AndroidTargetConfigurator.getConfiguratorSettings() + super@AndroidTargetConfigurator.getConfiguratorSettings() }.run() } } open class Base { fun classFun(): String = "Class" } interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings { override fun getConfiguratorSettings() = "K" } interface ModuleConfiguratorWithSettings { fun getConfiguratorSettings(): String = "" } interface AndroidModuleConfigurator : ModuleConfiguratorWithSettings { override fun getConfiguratorSettings(): String { return "O" } } sealed class FooSealed : Base() { class A : FooSealed() class B: FooSealed() inline fun test() { super.classFun() } } enum class FooEmum { A, B { inline fun test() { super.classFun() } }; fun classFun(): String = "Class" } class FooOuter : Base() { inner class FooInner: Base() { inline fun test() { super@FooOuter.classFun() super.classFun() } } }