[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");
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||||
|
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() {
|
public void testVararg() {
|
||||||
|
|||||||
+6
@@ -21188,6 +21188,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||||
|
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() {
|
public void testVararg() {
|
||||||
|
|||||||
+6
@@ -21182,6 +21182,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||||
|
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() {
|
public void testVararg() {
|
||||||
|
|||||||
+6
@@ -21188,6 +21188,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||||
|
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() {
|
public void testVararg() {
|
||||||
|
|||||||
+1
-1
@@ -457,7 +457,7 @@ object FirInlineDeclarationChecker : FirFunctionChecker(MppCheckerKind.Common) {
|
|||||||
function.valueParameters.any { param ->
|
function.valueParameters.any { param ->
|
||||||
val type = param.returnTypeRef.coneType
|
val type = param.returnTypeRef.coneType
|
||||||
!param.isNoinline && !type.isNullable
|
!param.isNoinline && !type.isNullable
|
||||||
&& (type.isBasicFunctionType(session) || type.isSuspendOrKSuspendFunctionType(session))
|
&& type.isNonKFunctionType(session)
|
||||||
}
|
}
|
||||||
if (hasInlinableParameters) return
|
if (hasInlinableParameters) return
|
||||||
if (function.isInlineOnly(session)) return
|
if (function.isInlineOnly(session)) return
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ fun ConeKotlinType.isBasicFunctionType(session: FirSession): Boolean {
|
|||||||
return isFunctionTypeWithPredicate(session) { it == FunctionTypeKind.Function }
|
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
|
// SuspendFunction, KSuspendFunction
|
||||||
fun ConeKotlinType.isSuspendOrKSuspendFunctionType(session: FirSession): Boolean {
|
fun ConeKotlinType.isSuspendOrKSuspendFunctionType(session: FirSession): Boolean {
|
||||||
return isFunctionTypeWithPredicate(session) {
|
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");
|
runTest("compiler/testData/diagnostics/tests/inline/valueClasses.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("valueOfKFunctionTypeAsArgumentOfInlineFunction.kt")
|
||||||
|
public void testValueOfKFunctionTypeAsArgumentOfInlineFunction() {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inline/valueOfKFunctionTypeAsArgumentOfInlineFunction.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("vararg.kt")
|
@TestMetadata("vararg.kt")
|
||||||
public void testVararg() {
|
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() {
|
public void testSimple() {
|
||||||
runTest("plugins/fir-plugin-prototype/testData/diagnostics/checkers/simple.kt");
|
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
|
@Nested
|
||||||
|
|||||||
Reference in New Issue
Block a user