From e2fa26c8906ee50d624fa24ee2ea9c8c4eff2b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Tue, 6 Aug 2024 11:57:42 +0200 Subject: [PATCH] [devkit] new inspection: JComponent must use UiDataProvider (IDEA-355274) rewrite to UAST GitOrigin-RevId: 3579db2e2f0416ea30ceeddb8f0416efe53c5831 --- .../resources/intellij.devkit.core.xml | 2 +- .../JComponentDataProviderInspection.kt | 38 +++++++++---------- .../JComponentDataProviderInspectionTest.kt | 23 +---------- .../jComponentDataProvider/Object.kt | 6 +++ .../KtJComponentDataProviderInspectionTest.kt | 17 +++++++++ ...ComponentDataProviderInspectionTestBase.kt | 28 ++++++++++++++ 6 files changed, 72 insertions(+), 42 deletions(-) create mode 100644 plugins/devkit/devkit-kotlin-tests/testData/inspections/jComponentDataProvider/Object.kt create mode 100644 plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/KtJComponentDataProviderInspectionTest.kt create mode 100644 plugins/devkit/devkit-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTestBase.kt diff --git a/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml b/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml index 4a4d4bf2be18..5bb103e8efab 100644 --- a/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml +++ b/plugins/devkit/devkit-core/resources/intellij.devkit.core.xml @@ -395,7 +395,7 @@ groupPathKey="inspections.group.path" key="inspections.action.update.thread.display.name" groupKey="inspections.group.code" enabledByDefault="true" level="WARNING" implementationClass="org.jetbrains.idea.devkit.inspections.MissingActionUpdateThread"/> - ? { - return object : DefaultJvmElementVisitor { + override fun checkClass(uClass: UClass, manager: InspectionManager, isOnTheFly: Boolean): Array? { + val psiClass = uClass.javaPsi + if (psiClass.classKind != JvmClassKind.CLASS) return null - override fun visitClass(clazz: JvmClass): Boolean { - if (clazz.classKind != JvmClassKind.CLASS) return true + @Suppress("UsagesOfObsoleteApi") + if (!InheritanceUtil.isInheritor(psiClass, DataProvider::class.java.canonicalName)) return null - if (!JvmInheritanceUtil.isInheritor(clazz, DataProvider::class.java.canonicalName)) return true + @Suppress("UsagesOfObsoleteApi") + if (InheritanceUtil.isInheritor(psiClass, UiCompatibleDataProvider::class.java.canonicalName)) return null - @Suppress("UsagesOfObsoleteApi") - if (JvmInheritanceUtil.isInheritor(clazz, UiCompatibleDataProvider::class.java.canonicalName)) return true + if (!InheritanceUtil.isInheritor(psiClass, JComponent::class.java.canonicalName)) return null - if (JvmInheritanceUtil.isInheritor(clazz, JComponent::class.java.canonicalName)) { - sink.highlight(DevKitBundle.message("inspections.jcomponent.data.provider.use.uidataprovider.instead.of.dataprovider")) - } - return true - } - } + val holder = createProblemsHolder(uClass, manager, isOnTheFly) + holder.registerUProblem(uClass, + DevKitBundle.message("inspections.jcomponent.data.provider.use.uidataprovider.instead.of.dataprovider")) + return holder.resultsArray } + } \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTest.kt b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTest.kt index 4dfea74c4db5..096bac0c28f1 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTest.kt +++ b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTest.kt @@ -3,35 +3,14 @@ package org.jetbrains.idea.devkit.inspections import com.intellij.testFramework.TestDataPath import org.jetbrains.idea.devkit.DevkitJavaTestsUtil -import org.jetbrains.idea.devkit.inspections.quickfix.LightDevKitInspectionFixTestBase @TestDataPath("\$CONTENT_ROOT/testData/inspections/jComponentDataProvider") -class JComponentDataProviderInspectionTest : LightDevKitInspectionFixTestBase() { +class JComponentDataProviderInspectionTest : JComponentDataProviderInspectionTestBase() { override fun getBasePath() = DevkitJavaTestsUtil.TESTDATA_PATH + "inspections/jComponentDataProvider/" override fun getFileExtension(): String = "java" - override fun setUp() { - super.setUp() - myFixture.enableInspections(JComponentDataProviderInspection()) - - myFixture.addClass(""" - package com.intellij.openapi.actionSystem; - public interface DataProvider {} - """.trimIndent()) - - myFixture.addClass(""" - package com.intellij.openapi.actionSystem; - public interface UiCompatibleDataProvider {} - """.trimIndent()) - - myFixture.addClass(""" - package com.intellij.openapi.actionSystem; - public interface UiDataProvider {} - """.trimIndent()) - } - fun testNotJComponent() { doTest() } diff --git a/plugins/devkit/devkit-kotlin-tests/testData/inspections/jComponentDataProvider/Object.kt b/plugins/devkit/devkit-kotlin-tests/testData/inspections/jComponentDataProvider/Object.kt new file mode 100644 index 000000000000..4ff4de2cb571 --- /dev/null +++ b/plugins/devkit/devkit-kotlin-tests/testData/inspections/jComponentDataProvider/Object.kt @@ -0,0 +1,6 @@ +@file:Suppress("MISSING_DEPENDENCY_SUPERCLASS") // mockSDK misses some superclasses + +import javax.swing.JComponent +import com.intellij.openapi.actionSystem.DataProvider + +private val table = object : JComponent(), DataProvider {} \ No newline at end of file diff --git a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/KtJComponentDataProviderInspectionTest.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/KtJComponentDataProviderInspectionTest.kt new file mode 100644 index 000000000000..94c3c976a090 --- /dev/null +++ b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/KtJComponentDataProviderInspectionTest.kt @@ -0,0 +1,17 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.idea.devkit.kotlin.inspections + +import org.jetbrains.idea.devkit.inspections.JComponentDataProviderInspectionTestBase +import org.jetbrains.idea.devkit.kotlin.DevkitKtTestsUtil + +class KtJComponentDataProviderInspectionTest : JComponentDataProviderInspectionTestBase() { + + override fun getFileExtension() = "kt" + + override fun getBasePath(): String = DevkitKtTestsUtil.TESTDATA_PATH + "/inspections/jComponentDataProvider/" + + fun testObject() { + doTest() + } + +} \ No newline at end of file diff --git a/plugins/devkit/devkit-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTestBase.kt b/plugins/devkit/devkit-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTestBase.kt new file mode 100644 index 000000000000..8454e8d66723 --- /dev/null +++ b/plugins/devkit/devkit-tests/testSrc/org/jetbrains/idea/devkit/inspections/JComponentDataProviderInspectionTestBase.kt @@ -0,0 +1,28 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.idea.devkit.inspections + +import org.jetbrains.idea.devkit.inspections.quickfix.LightDevKitInspectionFixTestBase + +abstract class JComponentDataProviderInspectionTestBase : LightDevKitInspectionFixTestBase() { + + override fun setUp() { + super.setUp() + myFixture.enableInspections(JComponentDataProviderInspection()) + + myFixture.addClass(""" + package com.intellij.openapi.actionSystem; + public interface DataProvider {} + """.trimIndent()) + + myFixture.addClass(""" + package com.intellij.openapi.actionSystem; + public interface UiCompatibleDataProvider {} + """.trimIndent()) + + myFixture.addClass(""" + package com.intellij.openapi.actionSystem; + public interface UiDataProvider {} + """.trimIndent()) + } + +} \ No newline at end of file