KT-20880: Fix AddDocumentationFix to add multiline comment
#KT-20880 fixed
This commit is contained in:
+27
-4
@@ -23,15 +23,20 @@ import com.intellij.codeInspection.ProblemsHolder
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
|
import com.intellij.psi.impl.source.PostprocessReformattingAspect
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
|
import org.jetbrains.kotlin.idea.core.unblockDocument
|
||||||
import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection
|
import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection
|
||||||
import org.jetbrains.kotlin.idea.inspections.findExistingEditor
|
import org.jetbrains.kotlin.idea.inspections.findExistingEditor
|
||||||
|
import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getChildOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
|
|
||||||
@@ -66,9 +71,27 @@ class KDocMissingDocumentationInspection(): AbstractKotlinInspection() {
|
|||||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(descriptor.psiElement)) return
|
if (!FileModificationService.getInstance().preparePsiElementForWrite(descriptor.psiElement)) return
|
||||||
val declaration = descriptor.psiElement.getParentOfType<KtNamedDeclaration>(true)
|
val declaration = descriptor.psiElement.getParentOfType<KtNamedDeclaration>(true)
|
||||||
?: throw IllegalStateException("Can't find declaration")
|
?: throw IllegalStateException("Can't find declaration")
|
||||||
declaration.addBefore(KDocElementFactory(project).createKDocFromText("/** */"), declaration.firstChild)
|
|
||||||
val editor = descriptor.psiElement.findExistingEditor()
|
|
||||||
editor?.caretModel?.moveToOffset(declaration.startOffset + 4)
|
declaration.addBefore(KDocElementFactory(project).createKDocFromText("/**\n*\n*/\n"), declaration.firstChild)
|
||||||
|
|
||||||
|
val editor = descriptor.psiElement.findExistingEditor() ?: return
|
||||||
|
|
||||||
|
|
||||||
|
// If we just add whitespace
|
||||||
|
// /**
|
||||||
|
// *[HERE]
|
||||||
|
// it will be erased by formatter, so following code adds it right way and moves caret then
|
||||||
|
editor.unblockDocument()
|
||||||
|
|
||||||
|
val section = declaration.firstChild.getChildOfType<KDocSection>() ?: return
|
||||||
|
val asterisk = section.firstChild
|
||||||
|
|
||||||
|
PostprocessReformattingAspect.getInstance(project).disablePostprocessFormattingInside {
|
||||||
|
val whitespace = KtPsiFactory(project).createWhiteSpace()
|
||||||
|
section.addAfter(whitespace, asterisk)
|
||||||
|
editor.caretModel.moveToOffset(asterisk.endOffset + 1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
// "Add documentation" "true"
|
// "Add documentation" "true"
|
||||||
|
|
||||||
/** <caret> */
|
/**
|
||||||
|
* <caret>
|
||||||
|
*/
|
||||||
class C {
|
class C {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// "Add documentation" "true"
|
||||||
|
|
||||||
|
|
||||||
|
class C {
|
||||||
|
|
||||||
|
fun <caret>foo() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
// "Add documentation" "true"
|
||||||
|
|
||||||
|
|
||||||
|
class C {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <caret>
|
||||||
|
*/
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6781,6 +6781,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/kdocMissingDocumentation/simple.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/kdocMissingDocumentation/simple.kt");
|
||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("withIndentation.kt")
|
||||||
|
public void testWithIndentation() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/kdocMissingDocumentation/withIndentation.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("idea/testData/quickfix/lateinit")
|
@TestMetadata("idea/testData/quickfix/lateinit")
|
||||||
|
|||||||
Reference in New Issue
Block a user