diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt index 8fb10a557aa..0adcfee9f33 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt @@ -83,6 +83,8 @@ abstract class IntentionBasedInspection private construct open fun additionalFixes(element: TElement): List? = null open fun inspectionTarget(element: TElement): PsiElement? = null + + open fun inspectionProblemText(element: TElement): String? = null private fun PsiElement.toRange(baseElement: PsiElement): TextRange { val start = getStartOffsetIn(baseElement) @@ -126,7 +128,7 @@ abstract class IntentionBasedInspection private construct if (!allFixes.isEmpty()) { holder.registerProblemWithoutOfflineInformation( targetElement, - problemText ?: allFixes.first().name, + inspectionProblemText(element) ?: problemText ?: allFixes.first().name, isOnTheFly, problemHighlightType(targetElement), range, diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt index a10226af058..3e2bff218c6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt @@ -79,6 +79,19 @@ class UsePropertyAccessSyntaxInspection : IntentionBasedInspection "getter" + 1 -> "setter" + else -> null + } + return "Use of $accessor method instead of property access syntax" + } } diff --git a/idea/testData/inspectionsLocal/usePropertyAccessSyntax/.inspection b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/.inspection new file mode 100644 index 00000000000..def1b140c30 --- /dev/null +++ b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/.inspection @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.intentions.UsePropertyAccessSyntaxInspection \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/usePropertyAccessSyntax/caretOnValueArgumentList.kt b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/caretOnValueArgumentList.kt new file mode 100644 index 00000000000..bb1786a53d7 --- /dev/null +++ b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/caretOnValueArgumentList.kt @@ -0,0 +1,7 @@ +// PROBLEM: none +// WITH_RUNTIME +import java.io.File + +fun foo(file: File) { + file.getAbsolutePath() +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/usePropertyAccessSyntax/get.kt b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/get.kt new file mode 100644 index 00000000000..d84afb215d6 --- /dev/null +++ b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/get.kt @@ -0,0 +1,7 @@ +// PROBLEM: "Use of getter method instead of property access syntax" +// WITH_RUNTIME +import java.io.File + +fun foo(file: File) { + file.getAbsolutePath() +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/usePropertyAccessSyntax/get.kt.after b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/get.kt.after new file mode 100644 index 00000000000..335c8d60139 --- /dev/null +++ b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/get.kt.after @@ -0,0 +1,7 @@ +// PROBLEM: "Use of getter method instead of property access syntax" +// WITH_RUNTIME +import java.io.File + +fun foo(file: File) { + file.absolutePath +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/usePropertyAccessSyntax/set.kt b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/set.kt new file mode 100644 index 00000000000..e6caab242c9 --- /dev/null +++ b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/set.kt @@ -0,0 +1,5 @@ +// PROBLEM: "Use of setter method instead of property access syntax" +// WITH_RUNTIME +fun foo(thread: Thread) { + thread.setName("name") +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/usePropertyAccessSyntax/set.kt.after b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/set.kt.after new file mode 100644 index 00000000000..04a702cf77b --- /dev/null +++ b/idea/testData/inspectionsLocal/usePropertyAccessSyntax/set.kt.after @@ -0,0 +1,5 @@ +// PROBLEM: "Use of setter method instead of property access syntax" +// WITH_RUNTIME +fun foo(thread: Thread) { + thread.name = "name" +} \ 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 a16d6288a45..041deeba656 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -9816,6 +9816,34 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { } } + @TestMetadata("idea/testData/inspectionsLocal/usePropertyAccessSyntax") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class UsePropertyAccessSyntax extends AbstractLocalInspectionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInUsePropertyAccessSyntax() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/usePropertyAccessSyntax"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); + } + + @TestMetadata("caretOnValueArgumentList.kt") + public void testCaretOnValueArgumentList() throws Exception { + runTest("idea/testData/inspectionsLocal/usePropertyAccessSyntax/caretOnValueArgumentList.kt"); + } + + @TestMetadata("get.kt") + public void testGet() throws Exception { + runTest("idea/testData/inspectionsLocal/usePropertyAccessSyntax/get.kt"); + } + + @TestMetadata("set.kt") + public void testSet() throws Exception { + runTest("idea/testData/inspectionsLocal/usePropertyAccessSyntax/set.kt"); + } + } + @TestMetadata("idea/testData/inspectionsLocal/whenWithOnlyElse") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)