[FIR] Add REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE diagnostic
This commit is contained in:
committed by
teamcityserver
parent
e56deb4525
commit
c46a393a19
+2
@@ -1192,6 +1192,8 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
val ILLEGAL_INLINE_PARAMETER_MODIFIER by error<KtElement>(PositioningStrategy.INLINE_PARAMETER_MODIFIER)
|
val ILLEGAL_INLINE_PARAMETER_MODIFIER by error<KtElement>(PositioningStrategy.INLINE_PARAMETER_MODIFIER)
|
||||||
|
|
||||||
val INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED by error<KtParameter>()
|
val INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED by error<KtParameter>()
|
||||||
|
|
||||||
|
val REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE by warning<KtElement>(PositioningStrategy.SUSPEND_MODIFIER)
|
||||||
}
|
}
|
||||||
|
|
||||||
val IMPORTS by object : DiagnosticGroup("Imports") {
|
val IMPORTS by object : DiagnosticGroup("Imports") {
|
||||||
|
|||||||
@@ -616,6 +616,7 @@ object FirErrors {
|
|||||||
val INLINE_PROPERTY_WITH_BACKING_FIELD by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
val INLINE_PROPERTY_WITH_BACKING_FIELD by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||||
val ILLEGAL_INLINE_PARAMETER_MODIFIER by error0<KtElement>(SourceElementPositioningStrategies.INLINE_PARAMETER_MODIFIER)
|
val ILLEGAL_INLINE_PARAMETER_MODIFIER by error0<KtElement>(SourceElementPositioningStrategies.INLINE_PARAMETER_MODIFIER)
|
||||||
val INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED by error0<KtParameter>()
|
val INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED by error0<KtParameter>()
|
||||||
|
val REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE by warning0<KtElement>(SourceElementPositioningStrategies.SUSPEND_MODIFIER)
|
||||||
|
|
||||||
// Imports
|
// Imports
|
||||||
val CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
|
val CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
|
||||||
|
|||||||
+6
-2
@@ -364,8 +364,12 @@ object FirInlineDeclarationChecker : FirFunctionChecker() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!function.isSuspend && isSuspendFunctionalType && !param.isCrossinline) {
|
if (isSuspendFunctionalType && !param.isCrossinline) {
|
||||||
reporter.reportOn(param.source, FirErrors.INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED, context)
|
if (function.isSuspend) {
|
||||||
|
reporter.reportOn(param.returnTypeRef.source, FirErrors.REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE, context)
|
||||||
|
} else {
|
||||||
|
reporter.reportOn(param.source, FirErrors.INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED, context)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (coneType.isNullable && isFunctionalType) {
|
if (coneType.isNullable && isFunctionalType) {
|
||||||
|
|||||||
+6
@@ -333,6 +333,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDECLARATION
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_ANNOTATION_TARGET
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_ANNOTATION_TARGET
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_CALL_OF_CONVERSION_METHOD
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_CALL_OF_CONVERSION_METHOD
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_EXPLICIT_TYPE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_EXPLICIT_TYPE
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODALITY_MODIFIER
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODALITY_MODIFIER
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODIFIER
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODIFIER
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_OPEN_IN_INTERFACE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_OPEN_IN_INTERFACE
|
||||||
@@ -1524,6 +1525,11 @@ class FirDefaultErrorMessages {
|
|||||||
"Suspend inline lambda parameters of non-suspend function type are not supported. Add 'noinline' or 'crossinline' modifier."
|
"Suspend inline lambda parameters of non-suspend function type are not supported. Add 'noinline' or 'crossinline' modifier."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
map.put(
|
||||||
|
REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE,
|
||||||
|
"Redundant 'suspend' modifier: lambda parameters of suspend function type uses existing continuation."
|
||||||
|
)
|
||||||
|
|
||||||
//imports
|
//imports
|
||||||
map.put(
|
map.put(
|
||||||
CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON,
|
CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON,
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ interface SuspendRunnable {
|
|||||||
// Block is NOT allowed to be called from nested classes/lambdas (as common crossinlines)
|
// Block is NOT allowed to be called from nested classes/lambdas (as common crossinlines)
|
||||||
// It is NOT possible to call startCoroutine on the parameter
|
// It is NOT possible to call startCoroutine on the parameter
|
||||||
// suspend calls possible inside lambda matching to the parameter
|
// suspend calls possible inside lambda matching to the parameter
|
||||||
suspend inline fun test(c: suspend () -> Unit) {
|
suspend inline fun test(c: <!REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE!>suspend<!> () -> Unit) {
|
||||||
c()
|
c()
|
||||||
val o = object: SuspendRunnable {
|
val o = object: SuspendRunnable {
|
||||||
override suspend fun run() {
|
override suspend fun run() {
|
||||||
|
|||||||
-45
@@ -1,45 +0,0 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
|
||||||
// SKIP_TXT
|
|
||||||
inline fun foo1(<!INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED!>x: suspend () -> Unit<!>) {}
|
|
||||||
inline fun foo2(crossinline x: suspend () -> Unit) {}
|
|
||||||
<!NOTHING_TO_INLINE!>inline<!> fun foo3(noinline x: suspend () -> Unit) {}
|
|
||||||
<!NOTHING_TO_INLINE!>inline<!> fun foo4(<!INCOMPATIBLE_MODIFIERS!>noinline<!> <!INCOMPATIBLE_MODIFIERS!>crossinline<!> x: suspend () -> Unit) {}
|
|
||||||
|
|
||||||
suspend inline fun bar1(x: suspend () -> Unit) {}
|
|
||||||
suspend inline fun bar2(crossinline x: suspend () -> Unit) {}
|
|
||||||
suspend inline fun bar3(noinline x: suspend () -> Unit) {}
|
|
||||||
suspend inline fun bar4(<!INCOMPATIBLE_MODIFIERS!>noinline<!> <!INCOMPATIBLE_MODIFIERS!>crossinline<!> x: suspend () -> Unit) {}
|
|
||||||
|
|
||||||
suspend fun baz() {
|
|
||||||
foo1 {
|
|
||||||
return@baz
|
|
||||||
}
|
|
||||||
|
|
||||||
foo2 {
|
|
||||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
|
||||||
}
|
|
||||||
|
|
||||||
foo3 {
|
|
||||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
|
||||||
}
|
|
||||||
|
|
||||||
foo4 {
|
|
||||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
|
||||||
}
|
|
||||||
|
|
||||||
bar1 {
|
|
||||||
return@baz
|
|
||||||
}
|
|
||||||
|
|
||||||
bar2 {
|
|
||||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
|
||||||
}
|
|
||||||
|
|
||||||
bar3 {
|
|
||||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
|
||||||
}
|
|
||||||
|
|
||||||
bar4 {
|
|
||||||
<!RETURN_NOT_ALLOWED!>return@baz<!>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
// SKIP_TXT
|
// SKIP_TXT
|
||||||
inline fun foo1(<!INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED!>x: suspend () -> Unit<!>) {}
|
inline fun foo1(<!INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED!>x: suspend () -> Unit<!>) {}
|
||||||
|
|||||||
+6
@@ -3217,6 +3217,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
|||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
add(FirErrors.REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE) { firDiagnostic ->
|
||||||
|
RedundantInlineSuspendFunctionTypeImpl(
|
||||||
|
firDiagnostic as FirPsiDiagnostic,
|
||||||
|
token,
|
||||||
|
)
|
||||||
|
}
|
||||||
add(FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON) { firDiagnostic ->
|
add(FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON) { firDiagnostic ->
|
||||||
CannotAllUnderImportFromSingletonImpl(
|
CannotAllUnderImportFromSingletonImpl(
|
||||||
firDiagnostic.a,
|
firDiagnostic.a,
|
||||||
|
|||||||
+4
@@ -2244,6 +2244,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
|||||||
override val diagnosticClass get() = InlineSuspendFunctionTypeUnsupported::class
|
override val diagnosticClass get() = InlineSuspendFunctionTypeUnsupported::class
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class RedundantInlineSuspendFunctionType : KtFirDiagnostic<KtElement>() {
|
||||||
|
override val diagnosticClass get() = RedundantInlineSuspendFunctionType::class
|
||||||
|
}
|
||||||
|
|
||||||
abstract class CannotAllUnderImportFromSingleton : KtFirDiagnostic<KtImportDirective>() {
|
abstract class CannotAllUnderImportFromSingleton : KtFirDiagnostic<KtImportDirective>() {
|
||||||
override val diagnosticClass get() = CannotAllUnderImportFromSingleton::class
|
override val diagnosticClass get() = CannotAllUnderImportFromSingleton::class
|
||||||
abstract val objectName: Name
|
abstract val objectName: Name
|
||||||
|
|||||||
+7
@@ -3625,6 +3625,13 @@ internal class InlineSuspendFunctionTypeUnsupportedImpl(
|
|||||||
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class RedundantInlineSuspendFunctionTypeImpl(
|
||||||
|
firDiagnostic: FirPsiDiagnostic,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
) : KtFirDiagnostic.RedundantInlineSuspendFunctionType(), KtAbstractFirDiagnostic<KtElement> {
|
||||||
|
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
||||||
|
}
|
||||||
|
|
||||||
internal class CannotAllUnderImportFromSingletonImpl(
|
internal class CannotAllUnderImportFromSingletonImpl(
|
||||||
override val objectName: Name,
|
override val objectName: Name,
|
||||||
firDiagnostic: FirPsiDiagnostic,
|
firDiagnostic: FirPsiDiagnostic,
|
||||||
|
|||||||
Reference in New Issue
Block a user