[grazie] IDEA-298261 Don't glue together javadoc param name and description when removing a colon

GitOrigin-RevId: a166b9f083c00a6cb9ce2568df769b467a2a9937
This commit is contained in:
Peter Gromov
2022-07-20 10:46:25 +00:00
committed by intellij-monorepo-bot
parent 9a724b6a34
commit c36c8c6db9
4 changed files with 29 additions and 1 deletions
@@ -124,17 +124,27 @@ object GrazieReplaceTypoQuickFix {
val commonSuffix =
min(commonSuffixLength(suggestion, replacedText), min(suggestion.length, replacementRange.length) - commonPrefix)
val localRange = TextRange(replacementRange.startOffset + commonPrefix, replacementRange.endOffset - commonSuffix)
val replacement = suggestion.substring(commonPrefix, suggestion.length - commonSuffix)
var replacement = suggestion.substring(commonPrefix, suggestion.length - commonSuffix)
val file = text.containingFile
val spm = SmartPointerManager.getInstance(file.project)
val shreds = text.intersection(text.textRangeToFile(localRange))
if (shreds.isEmpty()) return emptyList()
if (replacement.isEmpty() && removalWouldGlueUnrelatedTokens(localRange, text)) {
replacement = " ";
}
val best = if (isWordMiddle(text, localRange.endOffset)) shreds.last() else shreds.first()
return shreds.map { spm.createSmartPsiFileRangePointer(file, it) to (if (it === best) replacement else "") }
}
private fun removalWouldGlueUnrelatedTokens(removedRange: TextRange, text: TextContent): Boolean {
val prevFileIndex = text.textOffsetToFile(0) - 1
return removedRange.endOffset < text.length && text[removedRange.endOffset].isLetterOrDigit() &&
prevFileIndex > 0 && text.containingFile.viewProvider.contents[prevFileIndex].isLetterOrDigit()
}
private fun isWordMiddle(text: CharSequence, index: Int) =
index > 0 && index < text.length && Character.isLetter(text[index]) && Character.isLetter(text[index - 1])
@@ -36,6 +36,12 @@ class JavaSupportTest : GrazieTestBase() {
myFixture.checkResultByFile("ide/language/java/SplitLine_after.java")
}
fun `test do not merge text with non-text`() {
runHighlightTestForFile("ide/language/java/AccidentalMerge.java")
myFixture.launchAction(myFixture.findSingleIntention("Remove"))
myFixture.checkResultByFile("ide/language/java/AccidentalMerge_after.java")
}
fun `test long comment performance`() {
PlatformTestUtil.startPerformanceTest("highlighting", 1000) {
runHighlightTestForFile("ide/language/java/LongCommentPerformance.java")
@@ -0,0 +1,6 @@
class C {
/**
* @param a<warning descr="UNLIKELY_OPENING_PUNCTUATION"><caret>:</warning>here is some English text producing an error. And here's another sentence.
*/
void foo(int a){}
}
@@ -0,0 +1,6 @@
class C {
/**
* @param a here is some English text producing an error. And here's another sentence.
*/
void foo(int a){}
}