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() { object FirFunInterfaceConstructorReferenceChecker : FirQualifiedAccessExpressionChecker() {
override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) {
if (expression !is FirCallableReferenceAccess) return 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 reference = expression.calleeReference.resolved ?: return
val referredSymbol = reference.resolvedSymbol val referredSymbol = reference.resolvedSymbol
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor
object FunInterfaceConstructorReferenceChecker : CallChecker { object FunInterfaceConstructorReferenceChecker : CallChecker {
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) { 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 val resultingDescriptor = resolvedCall.resultingDescriptor
if (resultingDescriptor !is SamConstructorDescriptor || !resolvedCall.call.isCallableReference()) return if (resultingDescriptor !is SamConstructorDescriptor || !resolvedCall.call.isCallableReference()) return
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference // !LANGUAGE: +KotlinFunInterfaceConstructorReference
// IGNORE_BACKEND: JVM // IGNORE_BACKEND: JVM
// ^ unsupported in old JVM BE // ^ unsupported in old JVM BE
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference // !LANGUAGE: +KotlinFunInterfaceConstructorReference
// IGNORE_BACKEND: JVM // IGNORE_BACKEND: JVM
// ^ unsupported in old JVM BE // ^ unsupported in old JVM BE
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference // !LANGUAGE: +KotlinFunInterfaceConstructorReference
// DONT_TARGET_EXACT_BACKEND: JVM // DONT_TARGET_EXACT_BACKEND: JVM
// ^ old JVM BE generates bogus code that fails in 'invoke', but works almost as expected in terms of equality // ^ 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 // FIR_IDENTICAL
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference // !LANGUAGE: +KotlinFunInterfaceConstructorReference
fun interface Foo { fun interface Foo {
fun run() fun run()
@@ -1,5 +1,5 @@
// FIR_IDENTICAL // FIR_IDENTICAL
// !LANGUAGE: -AllowKotlinFunInterfaceConstructorReference // !LANGUAGE: -KotlinFunInterfaceConstructorReference
fun interface Foo { fun interface Foo {
fun run() fun run()
@@ -1,4 +1,4 @@
// !LANGUAGE: +AllowKotlinFunInterfaceConstructorReference // !LANGUAGE: +KotlinFunInterfaceConstructorReference
// WITH_REFLECT // WITH_REFLECT
import kotlin.reflect.* import kotlin.reflect.*
@@ -244,7 +244,6 @@ enum class LanguageFeature(
ConsiderExtensionReceiverFromConstrainsInLambda(KOTLIN_1_7, kind = BUG_FIX), // KT-49832 ConsiderExtensionReceiverFromConstrainsInLambda(KOTLIN_1_7, kind = BUG_FIX), // KT-49832
ProperInternalVisibilityCheckInImportingScope(KOTLIN_1_7, kind = BUG_FIX), ProperInternalVisibilityCheckInImportingScope(KOTLIN_1_7, kind = BUG_FIX),
InlineClassImplementationByDelegation(KOTLIN_1_7), InlineClassImplementationByDelegation(KOTLIN_1_7),
AllowKotlinFunInterfaceConstructorReference(KOTLIN_1_7),
// 1.8 // 1.8
@@ -258,6 +257,7 @@ enum class LanguageFeature(
// Temporarily disabled, see KT-27084/KT-22379 // Temporarily disabled, see KT-27084/KT-22379
SoundSmartcastFromLoopConditionForLoopAssignedVariables(sinceVersion = null, kind = BUG_FIX), SoundSmartcastFromLoopConditionForLoopAssignedVariables(sinceVersion = null, kind = BUG_FIX),
// Disabled for indefinite time. See KT-48535 and related discussion // Disabled for indefinite time. See KT-48535 and related discussion
OptInOnOverrideForbidden(sinceVersion = null, kind = BUG_FIX), OptInOnOverrideForbidden(sinceVersion = null, kind = BUG_FIX),
ApproximateIntegerLiteralTypesInReceiverPosition(sinceVersion = null), ApproximateIntegerLiteralTypesInReceiverPosition(sinceVersion = null),
@@ -277,6 +277,7 @@ enum class LanguageFeature(
JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE), JsAllowInvalidCharsIdentifiersEscaping(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE),
JsAllowValueClassesInExternals(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), 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_6(1, 6),
KOTLIN_1_7(1, 7), KOTLIN_1_7(1, 7),
KOTLIN_1_8(1, 8), KOTLIN_1_8(1, 8),
KOTLIN_1_9(1, 9),
; ;
override val isStable: Boolean override val isStable: Boolean