From f21e1c60e0385ae12a53a0a9298417c8fdcebf84 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Mon, 23 Oct 2017 00:22:48 +0300 Subject: [PATCH] KT-20883: Add more details to MissingDocumentationInspection message #KT-20883 fixed --- idea/src/META-INF/plugin.xml | 2 +- .../inspections/UnusedSymbolInspection.kt | 12 +------ .../idea/inspections/describeDeclaration.kt | 33 +++++++++++++++++++ .../KDocMissingDocumentationInspection.kt | 9 +++-- .../kdocMissingDocumentation/.inspection | 1 + .../kdocMissingDocumentation/simple.kt | 3 ++ .../kdocMissingDocumentation/simple.kt.after | 6 ++++ .../kdocMissingDocumentation/.inspection | 2 +- .../LocalInspectionTestGenerated.java | 15 +++++++++ .../kdoc/AbstractKDocHighlightingTest.java | 1 + 10 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/inspections/describeDeclaration.kt rename idea/{idea-analysis/src/org/jetbrains/kotlin/idea => src/org/jetbrains/kotlin/idea/inspections}/kdoc/KDocMissingDocumentationInspection.kt (91%) create mode 100644 idea/testData/inspectionsLocal/kdocMissingDocumentation/.inspection create mode 100644 idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt create mode 100644 idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt.after diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 809cf126e0c..9d14467519c 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -1869,7 +1869,7 @@ language="kotlin" /> - "Class ''$name'' is never used" - is KtObjectDeclaration -> "Object ''$name'' is never used" - is KtNamedFunction -> "Function ''$name'' is never used" - is KtSecondaryConstructor -> "Constructor is never used" - is KtProperty, is KtParameter -> "Property ''$name'' is never used" - is KtTypeParameter -> "Type parameter ''$name'' is never used" - is KtTypeAlias -> "Type alias ''$name'' is never used" - else -> return - } + val message = declaration.describe()?.let { "$it is never used" } ?: return if (!ProjectRootsUtil.isInProjectSource(declaration)) return diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/describeDeclaration.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/describeDeclaration.kt new file mode 100644 index 00000000000..016503d99df --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/describeDeclaration.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.inspections + +import org.jetbrains.kotlin.psi.* + +/** + * @returns string description of declaration, like Function ''name'' + */ +fun KtNamedDeclaration.describe(): String? = when (this) { + is KtClass -> "Class ''$name''" + is KtObjectDeclaration -> "Object ''$name''" + is KtNamedFunction -> "Function ''$name''" + is KtSecondaryConstructor -> "Constructor" + is KtProperty, is KtParameter -> "Property ''$name''" + is KtTypeParameter -> "Type parameter ''$name''" + is KtTypeAlias -> "Type alias ''$name''" + else -> null +} \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/kdoc/KDocMissingDocumentationInspection.kt similarity index 91% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt rename to idea/src/org/jetbrains/kotlin/idea/inspections/kdoc/KDocMissingDocumentationInspection.kt index 03a7ea76584..0e26e5dfe67 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/kdoc/KDocMissingDocumentationInspection.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * Copyright 2010-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.jetbrains.kotlin.idea.kdoc +package org.jetbrains.kotlin.idea.inspections.kdoc import com.intellij.codeInsight.FileModificationService import com.intellij.codeInspection.LocalQuickFix @@ -30,7 +30,9 @@ import org.jetbrains.kotlin.descriptors.Visibilities 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.describe import org.jetbrains.kotlin.idea.inspections.findExistingEditor +import org.jetbrains.kotlin.idea.kdoc.KDocElementFactory import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtPsiFactory @@ -55,7 +57,8 @@ class KDocMissingDocumentationInspection() : AbstractKotlinInspection() { (descriptor as? CallableMemberDescriptor)?.overriddenDescriptors ?.any { (it.source.getPsi() as? KtNamedDeclaration)?.docComment != null } ?: false if (!hasDocumentation) { - holder.registerProblem(nameIdentifier, "Missing documentation", AddDocumentationFix()) + val message = element.describe()?.let { "$it is missing documentation" } ?: "Missing documentation" + holder.registerProblem(nameIdentifier, message, AddDocumentationFix()) } } } diff --git a/idea/testData/inspectionsLocal/kdocMissingDocumentation/.inspection b/idea/testData/inspectionsLocal/kdocMissingDocumentation/.inspection new file mode 100644 index 00000000000..bb95593db3a --- /dev/null +++ b/idea/testData/inspectionsLocal/kdocMissingDocumentation/.inspection @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.inspections.kdoc.KDocMissingDocumentationInspection \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt b/idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt new file mode 100644 index 00000000000..11bc1eaa747 --- /dev/null +++ b/idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt @@ -0,0 +1,3 @@ +// PROBLEM: "Class ''A'' is missing documentation" + +class A \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt.after b/idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt.after new file mode 100644 index 00000000000..115dddeb93c --- /dev/null +++ b/idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt.after @@ -0,0 +1,6 @@ +// PROBLEM: "Class ''A'' is missing documentation" + +/** + * + */ +class A \ No newline at end of file diff --git a/idea/testData/quickfix/kdocMissingDocumentation/.inspection b/idea/testData/quickfix/kdocMissingDocumentation/.inspection index 685d6ebcdf5..bb95593db3a 100644 --- a/idea/testData/quickfix/kdocMissingDocumentation/.inspection +++ b/idea/testData/quickfix/kdocMissingDocumentation/.inspection @@ -1 +1 @@ -org.jetbrains.kotlin.idea.kdoc.KDocMissingDocumentationInspection \ No newline at end of file +org.jetbrains.kotlin.idea.inspections.kdoc.KDocMissingDocumentationInspection \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 028e4fbfef0..24492f02466 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -582,6 +582,21 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { } } + @TestMetadata("idea/testData/inspectionsLocal/kdocMissingDocumentation") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class KdocMissingDocumentation extends AbstractLocalInspectionTest { + public void testAllFilesPresentInKdocMissingDocumentation() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/kdocMissingDocumentation"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("simple.kt") + public void testSimple() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/kdocMissingDocumentation/simple.kt"); + doTest(fileName); + } + } + @TestMetadata("idea/testData/inspectionsLocal/leakingThis") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/idea/tests/org/jetbrains/kotlin/idea/kdoc/AbstractKDocHighlightingTest.java b/idea/tests/org/jetbrains/kotlin/idea/kdoc/AbstractKDocHighlightingTest.java index 63149412ef2..ee5e41ac0b1 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/kdoc/AbstractKDocHighlightingTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/kdoc/AbstractKDocHighlightingTest.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.kdoc; import org.jetbrains.kotlin.idea.highlighter.AbstractHighlightingTest; +import org.jetbrains.kotlin.idea.inspections.kdoc.KDocMissingDocumentationInspection; public abstract class AbstractKDocHighlightingTest extends AbstractHighlightingTest { @Override