Add quickfix for adding documentation
This commit is contained in:
committed by
Dmitry Jemerov
parent
88fcad02a9
commit
f54f56d86b
+10
-10
@@ -122,15 +122,15 @@ abstract class IntentionBasedInspection<TElement : KtElement>(
|
||||
editor?.caretModel?.moveToOffset(startElement.textOffset)
|
||||
intention.applyTo(startElement as TElement, editor)
|
||||
}
|
||||
|
||||
private fun PsiElement.findExistingEditor(): Editor? {
|
||||
val file = containingFile?.virtualFile ?: return null
|
||||
val document = FileDocumentManager.getInstance().getDocument(file) ?: return null
|
||||
|
||||
val editorFactory = EditorFactory.getInstance()
|
||||
|
||||
val editors = editorFactory.getEditors(document)
|
||||
return if (editors.isEmpty()) null else editors[0]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun PsiElement.findExistingEditor(): Editor? {
|
||||
val file = containingFile?.virtualFile ?: return null
|
||||
val document = FileDocumentManager.getInstance().getDocument(file) ?: return null
|
||||
|
||||
val editorFactory = EditorFactory.getInstance()
|
||||
|
||||
val editors = editorFactory.getEditors(document)
|
||||
return if (editors.isEmpty()) null else editors[0]
|
||||
}
|
||||
|
||||
+29
-1
@@ -16,7 +16,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.kdoc
|
||||
|
||||
import com.intellij.codeInspection.LocalQuickFix
|
||||
import com.intellij.codeInspection.ProblemDescriptor
|
||||
import com.intellij.codeInspection.ProblemsHolder
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.editor.EditorFactory
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
@@ -24,7 +30,15 @@ import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection
|
||||
import org.jetbrains.kotlin.idea.inspections.findExistingEditor
|
||||
import org.jetbrains.kotlin.kdoc.psi.impl.KDocImpl
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtModifierListOwner
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import org.jetbrains.kotlin.psi.addRemoveModifier.removeModifier
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
|
||||
class KDocMissingDocumentationInspection(): AbstractKotlinInspection() {
|
||||
@@ -42,10 +56,24 @@ class KDocMissingDocumentationInspection(): AbstractKotlinInspection() {
|
||||
(descriptor as? CallableMemberDescriptor)?.overriddenDescriptors
|
||||
?.any { (it.source.getPsi() as? KtNamedDeclaration)?.docComment != null } ?: false
|
||||
if (!hasDocumentation) {
|
||||
holder.registerProblem(nameIdentifier, "Missing documentation")
|
||||
holder.registerProblem(nameIdentifier, "Missing documentation", AddDocumentationFix())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AddDocumentationFix : LocalQuickFix {
|
||||
override fun getName(): String = "Add documentation"
|
||||
|
||||
override fun getFamilyName(): String = name
|
||||
|
||||
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
||||
val declaration = descriptor.psiElement.getParentOfType<KtNamedDeclaration>(true)
|
||||
?: throw IllegalStateException("Can't find declaration")
|
||||
declaration.addBefore(KDocElementFactory(project).createKDocFromText("/** */"), declaration.firstChild)
|
||||
val editor = descriptor.psiElement.findExistingEditor()
|
||||
editor?.caretModel?.moveToOffset(declaration.startOffset + 4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
org.jetbrains.kotlin.idea.kdoc.KDocMissingDocumentationInspection
|
||||
@@ -0,0 +1,4 @@
|
||||
// "Add documentation" "true"
|
||||
|
||||
class <caret>C {
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
// "Add documentation" "true"
|
||||
|
||||
/** <caret> */
|
||||
class C {
|
||||
}
|
||||
@@ -4798,6 +4798,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/quickfix/kdocMissingDocumentation")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class KdocMissingDocumentation extends AbstractQuickFixTest {
|
||||
public void testAllFilesPresentInKdocMissingDocumentation() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/kdocMissingDocumentation"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("simple.kt")
|
||||
public void testSimple() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/kdocMissingDocumentation/simple.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/quickfix/libraries")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user