[FIR] Incorrect warnings about inline function impact
^KT-65959 Fixed
This commit is contained in:
committed by
Space Team
parent
232c3aeadc
commit
aa1cce78c3
+6
@@ -21188,6 +21188,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
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 LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
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
@@ -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() {
|
||||
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
FILE: ValueOfCustomFunctionTypeAsArgumentOfInlineFunction.kt
|
||||
@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() public final inline fun <T> inlineFunction(block: R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() some/MyComposableFunction0<T>|): R|T| {
|
||||
^inlineFunction R|<local>/block|.R|SubstitutionOverride<some/MyComposableFunction0.invoke: R|T|>|()
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// ISSUE: KT-65959
|
||||
|
||||
import org.jetbrains.kotlin.fir.plugin.MyComposable
|
||||
|
||||
@MyComposable
|
||||
inline fun <T> inlineFunction(block: @MyComposable () -> T): T {
|
||||
return block()
|
||||
}
|
||||
+6
@@ -62,6 +62,12 @@ public class FirPsiPluginDiagnosticTestGenerated extends AbstractFirPsiPluginDia
|
||||
public void testSimple() {
|
||||
runTest("plugins/fir-plugin-prototype/testData/diagnostics/checkers/simple.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("ValueOfCustomFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||
public void testValueOfCustomFunctionTypeAsArgumentOfInlineFunction() {
|
||||
runTest("plugins/fir-plugin-prototype/testData/diagnostics/checkers/ValueOfCustomFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
Reference in New Issue
Block a user