diff --git a/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/after.kt.template b/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/after.kt.template new file mode 100644 index 00000000000..1c94172d80e --- /dev/null +++ b/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/after.kt.template @@ -0,0 +1,7 @@ +fun test() { + val x = + """ + |a + |b + """.trimMargin() +} \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/before.kt.template b/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/before.kt.template new file mode 100644 index 00000000000..bc79586214c --- /dev/null +++ b/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/before.kt.template @@ -0,0 +1,7 @@ +fun test() { + val x = + """ + a + b + """.trimIndent() +} \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/description.html b/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/description.html new file mode 100644 index 00000000000..4e78233c6d4 --- /dev/null +++ b/idea/resources/intentionDescriptions/ConvertTrimIndentToTrimMarginIntention/description.html @@ -0,0 +1,5 @@ + + +This intention converts an trimIndent() call to an trimMargin() call. + + \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/after.kt.template b/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/after.kt.template new file mode 100644 index 00000000000..bc79586214c --- /dev/null +++ b/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/after.kt.template @@ -0,0 +1,7 @@ +fun test() { + val x = + """ + a + b + """.trimIndent() +} \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/before.kt.template b/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/before.kt.template new file mode 100644 index 00000000000..1c94172d80e --- /dev/null +++ b/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/before.kt.template @@ -0,0 +1,7 @@ +fun test() { + val x = + """ + |a + |b + """.trimMargin() +} \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/description.html b/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/description.html new file mode 100644 index 00000000000..074f5fae78d --- /dev/null +++ b/idea/resources/intentionDescriptions/ConvertTrimMarginToTrimIndentIntention/description.html @@ -0,0 +1,5 @@ + + +This intention converts an trimMargin() call to an trimIndent() call. + + \ No newline at end of file diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 9c8ec8bf849..c4bd602bc5f 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -1643,6 +1643,16 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. Kotlin + + org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention + Kotlin + + + + org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention + Kotlin + + + + org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention + Kotlin + + + + org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention + Kotlin + + + + org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention + Kotlin + + + + org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention + Kotlin + + + + org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention + Kotlin + + + + org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention + Kotlin + + ( + KtCallExpression::class.java, "Convert to 'trimMargin'" +) { + override fun isApplicableTo(element: KtCallExpression, caretOffset: Int): Boolean { + val template = (element.getQualifiedExpressionForSelector()?.receiverExpression as? KtStringTemplateExpression) ?: return false + if (!template.text.startsWith("\"\"\"")) return false + + val callee = element.calleeExpression ?: return false + if (callee.text != "trimIndent" || callee.getCallableDescriptor()?.fqNameSafe != FqName("kotlin.text.trimIndent")) return false + + val entries = template.entries + return listOfNotNull(entries.firstOrNull(), entries.lastOrNull()).all { it.text.isLineBreakOrBlank() } + } + + override fun applyTo(element: KtCallExpression, editor: Editor?) { + val qualifiedExpression = element.getQualifiedExpressionForSelector() + val template = (qualifiedExpression?.receiverExpression as? KtStringTemplateExpression) ?: return + + val indent = template.entries.asSequence().mapNotNull { stringTemplateEntry -> + val text = stringTemplateEntry.text + if (text.isLineBreakOrBlank()) null else text.takeWhile { it.isWhitespace() } + }.minBy { it.length } ?: "" + + val newTemplate = buildString { + template.entries.forEach { entry -> + val text = entry.text + if (text.isLineBreakOrBlank()) { + append(text) + } else { + append(indent) + append("|") + append(text.drop(indent.length)) + } + } + } + qualifiedExpression.replace(KtPsiFactory(element).createExpression("\"\"\"$newTemplate\"\"\".trimMargin()")) + } +} + +private fun String.isLineBreakOrBlank() = this == "\n" || this.isBlank() \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertTrimMarginToTrimIndentIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertTrimMarginToTrimIndentIntention.kt new file mode 100644 index 00000000000..1280874eb78 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertTrimMarginToTrimIndentIntention.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.intentions + +import com.intellij.openapi.editor.Editor +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe + +class ConvertTrimMarginToTrimIndentIntention : SelfTargetingIntention( + KtCallExpression::class.java, "Convert to 'trimIndent'" +) { + override fun isApplicableTo(element: KtCallExpression, caretOffset: Int): Boolean { + val template = (element.getQualifiedExpressionForSelector()?.receiverExpression as? KtStringTemplateExpression) ?: return false + if (!template.text.startsWith("\"\"\"")) return false + + val callee = element.calleeExpression ?: return false + if (callee.text != "trimMargin" || callee.getCallableDescriptor()?.fqNameSafe != FqName("kotlin.text.trimMargin")) return false + + val marginPrefix = element.marginPrefix() ?: return false + + val entries = template.entries + if (!listOfNotNull(entries.firstOrNull(), entries.lastOrNull()).all { it.text.isLineBreakOrBlank() }) { + return false + } + + return entries.drop(1).dropLast(1).all { stringTemplateEntry -> + val text = stringTemplateEntry.text + text.isLineBreakOrBlank() || text.dropWhile { it.isWhitespace() }.startsWith(marginPrefix) + } + } + + override fun applyTo(element: KtCallExpression, editor: Editor?) { + val qualifiedExpression = element.getQualifiedExpressionForSelector() + val template = (qualifiedExpression?.receiverExpression as? KtStringTemplateExpression) ?: return + val marginPrefix = element.marginPrefix() ?: return + + val indent = template.entries.asSequence().mapNotNull { stringTemplateEntry -> + val text = stringTemplateEntry.text + if (text.isLineBreakOrBlank()) null else text.takeWhile { it.isWhitespace() } + }.minBy { it.length } ?: "" + + val newTemplate = buildString { + template.entries.forEach { entry -> + val text = entry.text + if (text.isLineBreakOrBlank()) { + append(text) + } else { + append(indent) + append(entry.text.dropWhile { it.isWhitespace() }.replaceFirst(marginPrefix, "")) + } + } + } + qualifiedExpression.replace(KtPsiFactory(element).createExpression("\"\"\"$newTemplate\"\"\".trimIndent()")) + } +} + +private fun KtCallExpression.marginPrefix(): String? { + val argument = valueArguments.firstOrNull()?.getArgumentExpression() + if (argument != null) { + if (argument !is KtStringTemplateExpression) return null + val entry = argument.entries.toList().singleOrNull() as? KtLiteralStringTemplateEntry ?: return null + return entry.text.replace("\"", "") + } + return "|" +} + +private fun String.isLineBreakOrBlank() = this == "\n" || this.isBlank() \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/.intention b/idea/testData/intentions/convertTrimIndentToTrimMargin/.intention new file mode 100644 index 00000000000..aab5bd3a9eb --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/.intention @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.intentions.ConvertTrimIndentToTrimMarginIntention diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/differentIndent.kt b/idea/testData/intentions/convertTrimIndentToTrimMargin/differentIndent.kt new file mode 100644 index 00000000000..3767088a06a --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/differentIndent.kt @@ -0,0 +1,9 @@ +// WITH_RUNTIME +fun test() { + val x = + """ + a + b + c + """.trimIndent() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/differentIndent.kt.after b/idea/testData/intentions/convertTrimIndentToTrimMargin/differentIndent.kt.after new file mode 100644 index 00000000000..22542896f51 --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/differentIndent.kt.after @@ -0,0 +1,9 @@ +// WITH_RUNTIME +fun test() { + val x = + """ + |a + | b + | c + """.trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankFirst.kt b/idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankFirst.kt new file mode 100644 index 00000000000..82e1e3b04a6 --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankFirst.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = + """1 + a + b + """.trimIndent() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankLast.kt b/idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankLast.kt new file mode 100644 index 00000000000..d0ac3be6dfa --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankLast.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = + """ + a + b + 1""".trimIndent() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/notRawString.kt b/idea/testData/intentions/convertTrimIndentToTrimMargin/notRawString.kt new file mode 100644 index 00000000000..546af3e46f2 --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/notRawString.kt @@ -0,0 +1,5 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = " a".trimIndent() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/simple.kt b/idea/testData/intentions/convertTrimIndentToTrimMargin/simple.kt new file mode 100644 index 00000000000..67cce5562fe --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/simple.kt @@ -0,0 +1,10 @@ +// INTENTION_TEXT: "Convert to 'trimMargin'" +// WITH_RUNTIME +fun test() { + val x = + """ + a + + b + """.trimIndent() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimIndentToTrimMargin/simple.kt.after b/idea/testData/intentions/convertTrimIndentToTrimMargin/simple.kt.after new file mode 100644 index 00000000000..5db4a664817 --- /dev/null +++ b/idea/testData/intentions/convertTrimIndentToTrimMargin/simple.kt.after @@ -0,0 +1,10 @@ +// INTENTION_TEXT: "Convert to 'trimMargin'" +// WITH_RUNTIME +fun test() { + val x = + """ + |a + + |b + """.trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/.intention b/idea/testData/intentions/convertTrimMarginToTrimIndent/.intention new file mode 100644 index 00000000000..03d14d9bfd7 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/.intention @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.intentions.ConvertTrimMarginToTrimIndentIntention diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/differentIndent.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/differentIndent.kt new file mode 100644 index 00000000000..4ddb290831a --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/differentIndent.kt @@ -0,0 +1,9 @@ +// WITH_RUNTIME +fun test() { + val x = + """ + |a + | b + |c + """.trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/differentIndent.kt.after b/idea/testData/intentions/convertTrimMarginToTrimIndent/differentIndent.kt.after new file mode 100644 index 00000000000..7af335d4be8 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/differentIndent.kt.after @@ -0,0 +1,9 @@ +// WITH_RUNTIME +fun test() { + val x = + """ + a + b + c + """.trimIndent() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/escapedMarginPrefixArgument.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/escapedMarginPrefixArgument.kt new file mode 100644 index 00000000000..4ba9c1b417c --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/escapedMarginPrefixArgument.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = + """ + \a + \b + """.trimMargin("\\") +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/noMarginPrefix.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/noMarginPrefix.kt new file mode 100644 index 00000000000..d39ab1c5a11 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/noMarginPrefix.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = + """ + |a + b + """.trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankFirst.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankFirst.kt new file mode 100644 index 00000000000..2c363f0f39c --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankFirst.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = + """1 + |a + |b + """.trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankLast.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankLast.kt new file mode 100644 index 00000000000..58d73518670 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankLast.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = + """ + |a + |b + 1""".trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/notRawString.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/notRawString.kt new file mode 100644 index 00000000000..d39d61e40f4 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/notRawString.kt @@ -0,0 +1,5 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test() { + val x = " |a".trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/referenceMarginPrefixArgument.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/referenceMarginPrefixArgument.kt new file mode 100644 index 00000000000..3b9c22a2dcf --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/referenceMarginPrefixArgument.kt @@ -0,0 +1,9 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun test(marginPrefix: String) { + val x = + """ + |a + |b + """.trimMargin(marginPrefix) +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/simple.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple.kt new file mode 100644 index 00000000000..895d2f213c7 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple.kt @@ -0,0 +1,9 @@ +// INTENTION_TEXT: "Convert to 'trimIndent'" +// WITH_RUNTIME +fun test() { + val x = + """ + |a + |b + """.trimMargin() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/simple.kt.after b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple.kt.after new file mode 100644 index 00000000000..507f3ff1f74 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple.kt.after @@ -0,0 +1,9 @@ +// INTENTION_TEXT: "Convert to 'trimIndent'" +// WITH_RUNTIME +fun test() { + val x = + """ + a + b + """.trimIndent() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/simple2.kt b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple2.kt new file mode 100644 index 00000000000..f5c492b2b38 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple2.kt @@ -0,0 +1,9 @@ +// WITH_RUNTIME +fun test() { + val x = + """ + #a + + #b + """.trimMargin("#") +} \ No newline at end of file diff --git a/idea/testData/intentions/convertTrimMarginToTrimIndent/simple2.kt.after b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple2.kt.after new file mode 100644 index 00000000000..134c6617c08 --- /dev/null +++ b/idea/testData/intentions/convertTrimMarginToTrimIndent/simple2.kt.after @@ -0,0 +1,9 @@ +// WITH_RUNTIME +fun test() { + val x = + """ + a + + b + """.trimIndent() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index acb986e6cdd..bb95550fe36 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -7294,6 +7294,102 @@ public class IntentionTestGenerated extends AbstractIntentionTest { } } + @TestMetadata("idea/testData/intentions/convertTrimIndentToTrimMargin") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class ConvertTrimIndentToTrimMargin extends AbstractIntentionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInConvertTrimIndentToTrimMargin() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/convertTrimIndentToTrimMargin"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); + } + + @TestMetadata("differentIndent.kt") + public void testDifferentIndent() throws Exception { + runTest("idea/testData/intentions/convertTrimIndentToTrimMargin/differentIndent.kt"); + } + + @TestMetadata("notBlankFirst.kt") + public void testNotBlankFirst() throws Exception { + runTest("idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankFirst.kt"); + } + + @TestMetadata("notBlankLast.kt") + public void testNotBlankLast() throws Exception { + runTest("idea/testData/intentions/convertTrimIndentToTrimMargin/notBlankLast.kt"); + } + + @TestMetadata("notRawString.kt") + public void testNotRawString() throws Exception { + runTest("idea/testData/intentions/convertTrimIndentToTrimMargin/notRawString.kt"); + } + + @TestMetadata("simple.kt") + public void testSimple() throws Exception { + runTest("idea/testData/intentions/convertTrimIndentToTrimMargin/simple.kt"); + } + } + + @TestMetadata("idea/testData/intentions/convertTrimMarginToTrimIndent") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class ConvertTrimMarginToTrimIndent extends AbstractIntentionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInConvertTrimMarginToTrimIndent() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/convertTrimMarginToTrimIndent"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); + } + + @TestMetadata("differentIndent.kt") + public void testDifferentIndent() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/differentIndent.kt"); + } + + @TestMetadata("escapedMarginPrefixArgument.kt") + public void testEscapedMarginPrefixArgument() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/escapedMarginPrefixArgument.kt"); + } + + @TestMetadata("noMarginPrefix.kt") + public void testNoMarginPrefix() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/noMarginPrefix.kt"); + } + + @TestMetadata("notBlankFirst.kt") + public void testNotBlankFirst() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankFirst.kt"); + } + + @TestMetadata("notBlankLast.kt") + public void testNotBlankLast() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/notBlankLast.kt"); + } + + @TestMetadata("notRawString.kt") + public void testNotRawString() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/notRawString.kt"); + } + + @TestMetadata("referenceMarginPrefixArgument.kt") + public void testReferenceMarginPrefixArgument() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/referenceMarginPrefixArgument.kt"); + } + + @TestMetadata("simple.kt") + public void testSimple() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/simple.kt"); + } + + @TestMetadata("simple2.kt") + public void testSimple2() throws Exception { + runTest("idea/testData/intentions/convertTrimMarginToTrimIndent/simple2.kt"); + } + } + @TestMetadata("idea/testData/intentions/convertTryFinallyToUseCall") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)