From e10fa218f524cfce42f78e03953164f86fb09845 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 27 Dec 2017 15:01:39 +0300 Subject: [PATCH] Extend range of "use expression body" to left brace..end of return Range is extended iff we are in DO_NOT_SHOW case, otherwise just return is highlighted to avoid ugly highlighting So #KT-19771 Fixed --- .../inspections/UseExpressionBodyInspection.kt | 16 ++++++++++++++-- .../useExpressionBody/leftBrace.kt | 7 +++++++ .../useExpressionBody/leftBrace.kt.after | 5 +++++ .../LocalInspectionTestGenerated.java | 6 ++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt create mode 100644 idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UseExpressionBodyInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UseExpressionBodyInspection.kt index 3de65eda89b..b3658d389ca 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UseExpressionBodyInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UseExpressionBodyInspection.kt @@ -72,14 +72,26 @@ class UseExpressionBodyInspection(private val convertEmptyToUnit: Boolean) : Abs super.visitDeclaration(declaration) declaration as? KtDeclarationWithBody ?: return - val (toHighlight, suffix, highlightType) = statusFor(declaration) ?: return + val (toHighlightElement, suffix, highlightType) = statusFor(declaration) ?: return + // Change range to start with left brace + val hasHighlighting = highlightType != INFORMATION + val toHighlightRange = toHighlightElement?.textRange?.let { + if (hasHighlighting) { + it + } + else { + // Extend range to [left brace..end of highlight element] + val offset = (declaration.blockExpression()?.lBrace?.startOffset ?: it.startOffset) - it.startOffset + it.shiftRight(offset).grown(-offset) + } + } holder.registerProblemWithoutOfflineInformation( declaration, "Use expression body instead of $suffix", isOnTheFly, highlightType, - toHighlight?.textRange?.shiftRight(-declaration.startOffset), + toHighlightRange?.shiftRight(-declaration.startOffset), ConvertToExpressionBodyFix() ) } diff --git a/idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt b/idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt new file mode 100644 index 00000000000..b786e746920 --- /dev/null +++ b/idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt @@ -0,0 +1,7 @@ +// HIGHLIGHT: INFORMATION +// PROBLEM: Use expression body instead of return + +fun simple(): Int { + return 1 * + (2 + 3) +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt.after b/idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt.after new file mode 100644 index 00000000000..90ddd89c850 --- /dev/null +++ b/idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt.after @@ -0,0 +1,5 @@ +// HIGHLIGHT: INFORMATION +// PROBLEM: Use expression body instead of return + +fun simple(): Int = 1 * + (2 + 3) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 413747d134c..bd2b05cdf1a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -3965,6 +3965,12 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { doTest(fileName); } + @TestMetadata("leftBrace.kt") + public void testLeftBrace() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/useExpressionBody/leftBrace.kt"); + doTest(fileName); + } + @TestMetadata("multiLine.kt") public void testMultiLine() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/useExpressionBody/multiLine.kt");