Skip to content

Commit 9c1ff75

Browse files
committed
Minor: change highlight range for '...ToElvis' & '...ToSafeAccess' inspections
New range: from `if` keyword to right parenthesis Relates to #KT-19643 #KT-16067
1 parent 984c781 commit 9c1ff75

File tree

7 files changed

+20
-21
lines changed

7 files changed

+20
-21
lines changed

idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractApplicabilityBasedInspection.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ abstract class AbstractApplicabilityBasedInspection<TElement : KtElement>(
4848
inspectionText(element),
4949
isOnTheFly,
5050
inspectionHighlightType(element),
51-
inspectionRange(element),
51+
inspectionHighlightRangeInElement(element),
5252
LocalFix(fixText(element))
5353
)
5454
}
5555

56-
open fun inspectionRange(element: TElement): TextRange? = null
56+
open fun inspectionHighlightRangeInElement(element: TElement): TextRange? = null
5757

5858
open fun inspectionTarget(element: TElement): PsiElement = element
5959

idea/src/org/jetbrains/kotlin/idea/inspections/AddOperatorModifierInspection.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffset
1616
import org.jetbrains.kotlin.util.OperatorChecks
1717

1818
class AddOperatorModifierInspection : AbstractApplicabilityBasedInspection<KtNamedFunction>(KtNamedFunction::class.java) {
19-
override fun inspectionRange(element: KtNamedFunction) = element.nameIdentifier?.textRange?.shiftLeft(element.startOffset)
19+
override fun inspectionHighlightRangeInElement(element: KtNamedFunction) =
20+
element.nameIdentifier?.textRange?.shiftLeft(element.startOffset)
2021

2122
override fun inspectionText(element: KtNamedFunction) = "Function should have 'operator' modifier"
2223

idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ import org.jetbrains.kotlin.idea.core.replaced
2121
import org.jetbrains.kotlin.idea.core.setType
2222
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.expressionComparedToNull
2323
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.shouldBeTransformed
24+
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.textRange
2425
import org.jetbrains.kotlin.idea.util.CommentSaver
2526
import org.jetbrains.kotlin.lexer.KtTokens
2627
import org.jetbrains.kotlin.psi.*
2728
import org.jetbrains.kotlin.psi.psiUtil.PsiChildRange
28-
import org.jetbrains.kotlin.psi.psiUtil.endOffset
2929
import org.jetbrains.kotlin.psi.psiUtil.siblings
3030
import org.jetbrains.kotlin.psi.psiUtil.startOffset
3131
import org.jetbrains.kotlin.resolve.BindingContext
@@ -41,7 +41,7 @@ class FoldInitializerAndIfToElvisInspection : AbstractApplicabilityBasedInspecti
4141

4242
override val defaultFixText: String = "Replace 'if' with elvis operator"
4343

44-
override fun inspectionRange(element: KtIfExpression): TextRange? = textRange(element)?.shiftLeft(element.startOffset)
44+
override fun inspectionHighlightRangeInElement(element: KtIfExpression): TextRange? = element.textRange().shiftLeft(element.startOffset)
4545

4646
override fun inspectionHighlightType(element: KtIfExpression): ProblemHighlightType =
4747
if (element.shouldBeTransformed()) ProblemHighlightType.GENERIC_ERROR_OR_WARNING else ProblemHighlightType.INFORMATION
@@ -60,12 +60,7 @@ class FoldInitializerAndIfToElvisInspection : AbstractApplicabilityBasedInspecti
6060
val type = data.ifNullExpression.analyze().getType(data.ifNullExpression) ?: return null
6161
if (!type.isNothing()) return null
6262

63-
return textRange(element)
64-
}
65-
66-
private fun textRange(element: KtIfExpression): TextRange? {
67-
val rightOffset = element.rightParenthesis?.endOffset ?: return null
68-
return TextRange(element.startOffset, rightOffset)
63+
return element.textRange()
6964
}
7065

7166
fun isApplicable(element: KtIfExpression): Boolean = applicabilityRange(element) != null

idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToElvisInspection.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.idea.intentions.branchedTransformations.*
2020
import org.jetbrains.kotlin.idea.util.CommentSaver
2121
import org.jetbrains.kotlin.idea.util.application.runWriteAction
2222
import org.jetbrains.kotlin.psi.*
23-
import org.jetbrains.kotlin.psi.psiUtil.endOffset
2423
import org.jetbrains.kotlin.psi.psiUtil.startOffset
2524
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
2625
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
@@ -49,10 +48,7 @@ class IfThenToElvisInspection(
4948
)
5049
}
5150

