KT-21811 Convert string concatenation into multiline string (#2772)
New J2K: Convert string concatenation into multiline string #KT-21811 Fixed
This commit is contained in:
committed by
Ilya Kirillov
parent
c14affd6cd
commit
3a576ce14f
@@ -64,7 +64,7 @@ open class ConvertToStringTemplateIntention : SelfTargetingOffsetIndependentInte
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
protected fun buildReplacement(expression: KtBinaryExpression): KtStringTemplateExpression {
|
fun buildReplacement(expression: KtBinaryExpression): KtStringTemplateExpression {
|
||||||
val rightText = buildText(expression.right, false)
|
val rightText = buildText(expression.right, false)
|
||||||
return fold(expression.left, rightText, KtPsiFactory(expression))
|
return fold(expression.left, rightText, KtPsiFactory(expression))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
|
||||||
class IndentRawStringIntention : SelfTargetingIntention<KtStringTemplateExpression>(
|
class IndentRawStringIntention : SelfTargetingOffsetIndependentIntention<KtStringTemplateExpression>(
|
||||||
KtStringTemplateExpression::class.java, "Indent raw string"
|
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.text.startsWith("\"\"\"")) return false
|
||||||
if (element.parents.any { it is KtAnnotationEntry || (it as? KtProperty)?.hasModifier(KtTokens.CONST_KEYWORD) == true }) 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
|
if (element.getQualifiedExpressionForReceiver() != null) return false
|
||||||
|
|||||||
+10
-2
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.nj2k.postProcessing
|
package org.jetbrains.kotlin.nj2k.postProcessing
|
||||||
|
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.editor.RangeMarker
|
|
||||||
import com.intellij.openapi.progress.ProcessCanceledException
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
|
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.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.postProcessing.processings.*
|
import org.jetbrains.kotlin.nj2k.postProcessing.processings.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
|
|
||||||
class NewJ2kPostProcessor : PostProcessor {
|
class NewJ2kPostProcessor : PostProcessor {
|
||||||
@Suppress("PrivatePropertyName")
|
@Suppress("PrivatePropertyName")
|
||||||
@@ -221,7 +221,15 @@ private val inspectionLikePostProcessingGroup =
|
|||||||
RemoveForExpressionLoopParameterTypeProcessing(),
|
RemoveForExpressionLoopParameterTypeProcessing(),
|
||||||
intentionBasedProcessing(ReplaceMapGetOrDefaultIntention()),
|
intentionBasedProcessing(ReplaceMapGetOrDefaultIntention()),
|
||||||
inspectionBasedProcessing(ReplaceGuardClauseWithFunctionCallInspection()),
|
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())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
class TestDeprecatedInJavadocWithMultilineMessage
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
public class Test {
|
||||||
|
String s = "asdf\n" +
|
||||||
|
"nadfadsf\n" +
|
||||||
|
"asdfasdf";
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
class Test {
|
||||||
|
var s = """
|
||||||
|
asdf
|
||||||
|
nadfadsf
|
||||||
|
asdfasdf
|
||||||
|
""".trimIndent()
|
||||||
|
}
|
||||||
+5
@@ -4176,6 +4176,11 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew
|
|||||||
runTest("nj2k/testData/newJ2k/postProcessing/AnonymousObject.java");
|
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")
|
@TestMetadata("GetOperator.java")
|
||||||
public void testGetOperator() throws Exception {
|
public void testGetOperator() throws Exception {
|
||||||
runTest("nj2k/testData/newJ2k/postProcessing/GetOperator.java");
|
runTest("nj2k/testData/newJ2k/postProcessing/GetOperator.java");
|
||||||
|
|||||||
Reference in New Issue
Block a user