FE: Make synchronized suspend functions and lambdas error in 1.8

#KT-27333 Fixed
This commit is contained in:
Ilmir Usmanov
2022-04-03 02:29:24 +02:00
committed by teamcity
parent f473998e8b
commit 6e30ce2763
19 changed files with 152 additions and 75 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.resolve.jvm.checkers
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
@@ -33,7 +34,7 @@ object SynchronizedAnnotationOnLambdaChecker : AdditionalAnnotationChecker {
val literal = (annotated?.unwrapParenthesesLabelsAndAnnotations() as? KtLambdaExpression)?.functionLiteral ?: return
val descriptor = trace.bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, literal]
if (descriptor is FunctionDescriptor && descriptor.isSuspend) {
trace.report(ErrorsJvm.SYNCHRONIZED_ON_SUSPEND.on(annotation))
trace.report(ErrorsJvm.SYNCHRONIZED_ON_SUSPEND.on(languageVersionSettings, annotation))
}
}
}
@@ -198,7 +198,7 @@ class SynchronizedAnnotationChecker : DeclarationChecker {
} else if (descriptor.isInline) {
context.trace.report(ErrorsJvm.SYNCHRONIZED_ON_INLINE.on(annotationEntry))
} else if (descriptor.isSuspend) {
context.trace.report(ErrorsJvm.SYNCHRONIZED_ON_SUSPEND.on(annotationEntry))
context.trace.report(ErrorsJvm.SYNCHRONIZED_ON_SUSPEND.on(context.languageVersionSettings, annotationEntry))
} else if (descriptor.containingDeclaration.let { it is ClassDescriptor && it.isValue }) {
context.trace.report(ErrorsJvm.SYNCHRONIZED_ON_VALUE_CLASS.on(annotationEntry))
}
@@ -49,7 +49,8 @@ public interface ErrorsJvm {
DiagnosticFactory0<KtAnnotationEntry> SYNCHRONIZED_ON_ABSTRACT = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtElement> SYNCHRONIZED_ON_INLINE = DiagnosticFactory0.create(WARNING);
DiagnosticFactory0<KtElement> SYNCHRONIZED_ON_VALUE_CLASS = DiagnosticFactory0.create(WARNING);
DiagnosticFactory0<PsiElement> SYNCHRONIZED_ON_SUSPEND = DiagnosticFactory0.create(WARNING);
DiagnosticFactoryForDeprecation0<PsiElement> SYNCHRONIZED_ON_SUSPEND =
DiagnosticFactoryForDeprecation0.create(LanguageFeature.SynchronizedSuspendError);
DiagnosticFactory0<KtAnnotationEntry> SYNCHRONIZED_IN_INTERFACE = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtAnnotationEntry> OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS = DiagnosticFactory0.create(WARNING);