mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[devkit] new inspection: JComponent must use UiDataProvider (IDEA-355274)
rewrite to UAST GitOrigin-RevId: 3579db2e2f0416ea30ceeddb8f0416efe53c5831
This commit is contained in:
committed by
intellij-monorepo-bot
parent
70a88b1725
commit
e2fa26c890
@@ -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"/>
|
||||
<localInspection language="JVM"
|
||||
<localInspection language="UAST"
|
||||
projectType="INTELLIJ_PLUGIN"
|
||||
groupPathKey="inspections.group.path"
|
||||
key="inspections.jcomponent.data.provider.display.name" groupKey="inspections.group.code" enabledByDefault="true"
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
// 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 com.intellij.codeInspection.InspectionManager
|
||||
import com.intellij.codeInspection.ProblemDescriptor
|
||||
import com.intellij.codeInspection.ProblemsHolder
|
||||
import com.intellij.lang.jvm.DefaultJvmElementVisitor
|
||||
import com.intellij.lang.jvm.JvmClass
|
||||
import com.intellij.codeInspection.registerUProblem
|
||||
import com.intellij.lang.jvm.JvmClassKind
|
||||
import com.intellij.lang.jvm.JvmElementVisitor
|
||||
import com.intellij.lang.jvm.util.JvmInheritanceUtil
|
||||
import com.intellij.openapi.actionSystem.DataProvider
|
||||
import com.intellij.openapi.actionSystem.UiCompatibleDataProvider
|
||||
import com.intellij.openapi.actionSystem.UiDataProvider
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.util.InheritanceUtil
|
||||
import org.jetbrains.idea.devkit.DevKitBundle
|
||||
import org.jetbrains.uast.UClass
|
||||
import javax.swing.JComponent
|
||||
|
||||
internal class JComponentDataProviderInspection : DevKitJvmInspection() {
|
||||
internal class JComponentDataProviderInspection : DevKitUastInspectionBase(UClass::class.java) {
|
||||
|
||||
override fun isAllowed(holder: ProblemsHolder): Boolean {
|
||||
return super.isAllowed(holder) &&
|
||||
DevKitInspectionUtil.isClassAvailable(holder, UiDataProvider::class.java.name)
|
||||
}
|
||||
|
||||
override fun buildVisitor(project: Project, sink: HighlightSink, isOnTheFly: Boolean): JvmElementVisitor<Boolean>? {
|
||||
return object : DefaultJvmElementVisitor<Boolean> {
|
||||
override fun checkClass(uClass: UClass, manager: InspectionManager, isOnTheFly: Boolean): Array<out ProblemDescriptor?>? {
|
||||
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
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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 = <warning descr="Use UiDataProvider instead of DataProvider">object</warning> : JComponent(), DataProvider {}
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user