ConvertLambdaToReference refactoring
Intention is not registered now; inspection is enabled by default now, but has highlight level of "No highlighting" Inspection does not depend on text length now So #KT-14335 Fixed
This commit is contained in:
@@ -1385,11 +1385,6 @@
|
||||
<category>Kotlin</category>
|
||||
</intentionAction>
|
||||
|
||||
<intentionAction>
|
||||
<className>org.jetbrains.kotlin.idea.intentions.ConvertLambdaToReferenceIntention</className>
|
||||
<category>Kotlin</category>
|
||||
</intentionAction>
|
||||
|
||||
<intentionAction>
|
||||
<className>org.jetbrains.kotlin.idea.intentions.ConvertReferenceToLambdaIntention</className>
|
||||
<category>Kotlin</category>
|
||||
@@ -1953,8 +1948,8 @@
|
||||
<localInspection implementationClass="org.jetbrains.kotlin.idea.intentions.ConvertLambdaToReferenceInspection"
|
||||
displayName="Can be replaced with function reference"
|
||||
groupName="Kotlin"
|
||||
enabledByDefault="false"
|
||||
level="INFO"
|
||||
enabledByDefault="true"
|
||||
level="INFORMATION"
|
||||
language="kotlin"
|
||||
/>
|
||||
|
||||
|
||||
@@ -40,12 +40,7 @@ import org.jetbrains.kotlin.types.isError
|
||||
import org.jetbrains.kotlin.types.typeUtil.isTypeParameter
|
||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||
|
||||
class ConvertLambdaToReferenceInspection : IntentionBasedInspection<KtLambdaExpression>(
|
||||
ConvertLambdaToReferenceIntention::class,
|
||||
{ it -> ConvertLambdaToReferenceIntention.shouldSuggestToConvert(it) }
|
||||
) {
|
||||
override fun inspectionTarget(element: KtLambdaExpression) = element.bodyExpression?.statements?.singleOrNull()
|
||||
}
|
||||
class ConvertLambdaToReferenceInspection : IntentionBasedInspection<KtLambdaExpression>(ConvertLambdaToReferenceIntention::class)
|
||||
|
||||
open class ConvertLambdaToReferenceIntention(text: String) :
|
||||
SelfTargetingOffsetIndependentIntention<KtLambdaExpression>(KtLambdaExpression::class.java, text) {
|
||||
@@ -219,10 +214,6 @@ open class ConvertLambdaToReferenceIntention(text: String) :
|
||||
}
|
||||
|
||||
companion object {
|
||||
internal fun shouldSuggestToConvert(element: KtLambdaExpression): Boolean {
|
||||
val referenceName = buildReferenceText(lambdaExpression = element, shortTypes = true) ?: return false
|
||||
return referenceName.length < element.text.length
|
||||
}
|
||||
|
||||
private fun buildReferenceText(lambdaExpression: KtLambdaExpression, shortTypes: Boolean): String? {
|
||||
val singleStatement = lambdaExpression.singleStatementOrNull()
|
||||
|
||||
+9
-1
@@ -9,7 +9,15 @@
|
||||
</problem>
|
||||
<problem>
|
||||
<file>test.kt</file>
|
||||
<line>14</line>
|
||||
<line>9</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/test.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Can be replaced with function reference</problem_class>
|
||||
<description>Convert lambda to reference</description>
|
||||
</problem>
|
||||
<problem>
|
||||
<file>test.kt</file>
|
||||
<line>13</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/test.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="WARNING_ATTRIBUTES">Can be replaced with function reference</problem_class>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
class TheirWrapper(val x: Int)
|
||||
val x = { y: Int -> TheirWrapper(y) }
|
||||
|
||||
// Should not suggest to convert (too long reference)
|
||||
// Should suggest to convert despite of too long reference
|
||||
fun foo(arg: TheirWrapper, convert: (TheirWrapper) -> String) = convert(arg)
|
||||
val y = foo(TheirWrapper(42)) { it.toString() }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user