Forbid default inline/crossinline suspend parameters
This commit is contained in:
@@ -18,6 +18,8 @@ package org.jetbrains.kotlin.resolve.inline
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.coroutines.hasSuspendFunctionType
|
||||
import org.jetbrains.kotlin.coroutines.isSuspendLambda
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.isInlineOnlyOrReifiable
|
||||
import org.jetbrains.kotlin.diagnostics.Errors
|
||||
@@ -109,6 +111,18 @@ class InlineAnalyzerExtension(
|
||||
checkDefaultValue(trace, parameter, ktParameter)
|
||||
}
|
||||
}
|
||||
// Report unsupported error on inline/crossinline suspend lambdas with default values.
|
||||
if (functionDescriptor.isSuspend &&
|
||||
InlineUtil.isInlineParameterExceptNullability(parameter) &&
|
||||
parameter.hasSuspendFunctionType
|
||||
) {
|
||||
trace.report(
|
||||
Errors.NOT_YET_SUPPORTED_IN_INLINE.on(
|
||||
ktParameter,
|
||||
"Suspend functional parameters with default values"
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -REDUNDANT_INLINE_SUSPEND_FUNCTION_TYPE -NOTHING_TO_INLINE
|
||||
// SKIP_TXT
|
||||
|
||||
suspend inline fun test1(<!NOT_YET_SUPPORTED_IN_INLINE!>s : suspend () -> String = { "OK" }<!>) {}
|
||||
suspend inline fun test2(s : () -> String = { "OK" }) {}
|
||||
suspend inline fun test3(<!NOT_YET_SUPPORTED_IN_INLINE!>crossinline s : suspend () -> String = { "OK" }<!>) {}
|
||||
suspend inline fun test4(crossinline s : () -> String = { "OK" }) {}
|
||||
suspend inline fun test5(noinline s : suspend () -> String = { "OK" }) {}
|
||||
suspend inline fun test6(noinline s : () -> String = { "OK" }) {}
|
||||
|
||||
@@ -11558,6 +11558,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultLambdaInlineSuspend.kt")
|
||||
public void testDefaultLambdaInlineSuspend() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inline/defaultLambdaInlineSuspend.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultLambdaInlining.kt")
|
||||
public void testDefaultLambdaInlining() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inline/defaultLambdaInlining.kt");
|
||||
|
||||
Generated
+6
@@ -11558,6 +11558,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultLambdaInlineSuspend.kt")
|
||||
public void testDefaultLambdaInlineSuspend() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inline/defaultLambdaInlineSuspend.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultLambdaInlining.kt")
|
||||
public void testDefaultLambdaInlining() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inline/defaultLambdaInlining.kt");
|
||||
|
||||
Reference in New Issue
Block a user