KT-47939 KotlinFunInterfaceConstructorReference is experimental

This commit is contained in:
Dmitry Petrov
2021-12-03 17:28:49 +03:00
committed by TeamCityServer
parent 72f7276f3c
commit e5eee9bab9
9 changed files with 11 additions and 9 deletions
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
object FirFunInterfaceConstructorReferenceChecker : FirQualifiedAccessExpressionChecker() {
override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) {
if (expression !is FirCallableReferenceAccess) return
if (context.languageVersionSettings.supportsFeature(LanguageFeature.AllowKotlinFunInterfaceConstructorReference)) return
if (context.languageVersionSettings.supportsFeature(LanguageFeature.KotlinFunInterfaceConstructorReference)) return
val reference = expression.calleeReference.resolved ?: return
val referredSymbol = reference.resolvedSymbol
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor
object FunInterfaceConstructorReferenceChecker : CallChecker {
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
if (context.languageVersionSettings.supportsFeature(LanguageFeature.AllowKotlinFunInterfaceConstructorReference)) return
if (context.languageVersionSettings.supportsFeature(LanguageFeature.KotlinFunInterfaceConstructorReference)) return
val resultingDescriptor = resolvedCall.resultingDescriptor
if (resultingDescriptor !is SamConstructorDescriptor || !resolvedCall.call.isCallableReference()) return
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference
// !LANGUAGE: +KotlinFunInterfaceConstructorReference
// IGNORE_BACKEND: JVM
// ^ unsupported in old JVM BE
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference
// !LANGUAGE: +KotlinFunInterfaceConstructorReference
// IGNORE_BACKEND: JVM
// ^ unsupported in old JVM BE
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference
// !LANGUAGE: +KotlinFunInterfaceConstructorReference
// DONT_TARGET_EXACT_BACKEND: JVM
// ^ old JVM BE generates bogus code that fails in 'invoke', but works almost as expected in terms of equality
@@ -1,5 +1,5 @@
// FIR_IDENTICAL
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference
// !LANGUAGE: +KotlinFunInterfaceConstructorReference
fun interface Foo {
fun run()
@@ -1,5 +1,5 @@
// FIR_IDENTICAL
// !LANGUAGE: -AllowKotlinFunInterfaceConstructorReference
// !LANGUAGE: -KotlinFunInterfaceConstructorReference
fun interface Foo {
fun run()
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference
// !LANGUAGE: +KotlinFunInterfaceConstructorReference
// WITH_REFLECT
import kotlin.reflect.*
@@ -244,7 +244,6 @@ enum class LanguageFeature(
ConsiderExtensionReceiverFromConstrainsInLambda(KOTLIN_1_7, kind = BUG_FIX), // KT-49832
ProperInternalVisibilityCheckInImportingScope(KOTLIN_1_7, kind = BUG_FIX),
InlineClassImplementationByDelegation(KOTLIN_1_7),
AllowKotlinFunInterfaceConstructorReference(KOTLIN_1_7),
// 1.8
@@ -258,6 +257,7 @@ enum class LanguageFeature(
// Temporarily disabled, see KT-27084/KT-22379
SoundSmartcastFromLoopConditionForLoopAssignedVariables(sinceVersion = null, kind = BUG_FIX),
// Disabled for indefinite time. See KT-48535 and related discussion
OptInOnOverrideForbidden(sinceVersion = null, kind = BUG_FIX),
ApproximateIntegerLiteralTypesInReceiverPosition(sinceVersion = null),
@@ -277,6 +277,7 @@ enum class LanguageFeature(
JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE),
JsAllowValueClassesInExternals(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE),
ContextReceivers(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE),
KotlinFunInterfaceConstructorReference(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE),
;
@@ -365,6 +366,7 @@ enum class LanguageVersion(val major: Int, val minor: Int) : DescriptionAware, L
KOTLIN_1_6(1, 6),
KOTLIN_1_7(1, 7),
KOTLIN_1_8(1, 8),
KOTLIN_1_9(1, 9),
;
override val isStable: Boolean