[devkit] IDEA-323201 simplify test data, improve wording, make class internal

GitOrigin-RevId: efb1f88a92264c43790383ca695874cc7424f3ea
This commit is contained in:
Elena Lyulina
2023-08-25 00:27:40 +00:00
committed by intellij-monorepo-bot
parent 36289bbb65
commit 9db39a03d2
11 changed files with 17 additions and 40 deletions
@@ -1,9 +1,9 @@
<html>
<body>
Reports static initialization in <a href="https://plugins.jetbrains.com/docs/intellij/plugin-extensions.html">IDE extensions</a>.
Reports static initialization in <a href="https://plugins.jetbrains.com/docs/intellij/plugin-extensions.html">extension point implementations</a>.
<p>
Static initialization is performed once the class is loaded, which may cause excessive classloading or early initialization of heavy resources.
Since IDE extensions are supposed to be cheap to create, they must not have static initializers.
Since extension point implementations are supposed to be cheap to create, they must not have static initializers.
</p>
<p><small>New in 2023.3</small>
</body>
@@ -398,7 +398,7 @@
implementationClass="org.jetbrains.idea.devkit.inspections.IncorrectProcessCanceledExceptionHandlingInspection"
key="inspections.incorrect.process.canceled.exception.handling.display.name"/>
<localInspection language="UAST" shortName="StaticInitializationInExtensions" groupPathKey="inspections.group.path"
<localInspection language="UAST" groupPathKey="inspections.group.path"
projectType="INTELLIJ_PLUGIN"
key="inspections.static.initialization.in.extensions.name" groupKey="inspections.group.code"
enabledByDefault="false" level="WARNING"
@@ -691,8 +691,8 @@ inspections.incorrect.implicit.process.canceled.exception.inheritor.handling.nam
update.ide.from.sources=Update &IDE from sources
update.ide.from.sources.option=from sources
inspections.static.initialization.in.extensions.name=Static initialization in IDE extensions
inspections.static.initialization.in.extensions.message=IDE extensions must not use static initialization
inspections.static.initialization.in.extensions.name=Static initialization in extension point implementations
inspections.static.initialization.in.extensions.message=Extension point implementations must not use static initialization
inspections.listener.implementation.must.not.be.disposable.name=Listener implementation implements 'Disposable'
inspections.listener.implementation.must.not.implement.disposable=Listener implementation must not implement 'Disposable'
@@ -17,7 +17,7 @@ import org.jetbrains.uast.UClassInitializer
import org.jetbrains.uast.getParentOfType
import org.jetbrains.uast.visitor.AbstractUastNonRecursiveVisitor
class StaticInitializationInExtensionsInspection : DevKitUastInspectionBase() {
internal class StaticInitializationInExtensionsInspection : DevKitUastInspectionBase() {
override fun buildInternalVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor {
// UAST doesn't work with Kotlin class initializers (they are UMethod's, not UClassInitializer's),
@@ -38,10 +38,9 @@ class StaticInitializationInExtensionsInspection : DevKitUastInspectionBase() {
if (!ExtensionUtil.isExtensionPointImplementationCandidate(psiClass)) return true
if (!ExtensionUtil.isInstantiatedExtension(psiClass) { ExtensionUtil.hasServiceBeanFqn(it) }) return true
// try using 'static' modifier as anchor
val anchor = (node.javaPsi as? PsiModifierListOwner)?.modifierList?.let {
findModifierInList(it, PsiModifier.STATIC)
} ?: node.javaPsi ?: return true
// using 'static' modifier as anchor
val modifierList = (node.javaPsi as PsiModifierListOwner).modifierList!!
val anchor = findModifierInList(modifierList, PsiModifier.STATIC)!!
holder.registerProblem(
anchor,
@@ -1,7 +1,5 @@
class ExtensionWithStaticInitialization implements MyExtension {
<warning descr="IDE extensions must not use static initialization">static</warning> {
System.out.println();
}
<warning descr="Extension point implementations must not use static initialization">static</warning> { }
}
@@ -1,7 +1,5 @@
class ExtensionWithoutStaticInitialization implements MyExtension {
ExtensionWithoutStaticInitialization() {
System.out.println();
}
ExtensionWithoutStaticInitialization() { }
}
@@ -1,5 +1,3 @@
class NonExtension {
static {
System.out.println();
}
static { }
}
@@ -1,13 +1,7 @@
@file:Suppress("UNUSED_VARIABLE")
class ExtensionWithStaticInitialization : MyExtension {
companion object {
<warning descr="IDE extensions must not use static initialization">init</warning> {
val a = 0
}
<warning descr="Extension point implementations must not use static initialization">init</warning> { }
<warning descr="IDE extensions must not use static initialization">init</warning> {
val b = 0
}
<warning descr="Extension point implementations must not use static initialization">init</warning> { }
}
}
@@ -1,7 +1,3 @@
@file:Suppress("UNUSED_VARIABLE")
class ExtensionWithoutStaticInitialization : MyExtension {
init {
val a = 0
}
init { }
}
@@ -1,9 +1,5 @@
@file:Suppress("UNUSED_VARIABLE")
class NonExtension {
companion object {
init {
val a = 0
}
init { }
}
}
@@ -27,9 +27,7 @@ abstract class StaticInitializationInExtensionsInspectionTestBase : PluginModule
"""
import com.intellij.openapi.extensions.ExtensionPointName;
public interface MyExtension {
ExtensionPointName<MyExtension> EP_NAME = new ExtensionPointName<>("com.intellij.example.myExtension");
}
public interface MyExtension { }
""".trimIndent()
)
}