mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[devkit] IJPL-115429 Fix false-positive private visibility diagnostics for AnAction not registered in plugin.xml
GitOrigin-RevId: c457667cab714b6ae8cc9c0ebf83bd233bc5e324
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bdb10f6ce1
commit
5784e9e931
+3
-1
@@ -6,4 +6,6 @@ import com.intellij.openapi.actionSystem.*
|
||||
|
||||
class MyPublicActionImpl : AnAction() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private class MyLocallyDeclaredActionImpl : AnAction() { }
|
||||
+12
-6
@@ -7,6 +7,7 @@ import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import com.intellij.psi.util.InheritanceUtil
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.idea.devkit.dom.index.IdeaPluginRegistrationIndex
|
||||
import org.jetbrains.idea.devkit.inspections.ExtensionUtil
|
||||
import org.jetbrains.idea.devkit.inspections.ExtensionUtil.isExtensionPointImplementationCandidate
|
||||
import org.jetbrains.idea.devkit.inspections.isServiceImplementationRegisteredInPluginXml
|
||||
@@ -26,9 +27,12 @@ internal class PrivateExtensionClassInspection : LocalInspectionTool() {
|
||||
return object : KtVisitorVoid() {
|
||||
override fun visitClass(klass: KtClass) {
|
||||
if (!klass.isPrivate()) return
|
||||
|
||||
val ktLightClass = klass.toLightClass() ?: return
|
||||
if (isExtensionOrAction(ktLightClass)
|
||||
|
||||
if (!isExtensionPointImplementationCandidate(ktLightClass)) return
|
||||
|
||||
if (isExtension(ktLightClass)
|
||||
|| isRegisteredAction(ktLightClass)
|
||||
|| isServiceImplementationRegisteredInPluginXml(ktLightClass)) {
|
||||
holder.registerProblem(klass.modifierList ?: klass, DevKitKotlinBundle.message("inspection.private.extension.class.text"),
|
||||
InternalVisibilityFix())
|
||||
@@ -39,11 +43,13 @@ internal class PrivateExtensionClassInspection : LocalInspectionTool() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun isExtensionOrAction(psiClass: PsiClass): Boolean {
|
||||
if (!isExtensionPointImplementationCandidate(psiClass)) return false
|
||||
|
||||
private fun isExtension(psiClass: PsiClass): Boolean {
|
||||
return ExtensionUtil.isInstantiatedExtension(psiClass) { ExtensionUtil.hasServiceBeanFqn(it) }
|
||||
|| InheritanceUtil.isInheritor(psiClass, "com.intellij.openapi.actionSystem.AnAction")
|
||||
}
|
||||
|
||||
private fun isRegisteredAction(psiClass: PsiClass): Boolean {
|
||||
return InheritanceUtil.isInheritor(psiClass, "com.intellij.openapi.actionSystem.AnAction")
|
||||
&& IdeaPluginRegistrationIndex.isRegisteredActionOrGroup(psiClass, psiClass.resolveScope)
|
||||
}
|
||||
|
||||
private class InternalVisibilityFix : LocalQuickFix {
|
||||
|
||||
Reference in New Issue
Block a user