[devkit] LightServiceMigrationXMLInspection: provide quick-fix

...for the "Service class annotated with '@Service' must not be registered in the 'plugin.xml' file" warning. The provided quick-fix removes the service registration from the 'plugin.xml' file.

^IDEA-254577

GitOrigin-RevId: fdb96913323c60dc8551ff55dac24c04b3299dff
This commit is contained in:
Andrey Cherkasov
2023-12-13 20:03:20 +00:00
committed by intellij-monorepo-bot
parent 7884824d0f
commit 2e5cd31c49
4 changed files with 13 additions and 3 deletions
@@ -13,6 +13,7 @@ import com.intellij.psi.util.PsiUtilCore
import com.intellij.util.xml.DomElement
import com.intellij.util.xml.highlighting.DomElementAnnotationHolder
import com.intellij.util.xml.highlighting.DomHighlightingHelper
import com.intellij.util.xml.highlighting.RemoveDomElementQuickFix
import org.jetbrains.idea.devkit.DevKitBundle
import org.jetbrains.idea.devkit.dom.Extension
import org.jetbrains.uast.UClass
@@ -36,7 +37,7 @@ internal class LightServiceMigrationXMLInspection : DevKitPluginXmlInspectionBas
if (uClass == null || containsUnitTestOrHeadlessModeCheck(uClass)) return
if (aClass.hasAnnotation(Service::class.java.canonicalName)) {
val message = DevKitBundle.message("inspection.light.service.migration.already.annotated.message")
holder.createProblem(element, ProblemHighlightType.ERROR, message, null)
holder.createProblem(element, ProblemHighlightType.ERROR, message, null, RemoveDomElementQuickFix(element))
}
else {
val message = getMessage(level)
@@ -5,6 +5,6 @@
<extensionPoint qualifiedName="com.intellij.applicationService" beanClass="com.intellij.openapi.components.ServiceDescriptor"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<<error descr="Service class annotated with '@Service' must not be registered in the 'plugin.xml' file">applicationService</error> serviceImplementation="com.example.demo.MyService"/>
<<error descr="Service class annotated with '@Service' must not be registered in the 'plugin.xml' file">application<caret>Service</error> serviceImplementation="com.example.demo.MyService"/>
</extensions>
</idea-plugin>
@@ -0,0 +1,8 @@
<idea-plugin>
<id>com.example.demo</id>
<extensionPoints>
<extensionPoint qualifiedName="com.intellij.applicationService" beanClass="com.intellij.openapi.components.ServiceDescriptor"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij"<caret>/>
</idea-plugin>
@@ -38,7 +38,8 @@ internal class LightServiceMigrationInspectionTest : LightServiceMigrationInspec
}
fun testLightService() {
doTest(getCodeFilePath(), getXmlFilePath())
myFixture.copyFileToProject(getCodeFilePath())
DevKitInspectionFixTestBase.doTest(myFixture, "Remove <applicationService> element", "xml", getTestName(true))
}
fun testLibraryClass() {