[Tests] Pass sample test without annotation with flag ValueClasses

This commit is contained in:
Evgeniy.Zhelenskiy
2021-11-29 21:50:03 +03:00
parent f92290dfdf
commit 96334948f0
4 changed files with 12 additions and 5 deletions
@@ -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,
@@ -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))
}
@@ -1,5 +1,6 @@
// WITH_STDLIB
// WORKS_WITHOUT_JVM_INLINE
// !LANGUAGE: +ValueClasses
@Suppress("OPTIONAL_DECLARATION_USAGE_IN_NON_COMMON_SOURCE")
@kotlin.jvm.JvmInline
@@ -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