52-
override fun inspectionRange(element: KtIfExpression): TextRange? = TextRange(
53-
element.ifKeyword.startOffset,
54-
element.condition?.endOffset ?: element.ifKeyword.endOffset
55-
).shiftLeft(element.startOffset)
51+
override fun inspectionHighlightRangeInElement(element: KtIfExpression): TextRange? = element.textRange().shiftLeft(element.startOffset)
5652

5753
override fun createOptionsPanel(): JComponent? = MultipleCheckboxOptionsPanel(this).also {
5854
it.addCheckbox("Report also on statement", "highlightStatement")

idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToSafeAccessInspection.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.inspections.branchedTransformations
1919
import com.intellij.codeInspection.ProblemHighlightType
2020
import com.intellij.openapi.editor.Editor
2121
import com.intellij.openapi.project.Project
22+
import com.intellij.openapi.util.TextRange
2223
import com.intellij.psi.PsiDocumentManager
2324
import com.intellij.psi.PsiElement
2425
import org.jetbrains.kotlin.idea.core.replaced
@@ -30,7 +31,6 @@ import org.jetbrains.kotlin.idea.refactoring.rename.KotlinVariableInplaceRenameH
3031
import org.jetbrains.kotlin.idea.util.application.runWriteAction
3132
import org.jetbrains.kotlin.name.FqName
3233
import org.jetbrains.kotlin.psi.*
33-
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
3434
import org.jetbrains.kotlin.psi.psiUtil.startOffset
3535
import org.jetbrains.kotlin.resolve.BindingContext
3636
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
@@ -40,7 +40,7 @@ class IfThenToSafeAccessInspection : AbstractApplicabilityBasedInspection<KtIfEx
4040

4141
override fun isApplicable(element: KtIfExpression): Boolean = isApplicableTo(element, expressionShouldBeStable = true)
4242

43-
override fun inspectionTarget(element: KtIfExpression) = element.ifKeyword
43+
override fun inspectionHighlightRangeInElement(element: KtIfExpression): TextRange? = element.textRange().shiftLeft(element.startOffset)
4444

4545
override fun inspectionText(element: KtIfExpression) = "Foldable if-then"
4646

@@ -54,8 +54,7 @@ class IfThenToSafeAccessInspection : AbstractApplicabilityBasedInspection<KtIfEx
5454
override val startFixInWriteAction = false
5555

5656
override fun applyTo(element: PsiElement, project: Project, editor: Editor?) {
57-
val ifExpression = element.getParentOfType<KtIfExpression>(true) ?: return
58-
convert(ifExpression, editor)
57+
convert(element as KtIfExpression, editor)
5958
}
6059

6160
companion object {

idea/src/org/jetbrains/kotlin/idea/inspections/substring/ReplaceSubstringInspection.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ abstract class ReplaceSubstringInspection :
3030
} else
3131
false
3232

33-
override fun inspectionRange(element: KtDotQualifiedExpression): TextRange? =
33+
override fun inspectionHighlightRangeInElement(element: KtDotQualifiedExpression): TextRange? =
3434
element.callExpression?.calleeExpression?.textRange?.shiftLeft(element.startOffset)
3535

3636
protected fun isIndexOfCall(expression: KtExpression?, expectedReceiver: KtExpression): Boolean {

idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations
77

88
import com.intellij.openapi.editor.Editor
99
import com.intellij.openapi.fileEditor.FileDocumentManager
10+
import com.intellij.openapi.util.TextRange
1011
import com.intellij.psi.search.LocalSearchScope
1112
import com.intellij.psi.search.searches.ReferencesSearch
1213
import org.jetbrains.kotlin.KtNodeTypes
@@ -27,6 +28,8 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation
2728
import org.jetbrains.kotlin.lexer.KtTokens
2829
import org.jetbrains.kotlin.name.Name
2930
import org.jetbrains.kotlin.psi.*
31+
import org.jetbrains.kotlin.psi.psiUtil.endOffset
32+
import org.jetbrains.kotlin.psi.psiUtil.startOffset
3033
import org.jetbrains.kotlin.resolve.BindingContext
3134
import org.jetbrains.kotlin.resolve.DescriptorUtils
3235
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
@@ -312,6 +315,11 @@ internal fun KtIfExpression.shouldBeTransformed(): Boolean = when (val condition
312315
else -> false
313316
}
314317

318+
fun KtIfExpression.textRange(): TextRange {
319+
val rightOffset = rightParenthesis?.endOffset ?: return ifKeyword.textRange
320+
return TextRange(ifKeyword.startOffset, rightOffset)
321+
}
322+
315323
private fun KtExpression.checkedExpression() = when (this) {
316324
is KtBinaryExpression -> expressionComparedToNull()
317325
is KtIsExpression -> leftHandSide

0 commit comments

Comments
 (0)