Deserialize constructors and properties with version requirement 1.3
if they have suspend function type in their descriptors. Also, review fixes. #KT-25256: Fixed
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtDeclarationWithBody
|
||||
import org.jetbrains.kotlin.psi.KtModifierList
|
||||
import org.jetbrains.kotlin.psi.KtModifierListOwner
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.checkCoroutinesFeature
|
||||
import java.util.*
|
||||
|
||||
object ModifierCheckerCore {
|
||||
@@ -338,9 +339,6 @@ object ModifierCheckerCore {
|
||||
|
||||
val dependencies = featureDependencies[modifier] ?: return true
|
||||
for (dependency in dependencies) {
|
||||
if (dependency == LanguageFeature.Coroutines && languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)) {
|
||||
continue
|
||||
}
|
||||
val restrictedTargets = featureDependenciesTargets[dependency]
|
||||
if (restrictedTargets != null && actualTargets.intersect(restrictedTargets).isEmpty()) {
|
||||
continue
|
||||
@@ -348,6 +346,11 @@ object ModifierCheckerCore {
|
||||
|
||||
val featureSupport = languageVersionSettings.getFeatureSupport(dependency)
|
||||
|
||||
if (dependency == LanguageFeature.Coroutines) {
|
||||
checkCoroutinesFeature(languageVersionSettings, trace, node.psi)
|
||||
continue
|
||||
}
|
||||
|
||||
val diagnosticData = dependency to languageVersionSettings
|
||||
when (featureSupport) {
|
||||
LanguageFeature.State.ENABLED_WITH_WARNING -> {
|
||||
|
||||
+6
-5
@@ -61,10 +61,6 @@ object CoroutineSuspendCallChecker : CallChecker {
|
||||
else -> return
|
||||
}
|
||||
|
||||
if (context.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines) && context.languageVersionSettings.apiVersion < ApiVersion.KOTLIN_1_3) {
|
||||
context.trace.report(Errors.UNSUPPORTED.on(reportOn, "cannot use release coroutines API version less than 1.3"))
|
||||
}
|
||||
|
||||
val enclosingSuspendFunction = context.scope
|
||||
.parentsWithSelf.firstOrNull {
|
||||
it is LexicalScope && it.kind in ALLOWED_SCOPE_KINDS &&
|
||||
@@ -136,7 +132,12 @@ object BuilderFunctionsCallChecker : CallChecker {
|
||||
}
|
||||
|
||||
fun checkCoroutinesFeature(languageVersionSettings: LanguageVersionSettings, diagnosticHolder: DiagnosticSink, reportOn: PsiElement) {
|
||||
if (languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)) return
|
||||
if (languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)) {
|
||||
if (languageVersionSettings.apiVersion < ApiVersion.KOTLIN_1_3) {
|
||||
diagnosticHolder.report(Errors.UNSUPPORTED.on(reportOn, "cannot use release coroutines with api version less than 1.3"))
|
||||
}
|
||||
return
|
||||
}
|
||||
val diagnosticData = LanguageFeature.Coroutines to languageVersionSettings
|
||||
when (languageVersionSettings.getFeatureSupport(LanguageFeature.Coroutines)) {
|
||||
LanguageFeature.State.ENABLED -> {
|
||||
|
||||
Reference in New Issue
Block a user