From 6cb0190fad6682374e9c515cfd688ed83908c8ec Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sun, 5 Jan 2020 14:50:47 +0900 Subject: [PATCH] FoldInitializerAndIfToElvis: should not add new line for multiline initializer #KT-35805 Fixed --- .../FoldInitializerAndIfToElvisInspection.kt | 3 ++- .../foldInitializerAndIfToElvis/LongName2.kt | 7 +++++++ .../foldInitializerAndIfToElvis/LongName2.kt.after | 6 ++++++ .../MultiLineInitializer.kt | 14 ++++++++++++++ .../MultiLineInitializer.kt.after | 13 +++++++++++++ .../inspections/LocalInspectionTestGenerated.java | 10 ++++++++++ 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt create mode 100644 idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt.after create mode 100644 idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt create mode 100644 idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt index ceca6d9add3..69e0ea30760 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/FoldInitializerAndIfToElvisInspection.kt @@ -86,7 +86,8 @@ class FoldInitializerAndIfToElvisInspection : AbstractApplicabilityBasedInspecti val childRangeAfter = childRangeBefore.withoutLastStatement() val margin = CodeStyle.getSettings(element.containingKtFile).defaultRightMargin - val pattern = elvisPattern(declaration.textLength + ifNullExpr.textLength + 5 >= margin || element.then?.hasComments() == true) + val declarationTextLength = declaration.text.split("\n").lastOrNull()?.trim()?.length ?: 0 + val pattern = elvisPattern(declarationTextLength + ifNullExpr.textLength + 5 >= margin || element.then?.hasComments() == true) val elvis = factory.createExpressionByPattern(pattern, initializer, ifNullExpr) as KtBinaryExpression diff --git a/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt new file mode 100644 index 00000000000..6970b1c0a98 --- /dev/null +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt @@ -0,0 +1,7 @@ +fun foo(): Any { + val yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy = 7 + val xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + = 24 + if (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == null) return yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy + return 42 +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt.after new file mode 100644 index 00000000000..cd3edc1e4f7 --- /dev/null +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt.after @@ -0,0 +1,6 @@ +fun foo(): Any { + val yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy = 7 + val xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + = 24 ?: return yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy + return 42 +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt new file mode 100644 index 00000000000..5d310296c16 --- /dev/null +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt @@ -0,0 +1,14 @@ +fun foo(vararg args: String): String? = null + +fun test(): Int { + val foo = foo( + "1111111111", + "2222222222", + "3333333333", + "4444444444", + "5555555555" + ) + if (foo == null) return 0 + + return 1 +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt.after b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt.after new file mode 100644 index 00000000000..f22bfe6f010 --- /dev/null +++ b/idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt.after @@ -0,0 +1,13 @@ +fun foo(vararg args: String): String? = null + +fun test(): Int { + val foo = foo( + "1111111111", + "2222222222", + "3333333333", + "4444444444", + "5555555555" + ) ?: return 0 + + return 1 +} \ 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 272f5fc6678..43063af4200 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -4704,6 +4704,16 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName.kt"); } + @TestMetadata("LongName2.kt") + public void testLongName2() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/LongName2.kt"); + } + + @TestMetadata("MultiLineInitializer.kt") + public void testMultiLineInitializer() throws Exception { + runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiLineInitializer.kt"); + } + @TestMetadata("MultiStatementBlock.kt") public void testMultiStatementBlock() throws Exception { runTest("idea/testData/inspectionsLocal/foldInitializerAndIfToElvis/MultiStatementBlock.kt");