diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt index eba76b609be..0ae11203a0c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToStringTemplateIntention.kt @@ -64,7 +64,7 @@ open class ConvertToStringTemplateIntention : SelfTargetingOffsetIndependentInte } @JvmStatic - protected fun buildReplacement(expression: KtBinaryExpression): KtStringTemplateExpression { + fun buildReplacement(expression: KtBinaryExpression): KtStringTemplateExpression { val rightText = buildText(expression.right, false) return fold(expression.left, rightText, KtPsiFactory(expression)) } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/IndentRawStringIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/IndentRawStringIntention.kt index 012ac2e8a71..842c6639d73 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/IndentRawStringIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/IndentRawStringIntention.kt @@ -17,11 +17,11 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.psi.psiUtil.startOffset -class IndentRawStringIntention : SelfTargetingIntention( +class IndentRawStringIntention : SelfTargetingOffsetIndependentIntention( KtStringTemplateExpression::class.java, "Indent raw string" ) { - override fun isApplicableTo(element: KtStringTemplateExpression, caretOffset: Int): Boolean { + override fun isApplicableTo(element: KtStringTemplateExpression): Boolean { if (!element.text.startsWith("\"\"\"")) return false if (element.parents.any { it is KtAnnotationEntry || (it as? KtProperty)?.hasModifier(KtTokens.CONST_KEYWORD) == true }) return false if (element.getQualifiedExpressionForReceiver() != null) return false diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt index b0c5debc7ca..acde025976b 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.nj2k.postProcessing import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.editor.RangeMarker import com.intellij.openapi.progress.ProcessCanceledException import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference @@ -30,6 +29,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.postProcessing.processings.* import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.parents class NewJ2kPostProcessor : PostProcessor { @Suppress("PrivatePropertyName") @@ -221,7 +221,15 @@ private val inspectionLikePostProcessingGroup = RemoveForExpressionLoopParameterTypeProcessing(), intentionBasedProcessing(ReplaceMapGetOrDefaultIntention()), inspectionBasedProcessing(ReplaceGuardClauseWithFunctionCallInspection()), - inspectionBasedProcessing(SortModifiersInspection()) + inspectionBasedProcessing(SortModifiersInspection()), + intentionBasedProcessing(ConvertToRawStringTemplateIntention()) { element -> + element.parents.none { + (it as? KtProperty)?.hasModifier(KtTokens.CONST_KEYWORD) == true + } && ConvertToStringTemplateIntention.buildReplacement(element).entries.any { + (it as? KtEscapeStringTemplateEntry)?.unescapedValue == "\n" + } + }, + intentionBasedProcessing(IndentRawStringIntention()) ) diff --git a/nj2k/testData/newJ2k/docComments/deprecatedDocTagWithMultiLineMessage.kt b/nj2k/testData/newJ2k/docComments/deprecatedDocTagWithMultiLineMessage.kt index 73cf3aef438..f0c221b93bf 100644 --- a/nj2k/testData/newJ2k/docComments/deprecatedDocTagWithMultiLineMessage.kt +++ b/nj2k/testData/newJ2k/docComments/deprecatedDocTagWithMultiLineMessage.kt @@ -1,2 +1,7 @@ -@Deprecated("Ph'nglui mglw'nafh\n" + " Cthulhu R'lyeh wgah'nagl fhtagn.\n" + " 'In His House at R'lyeh\n" + " Dead Cthulhu waits dreaming,\n" + " yet He shall rise and His kingdom\n" + " shall cover the Earth.'") +@Deprecated("""Ph'nglui mglw'nafh + Cthulhu R'lyeh wgah'nagl fhtagn. + 'In His House at R'lyeh + Dead Cthulhu waits dreaming, + yet He shall rise and His kingdom + shall cover the Earth.'""") class TestDeprecatedInJavadocWithMultilineMessage \ No newline at end of file diff --git a/nj2k/testData/newJ2k/postProcessing/ConvertConcatenationToRawString.java b/nj2k/testData/newJ2k/postProcessing/ConvertConcatenationToRawString.java new file mode 100644 index 00000000000..4efef3c6253 --- /dev/null +++ b/nj2k/testData/newJ2k/postProcessing/ConvertConcatenationToRawString.java @@ -0,0 +1,5 @@ +public class Test { + String s = "asdf\n" + + "nadfadsf\n" + + "asdfasdf"; +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/postProcessing/ConvertConcatenationToRawString.kt b/nj2k/testData/newJ2k/postProcessing/ConvertConcatenationToRawString.kt new file mode 100644 index 00000000000..6e2531ccc12 --- /dev/null +++ b/nj2k/testData/newJ2k/postProcessing/ConvertConcatenationToRawString.kt @@ -0,0 +1,7 @@ +class Test { + var s = """ + asdf + nadfadsf + asdfasdf + """.trimIndent() +} \ No newline at end of file diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java index 76fd574a210..6595539b151 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java @@ -4176,6 +4176,11 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew runTest("nj2k/testData/newJ2k/postProcessing/AnonymousObject.java"); } + @TestMetadata("ConvertConcatenationToRawString.java") + public void testConvertConcatenationToRawString() throws Exception { + runTest("nj2k/testData/newJ2k/postProcessing/ConvertConcatenationToRawString.java"); + } + @TestMetadata("GetOperator.java") public void testGetOperator() throws Exception { runTest("nj2k/testData/newJ2k/postProcessing/GetOperator.java");