mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-01 02:38:59 +07:00
[devkit] new inspection: JComponent must use UiDataProvider (IDEA-355274)
WIP GitOrigin-RevId: 0c8002a011a442f8cad12a001f6a2daf40e28be5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
81668ee458
commit
4817098482
@@ -0,0 +1,8 @@
|
||||
<html>
|
||||
<body>
|
||||
<code>javax.swing.JComponent</code> must use <code>com.intellij.openapi.actionSystem.UiDataProvider</code> instead of
|
||||
<code>com.intellij.openapi.actionSystem.DataProvider</code> API.
|
||||
<!-- tooltip end -->
|
||||
<p><small>New in 2024.3</small>
|
||||
</body>
|
||||
</html>
|
||||
@@ -395,6 +395,11 @@
|
||||
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"
|
||||
projectType="INTELLIJ_PLUGIN"
|
||||
groupPathKey="inspections.group.path"
|
||||
key="inspections.jcomponent.data.provider.display.name" groupKey="inspections.group.code" enabledByDefault="true"
|
||||
level="WARNING" implementationClass="org.jetbrains.idea.devkit.inspections.JComponentDataProviderInspection"/>
|
||||
|
||||
<localInspection language="UAST" enabledByDefault="true" level="ERROR" shortName="ExtensionRegisteredAsServiceOrComponent"
|
||||
projectType="INTELLIJ_PLUGIN"
|
||||
|
||||
@@ -685,4 +685,7 @@ inspection.plugin.xml.registration.check.display.name=Plugin.xml registration ch
|
||||
inspection.plugin.xml.plugin.logo.display.name=Plugin Logo check
|
||||
|
||||
api.dump.generated.sources.filter.notification=Do not modify manually, contents must be taken from ApiCheckTest.
|
||||
devkit.unstable.api.usage.ignore.declared.inside.this.project=Ignore unstable API declared in this project
|
||||
devkit.unstable.api.usage.ignore.declared.inside.this.project=Ignore unstable API declared in this project
|
||||
|
||||
inspections.jcomponent.data.provider.display.name=JComponent must use UiDataProvider
|
||||
inspections.jcomponent.data.provider.use.uidataprovider.instead.of.dataprovider=Use UiDataProvider instead of DataProvider
|
||||
@@ -0,0 +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.ProblemsHolder
|
||||
import com.intellij.lang.jvm.DefaultJvmElementVisitor
|
||||
import com.intellij.lang.jvm.JvmClass
|
||||
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 org.jetbrains.idea.devkit.DevKitBundle
|
||||
import javax.swing.JComponent
|
||||
|
||||
internal class JComponentDataProviderInspection : DevKitJvmInspection() {
|
||||
|
||||
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 visitClass(clazz: JvmClass): Boolean {
|
||||
if (clazz.classKind != JvmClassKind.CLASS) return true
|
||||
|
||||
if (!JvmInheritanceUtil.isInheritor(clazz, DataProvider::class.java.canonicalName)) return true
|
||||
|
||||
@Suppress("UsagesOfObsoleteApi")
|
||||
if (JvmInheritanceUtil.isInheritor(clazz, UiCompatibleDataProvider::class.java.canonicalName)) return true
|
||||
|
||||
if (JvmInheritanceUtil.isInheritor(clazz, JComponent::class.java.canonicalName)) {
|
||||
sink.highlight(DevKitBundle.message("inspections.jcomponent.data.provider.use.uidataprovider.instead.of.dataprovider"))
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import javax.swing.JComponent;
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
|
||||
public class <warning descr="Use UiDataProvider instead of DataProvider">MyJComponent</warning> extends JComponent implements DataProvider {}
|
||||
@@ -0,0 +1,4 @@
|
||||
import javax.swing.JComponent;
|
||||
import com.intellij.openapi.actionSystem.UiCompatibleDataProvider;
|
||||
|
||||
public class MyJComponentUiCompatibleDataProvider extends JComponent implements UiCompatibleDataProvider {}
|
||||
@@ -0,0 +1,3 @@
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
|
||||
public class NotJComponent implements DataProvider {}
|
||||
@@ -41,7 +41,7 @@ public class DevkitInspectionsRegistrationCheckTest extends BasePlatformTestCase
|
||||
List<LocalInspectionEP> devkitInspections = ContainerUtil.filter(LocalInspectionEP.LOCAL_INSPECTION.getExtensionList(), ep -> {
|
||||
return "DevKit".equals(ep.getPluginDescriptor().getPluginId().getIdString());
|
||||
});
|
||||
assertEquals("Mismatch in total inspections, check classpath in test run configuration (intellij.devkit.plugin)", 72,
|
||||
assertEquals("Mismatch in total inspections, check classpath in test run configuration (intellij.devkit.plugin)", 73,
|
||||
devkitInspections.size());
|
||||
|
||||
List<LocalInspectionEP> disabledInspections = ContainerUtil.filter(devkitInspections, ep -> !ep.enabledByDefault);
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
// 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.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() {
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
fun testMyJComponent() {
|
||||
doTest()
|
||||
}
|
||||
|
||||
fun testMyJComponentUiCompatibleDataProvider() {
|
||||
doTest()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user