[FIR] Incorrect warnings about inline function impact
^KT-65959 Fixed
This commit is contained in:
committed by
Space Team
parent
232c3aeadc
commit
aa1cce78c3
+6
@@ -21182,6 +21182,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("vararg.kt")
|
||||
public void testVararg() {
|
||||
|
||||
+6
@@ -21188,6 +21188,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("vararg.kt")
|
||||
public void testVararg() {
|
||||
|
||||
+1
-1
@@ -457,7 +457,7 @@ object FirInlineDeclarationChecker : FirFunctionChecker(MppCheckerKind.Common) {
|
||||
function.valueParameters.any { param ->
|
||||
val type = param.returnTypeRef.coneType
|
||||
!param.isNoinline && !type.isNullable
|
||||
&& (type.isBasicFunctionType(session) || type.isSuspendOrKSuspendFunctionType(session))
|
||||
&& type.isNonKFunctionType(session)
|
||||
}
|
||||
if (hasInlinableParameters) return
|
||||
if (function.isInlineOnly(session)) return
|
||||
|
||||
@@ -59,6 +59,11 @@ fun ConeKotlinType.isBasicFunctionType(session: FirSession): Boolean {
|
||||
return isFunctionTypeWithPredicate(session) { it == FunctionTypeKind.Function }
|
||||
}
|
||||
|
||||
// Function, SuspendFunction, KSuspendFunction, [Custom]Function, K[Custom]Function
|
||||
fun ConeKotlinType.isNonKFunctionType(session: FirSession): Boolean {
|
||||
return isFunctionTypeWithPredicate(session) { it != FunctionTypeKind.KFunction }
|
||||
}
|
||||
|
||||
// SuspendFunction, KSuspendFunction
|
||||
fun ConeKotlinType.isSuspendOrKSuspendFunctionType(session: FirSession): Boolean {
|
||||
return isFunctionTypeWithPredicate(session) {
|
||||
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// ISSUE: KT-65959
|
||||
import kotlin.reflect.KFunction0
|
||||
|
||||
<!NOTHING_TO_INLINE!>inline<!> fun foo(block: KFunction0<Unit>) {
|
||||
block()
|
||||
}
|
||||
Generated
+6
@@ -21188,6 +21188,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("vararg.kt")
|
||||
public void testVararg() {
|
||||
|
||||
Reference in New Issue
Block a user