They should not be required to be implemented, only `Navigatable.navigationRequest` is. GitOrigin-RevId: b038cb465de3b9f1d6c37f8578ecd69f8667a10b
Plugin DevKit Implementation Notes
Inspections
See org.jetbrains.idea.devkit.inspections.DevKitInspectionUtil for common utility methods.
Consider marking inspections with safe-only fixes ready for Code | Code Cleanup...(com.intellij.codeInspection.CleanupLocalInspectionTool).
Inspections should avoid running whenever they are not applicable in the current context. This includes:
- requires minimum platform version (
org.jetbrains.idea.devkit.util.PluginPlatformInfo) - requires present platform API class (only available in newer platform versions). It is safe to assume most plugins do not target the latest platform.
- requires present plugin API class (e.g., checks specific to Java PSI)
- checked class is not a suitable candidate (e.g., a class without FQN cannot be registered in
plugin.xml) - only applicable to IDEA project (
org.jetbrains.idea.devkit.util.PsiUtil.isIdeaProject())
Code: JVM Languages
Use org.jetbrains.idea.devkit.inspections.DevKitUastInspectionBase or org.jetbrains.idea.devkit.inspections.DevKitJvmInspection.
See their docs for important considerations.
Implement and register in intellij.devkit.core module.
See Testing Code: JVM Languages.
Code: Kotlin Only
Use regular LocalInspectionTool with immediate DevKitInspectionUtil.isAllowed(holder.file) check to skip running in non-plugin context.
Implement and register in intellij.kotlin.devkit module.
Plugin Descriptor
Extend org.jetbrains.idea.devkit.inspections.DevKitPluginXmlInspectionBase and override checkDomElement() to check specific DOM
elements.
See Testing: Plugin Descriptor
Tests
Use light tests only ideally.
See existing base classes like org.jetbrains.idea.devkit.inspections.PluginModuleTestCase
or org.jetbrains.idea.devkit.inspections.quickfix.LightDevKitInspectionFixTestBase.
Add required classes in the test as "mock" containing the minimum set of required signatures.
Same for declaring platform extension points, declare them in testdata plugin.xml.
Testing Code: JVM Languages
Always write explicit tests for both Java and Kotlin sources.
Tests and test data go to intellij.devkit.java.tests and intellij.devkit.kotlin.tests, respectively.
Test data path constants: org.jetbrains.idea.devkit.DevkitJavaTestsUtil & org.jetbrains.idea.devkit.kotlin.DevkitKtTestsUtil.
Testing: Plugin Descriptor
Extend from org.jetbrains.idea.devkit.inspections.PluginXmlDomInspectionTestBase.