diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractApplicabilityBasedInspection.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractApplicabilityBasedInspection.kt index acc85b736da..5052dabec93 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractApplicabilityBasedInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/AbstractApplicabilityBasedInspection.kt @@ -48,12 +48,12 @@ abstract class AbstractApplicabilityBasedInspection( inspectionText(element), isOnTheFly, inspectionHighlightType(element), - inspectionRange(element), + inspectionHighlightRangeInElement(element), LocalFix(fixText(element)) ) } - open fun inspectionRange(element: TElement): TextRange? = null + open fun inspectionHighlightRangeInElement(element: TElement): TextRange? = null open fun inspectionTarget(element: TElement): PsiElement = element diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/AddOperatorModifierInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/AddOperatorModifierInspection.kt index aff02466109..dde9e590730 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/AddOperatorModifierInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/AddOperatorModifierInspection.kt @@ -16,7 +16,8 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.util.OperatorChecks class AddOperatorModifierInspection : AbstractApplicabilityBasedInspection(KtNamedFunction::class.java) { - override fun inspectionRange(element: KtNamedFunction) = element.nameIdentifier?.textRange?.shiftLeft(element.startOffset) + override fun inspectionHighlightRangeInElement(element: KtNamedFunction) = + element.nameIdentifier?.textRange?.shiftLeft(element.startOffset) override fun inspectionText(element: KtNamedFunction) = "Function should have 'operator' modifier" diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt index fe3ac909075..7baaf8ef0a5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt @@ -21,11 +21,11 @@ import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.core.setType import org.jetbrains.kotlin.idea.intentions.branchedTransformations.expressionComparedToNull import org.jetbrains.kotlin.idea.intentions.branchedTransformations.shouldBeTransformed +import org.jetbrains.kotlin.idea.intentions.branchedTransformations.textRange import org.jetbrains.kotlin.idea.util.CommentSaver import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.PsiChildRange -import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.BindingContext @@ -41,7 +41,7 @@ class FoldInitializerAndIfToElvisInspection : AbstractApplicabilityBasedInspecti override val defaultFixText: String = "Replace 'if' with elvis operator" - override fun inspectionRange(element: KtIfExpression): TextRange? = textRange(element)?.shiftLeft(element.startOffset) + override fun inspectionHighlightRangeInElement(element: KtIfExpression): TextRange? = element.textRange().shiftLeft(element.startOffset) override fun inspectionHighlightType(element: KtIfExpression): ProblemHighlightType = if (element.shouldBeTransformed()) ProblemHighlightType.GENERIC_ERROR_OR_WARNING else ProblemHighlightType.INFORMATION @@ -60,12 +60,7 @@ class FoldInitializerAndIfToElvisInspection : AbstractApplicabilityBasedInspecti val type = data.ifNullExpression.analyze().getType(data.ifNullExpression) ?: return null if (!type.isNothing()) return null - return textRange(element) - } - - private fun textRange(element: KtIfExpression): TextRange? { - val rightOffset = element.rightParenthesis?.endOffset ?: return null - return TextRange(element.startOffset, rightOffset) + return element.textRange() } fun isApplicable(element: KtIfExpression): Boolean = applicabilityRange(element) != null diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToElvisInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToElvisInspection.kt index 326a56944c2..0e55fc323bb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToElvisInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToElvisInspection.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.idea.intentions.branchedTransformations.* import org.jetbrains.kotlin.idea.util.CommentSaver import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.callUtil.getType @@ -49,10 +48,7 @@ class IfThenToElvisInspection( ) } - override fun inspectionRange(element: KtIfExpression): TextRange? = TextRange( - element.ifKeyword.startOffset, - element.condition?.endOffset ?: element.ifKeyword.endOffset - ).shiftLeft(element.startOffset) + override fun inspectionHighlightRangeInElement(element: KtIfExpression): TextRange? = element.textRange().shiftLeft(element.startOffset) override fun createOptionsPanel(): JComponent? = MultipleCheckboxOptionsPanel(this).also { it.addCheckbox("Report also on statement", "highlightStatement") diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToSafeAccessInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToSafeAccessInspection.kt index 075755d81ce..ca35b3b6a40 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToSafeAccessInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/branchedTransformations/IfThenToSafeAccessInspection.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.inspections.branchedTransformations import com.intellij.codeInspection.ProblemHighlightType import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project +import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.core.replaced @@ -30,7 +31,6 @@ import org.jetbrains.kotlin.idea.refactoring.rename.KotlinVariableInplaceRenameH import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression @@ -40,7 +40,7 @@ class IfThenToSafeAccessInspection : AbstractApplicabilityBasedInspection(true) ?: return - convert(ifExpression, editor) + convert(element as KtIfExpression, editor) } companion object { diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/substring/ReplaceSubstringInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/substring/ReplaceSubstringInspection.kt index 7c5a1a1b3a9..9700574fe99 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/substring/ReplaceSubstringInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/substring/ReplaceSubstringInspection.kt @@ -30,7 +30,7 @@ abstract class ReplaceSubstringInspection : } else false - override fun inspectionRange(element: KtDotQualifiedExpression): TextRange? = + override fun inspectionHighlightRangeInElement(element: KtDotQualifiedExpression): TextRange? = element.callExpression?.calleeExpression?.textRange?.shiftLeft(element.startOffset) protected fun isIndexOfCall(expression: KtExpression?, expectedReceiver: KtExpression): Boolean { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt index bfefe818d7a..3d798da0222 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations import com.intellij.openapi.editor.Editor import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.openapi.util.TextRange import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.KtNodeTypes @@ -27,6 +28,8 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall @@ -312,6 +315,11 @@ internal fun KtIfExpression.shouldBeTransformed(): Boolean = when (val condition else -> false } +fun KtIfExpression.textRange(): TextRange { + val rightOffset = rightParenthesis?.endOffset ?: return ifKeyword.textRange + return TextRange(ifKeyword.startOffset, rightOffset) +} + private fun KtExpression.checkedExpression() = when (this) { is KtBinaryExpression -> expressionComparedToNull() is KtIsExpression -> leftHandSide