diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmInlineApplicabilityChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmInlineApplicabilityChecker.kt index c59f5df2cec..61daeccbe54 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmInlineApplicabilityChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmInlineApplicabilityChecker.kt @@ -5,12 +5,13 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration +import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirRegularClassChecker import org.jetbrains.kotlin.fir.analysis.checkers.getModifier -import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors -import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId import org.jetbrains.kotlin.fir.declarations.utils.isExpect @@ -23,7 +24,9 @@ object FirJvmInlineApplicabilityChecker : FirRegularClassChecker() { val annotation = declaration.getAnnotationByClassId(JVM_INLINE_ANNOTATION_CLASS_ID) if (annotation != null && !declaration.isInline) { reporter.reportOn(annotation.source, FirJvmErrors.JVM_INLINE_WITHOUT_VALUE_CLASS, context) - } else if (annotation == null && declaration.isInline && !declaration.isExpect) { + } else if (annotation == null && declaration.isInline && !declaration.isExpect && + !context.languageVersionSettings.supportsFeature(LanguageFeature.ValueClasses) + ) { reporter.reportOn( declaration.getModifier(KtTokens.VALUE_KEYWORD)?.source, FirJvmErrors.VALUE_CLASS_WITHOUT_JVM_INLINE_ANNOTATION, diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmInlineApplicabilityChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmInlineApplicabilityChecker.kt index c0c2441af70..4f0371d19d4 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmInlineApplicabilityChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmInlineApplicabilityChecker.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.resolve.jvm.checkers +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.lexer.KtTokens @@ -35,7 +36,9 @@ class JvmInlineApplicabilityChecker : DeclarationChecker { context.trace.report(ErrorsJvm.JVM_INLINE_WITHOUT_VALUE_CLASS.on(annotationEntry)) } - if (descriptor.isValue && annotation == null && !descriptor.isExpect) { + if (descriptor.isValue && annotation == null && !descriptor.isExpect && + !context.languageVersionSettings.supportsFeature(LanguageFeature.ValueClasses) + ) { val valueKeyword = declaration.modifierList?.getModifier(KtTokens.VALUE_KEYWORD) ?: return context.trace.report(ErrorsJvm.VALUE_CLASS_WITHOUT_JVM_INLINE_ANNOTATION.on(valueKeyword)) } diff --git a/compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt b/compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt index 39e9d9baff2..81c3adf7af5 100644 --- a/compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt +++ b/compiler/testData/codegen/box/inlineClasses/boxResultInlineClassOfConstructorCall.kt @@ -1,5 +1,6 @@ // WITH_STDLIB // WORKS_WITHOUT_JVM_INLINE +// !LANGUAGE: +ValueClasses @Suppress("OPTIONAL_DECLARATION_USAGE_IN_NON_COMMON_SOURCE") @kotlin.jvm.JvmInline diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index ad5f703e453..a945fcd4a73 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -278,7 +278,7 @@ enum class LanguageFeature( 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), - + ValueClasses(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE), ; val presentableName: String