[FIR] Report UNSUPPORTED_SUSPEND_TEST
^KT-60002 Fixed
This commit is contained in:
committed by
Space Team
parent
223e590dcd
commit
921db9f8d4
+1
@@ -54,6 +54,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val UNSUPPORTED_FEATURE by error<PsiElement> {
|
||||
parameter<Pair<LanguageFeature, LanguageVersionSettings>>("unsupportedFeature")
|
||||
}
|
||||
val UNSUPPORTED_SUSPEND_TEST by error<PsiElement>()
|
||||
val NEW_INFERENCE_ERROR by error<PsiElement> {
|
||||
parameter<String>("error")
|
||||
}
|
||||
|
||||
@@ -119,6 +119,7 @@ object FirErrors {
|
||||
// Meta-errors
|
||||
val UNSUPPORTED by error1<PsiElement, String>()
|
||||
val UNSUPPORTED_FEATURE by error1<PsiElement, Pair<LanguageFeature, LanguageVersionSettings>>()
|
||||
val UNSUPPORTED_SUSPEND_TEST by error0<PsiElement>()
|
||||
val NEW_INFERENCE_ERROR by error1<PsiElement, String>()
|
||||
|
||||
// Miscellaneous
|
||||
|
||||
+1
@@ -48,6 +48,7 @@ object CommonDeclarationCheckers : DeclarationCheckers() {
|
||||
FirFunctionParameterChecker,
|
||||
FirFunctionReturnChecker,
|
||||
FirInlineDeclarationChecker,
|
||||
FirSuspendLimitationsChecker,
|
||||
)
|
||||
|
||||
override val simpleFunctionCheckers: Set<FirSimpleFunctionChecker>
|
||||
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.getModifier
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isSuspend
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
|
||||
object FirSuspendLimitationsChecker : FirFunctionChecker() {
|
||||
override fun check(declaration: FirFunction, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (!declaration.isSuspend) {
|
||||
return
|
||||
}
|
||||
|
||||
if (declaration.annotations.any { it.isKotlinTestAnnotation(context.session) }) {
|
||||
declaration.getModifier(KtTokens.SUSPEND_KEYWORD)?.let {
|
||||
reporter.reportOn(it.source, FirErrors.UNSUPPORTED_SUSPEND_TEST, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirAnnotation.isKotlinTestAnnotation(session: FirSession): Boolean {
|
||||
val nonExpandedType = annotationTypeRef.coneType as? ConeClassLikeType
|
||||
return nonExpandedType?.lookupTag?.classId == StandardClassIds.Annotations.Test
|
||||
|| toAnnotationClassId(session) == StandardClassIds.Annotations.Test
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -607,6 +607,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSUPPORTED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSUPPORTED_CLASS_LITERALS_WITH_EMPTY_LHS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSUPPORTED_CONTEXTUAL_DECLARATION_CALL
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSUPPORTED_FEATURE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNSUPPORTED_SUSPEND_TEST
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNUSED_VARIABLE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UPPER_BOUND_IS_EXTENSION_FUNCTION_TYPE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UPPER_BOUND_VIOLATED
|
||||
@@ -675,6 +676,7 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
// Meta-errors
|
||||
map.put(UNSUPPORTED, "Unsupported [{0}]", TO_STRING)
|
||||
map.put(UNSUPPORTED_FEATURE, "{0}", LanguageFeatureMessageRenderer(LanguageFeatureMessageRenderer.Type.UNSUPPORTED))
|
||||
map.put(UNSUPPORTED_SUSPEND_TEST, "'suspend' functions annotated with @kotlin.test.Test are unsupported")
|
||||
map.put(NEW_INFERENCE_ERROR, "New inference error [{0}]", STRING)
|
||||
|
||||
// Miscellaneous
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
// ALLOW_KOTLIN_PACKAGE
|
||||
// SKIP_TXT
|
||||
// FILE: test.kt
|
||||
|
||||
package kotlin.test
|
||||
|
||||
annotation class IrrelevantClass
|
||||
|
||||
public typealias Test = IrrelevantClass
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
import kotlin.test.Test
|
||||
|
||||
class A {
|
||||
@Test
|
||||
suspend fun test() {}
|
||||
}
|
||||
|
||||
@Test
|
||||
suspend fun test() {}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// ALLOW_KOTLIN_PACKAGE
|
||||
// SKIP_TXT
|
||||
// FILE: test.kt
|
||||
|
||||
Reference in New Issue
Block a user