use snippet for EP with link to IPE

This commit is contained in:
Yann Cébron 2025-03-19 14:45:43 +01:00
parent c0dafbf360
commit eecc3e4fec
94 changed files with 354 additions and 307 deletions

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2023 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# Incompatible Changes in IntelliJ Platform and Plugins API 2019.* # Incompatible Changes in IntelliJ Platform and Plugins API 2019.*
@ -91,7 +91,7 @@ NOTE: Entries not starting with code quotes (`name`) can be added to document no
: Use `com.intellij.codeInsight.completion.PrefixMatcher.sortMatching(Collection)` instead : Use `com.intellij.codeInsight.completion.PrefixMatcher.sortMatching(Collection)` instead
`com.intellij.json.JsonFileTypeFactory` class removed `com.intellij.json.JsonFileTypeFactory` class removed
: Use `com.intellij.fileType` extension point instead. : Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileType"/></include> instead.
`com.intellij.util.containers.ConcurrentHashSet` class removed `com.intellij.util.containers.ConcurrentHashSet` class removed
: Use `com.intellij.util.containers.ContainerUtil#newConcurrentSet` instead. : Use `com.intellij.util.containers.ContainerUtil#newConcurrentSet` instead.
@ -234,10 +234,10 @@ Recompile your code to pick up the new signature.
: Please use different base class for PSI elements. : Please use different base class for PSI elements.
`com.intellij.ide.actions.SearchAgainAction` class now extends `com.intellij.openapi.editor.actionSystem.EditorAction` and inherits its final method `actionPerformed` `com.intellij.ide.actions.SearchAgainAction` class now extends `com.intellij.openapi.editor.actionSystem.EditorAction` and inherits its final method `actionPerformed`
: Please use the `com.intellij.editorActionHandler` extension point to register a different handler for the action. : Please use the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.editorActionHandler"/></include> to register a different handler for the action.
`com.intellij.ide.actions.SearchBackAction` class now extends `com.intellij.openapi.editor.actionSystem.EditorAction` and inherits its final method `actionPerformed` `com.intellij.ide.actions.SearchBackAction` class now extends `com.intellij.openapi.editor.actionSystem.EditorAction` and inherits its final method `actionPerformed`
: Please use the `com.intellij.editorActionHandler` extension point to register a different handler for the action. : Please use the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.editorActionHandler"/></include> to register a different handler for the action.
`com.intellij.lexer.RestartableLexer.getRestartableState()` method removed `com.intellij.lexer.RestartableLexer.getRestartableState()` method removed
: Please use `com.intellij.lexer.RestartableLexer.isRestartableState(int state)` instead. : Please use `com.intellij.lexer.RestartableLexer.isRestartableState(int state)` instead.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# Incompatible Changes in IntelliJ Platform and Plugins API 2021.* # Incompatible Changes in IntelliJ Platform and Plugins API 2021.*
@ -379,7 +379,7 @@ Add implementation for `com.intellij.openapi.fileEditor.FileEditor.getFile()`
`com.jetbrains.performancePlugin.CommandProvider.getCommands(Project)` method parameter `Project` removed `com.jetbrains.performancePlugin.CommandProvider.getCommands(Project)` method parameter `Project` removed
: Project is now only accessible via `com.intellij.openapi.ui.playback.PlaybackContext.getProject()` since it may change during script execution. : Project is now only accessible via `com.intellij.openapi.ui.playback.PlaybackContext.getProject()` since it may change during script execution.
JSON Widget suppressor `com.intellij.json.jsonWidgetSuppressor` EP JSON Widget suppressor <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.json.jsonWidgetSuppressor"/></include>
: Override new method [`JsonWidgetSuppressor.isCandidateForSuppress(VirtualFile, Project)`](%gh-ic%/json/src/com/jetbrains/jsonSchema/extension/JsonWidgetSuppressor.java) for quick check in [EDT](threading_model.md) before `suppressSwitcherWidget()` is called on a background thread. : Override new method [`JsonWidgetSuppressor.isCandidateForSuppress(VirtualFile, Project)`](%gh-ic%/json/src/com/jetbrains/jsonSchema/extension/JsonWidgetSuppressor.java) for quick check in [EDT](threading_model.md) before `suppressSwitcherWidget()` is called on a background thread.
### HTTP Client Plugin 2021.1 ### HTTP Client Plugin 2021.1

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# Incompatible Changes in IntelliJ Platform and Plugins API 2023.* # Incompatible Changes in IntelliJ Platform and Plugins API 2023.*
@ -315,7 +315,7 @@ Fragment builder functions from `ExternalSystemRunConfigurationUtil` file moved
: This may break source-compatibility with inheritors written in Kotlin. : This may break source-compatibility with inheritors written in Kotlin.
Specify `displayName`/`key` for `Configurable` Specify `displayName`/`key` for `Configurable`
: To improve performance, provide either attribute for `com.intellij.applicationConfigurable` or `com.intellij.projectConfigurable` extension point (see [](settings_guide.md)). : To improve performance, provide either attribute for <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.applicationConfigurable"/></include> or <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.projectConfigurable"/></include> (see [](settings_guide.md)).
`com.intellij.remote.RemoteProcess.setWindowSize(int, int)` abstract method added `com.intellij.remote.RemoteProcess.setWindowSize(int, int)` abstract method added
: Should implement this method. : Should implement this method.
@ -398,7 +398,7 @@ Apache Batik library unbundled
: The inner interface was moved to upper level. : The inner interface was moved to upper level.
`com.intellij.database.dataSource.url.TypesRegistry.BaseTypeDescriptor` class moved to package `com.intellij.database.dataSource.url.ui` `com.intellij.database.dataSource.url.TypesRegistry.BaseTypeDescriptor` class moved to package `com.intellij.database.dataSource.url.ui`
: UI extracted from `TypesRegistry` to `TypesRegistryUi`. Use `com.intellij.database.urlParamEditorProvider` extension point to register parameter descriptor, use `com.intellij.database.urlParamEditorUiProvider` extension point to register parameter editor descriptor. : UI extracted from `TypesRegistry` to `TypesRegistryUi`. Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.database.urlParamEditorProvider"/></include> to register parameter descriptor, use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.database.urlParamEditorUiProvider"/></include> to register parameter editor descriptor.
`com.intellij.database.datagrid.DataGrid.setAnonymousColumnName(String)` method removed `com.intellij.database.datagrid.DataGrid.setAnonymousColumnName(String)` method removed
: Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation. : Only recompilation needed for classes that implement `DataGrid` and delegate calls to an actual `DataGrid` implementation.

View File

@ -222,5 +222,8 @@
installed and enabled.</p> installed and enabled.</p>
</note> </note>
</snippet> </snippet>
<snippet id="ep"><a href="https://jb.gg/ipe?extensions=%ep%"
summary="Browse usages in existing implementations of open-source plugins">
<code>%ep%</code></a> extension point
</snippet>
</topic> </topic>

View File

@ -39,7 +39,7 @@ Each entry is mapped to its corresponding _Replacement_, pointing to the recomme
## IntelliJ Platform ## IntelliJ Platform
| Internal API | Replacement | | Internal API | Replacement |
|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |-------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `AnAction.applyTextOverride()` | [](plugin_configuration_file.md#idea-plugin__actions__action__override-text) | | `AnAction.applyTextOverride()` | [](plugin_configuration_file.md#idea-plugin__actions__action__override-text) |
| `ApplicationLoadListener` | See [](plugin_components.md#application-startup) | | `ApplicationLoadListener` | See [](plugin_components.md#application-startup) |
| `BuildNumber.currentVersion()` | Use `ApplicationInfo.getBuild()` | | `BuildNumber.currentVersion()` | Use `ApplicationInfo.getBuild()` |
@ -55,8 +55,8 @@ Each entry is mapped to its corresponding _Replacement_, pointing to the recomme
| `Module.getModuleFile()` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/openapi/module/Module.java) | | `Module.getModuleFile()` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/openapi/module/Module.java) |
| `Module.getModuleFilePath()` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/openapi/module/Module.java) | | `Module.getModuleFilePath()` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/openapi/module/Module.java) |
| `Module.getModuleTypeName()` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/openapi/module/Module.java) | | `Module.getModuleTypeName()` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/openapi/module/Module.java) |
| `ModuleTypeManager.registerModuleType()` | Use `com.intellij.moduleType` extension point instead, [`ModuleType`](%gh-ic%/platform/lang-core/src/com/intellij/openapi/module/ModuleType.java) | | `ModuleTypeManager.registerModuleType()` | Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.moduleType"/></include> instead. [`ModuleType`](%gh-ic%/platform/lang-core/src/com/intellij/openapi/module/ModuleType.java) |
| `PathMacros.setMacro()` | Use `com.intellij.pathMacroContributor` extension point, [`PathMacroContributor`](%gh-ic%/platform/core-api/src/com/intellij/openapi/application/PathMacroContributor.java) | | `PathMacros.setMacro()` | Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.pathMacroContributor"/></include>. [`PathMacroContributor`](%gh-ic%/platform/core-api/src/com/intellij/openapi/application/PathMacroContributor.java) |
| `PlatformUtils` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/util/PlatformUtils.java) | | `PlatformUtils` | [See Doc](%gh-ic%/platform/core-api/src/com/intellij/util/PlatformUtils.java) |
| `PluginClassLoader` | Cast to [`PluginAwareClassLoader`](%gh-ic%/platform/extensions/src/com/intellij/ide/plugins/cl/PluginAwareClassLoader.java) | | `PluginClassLoader` | Cast to [`PluginAwareClassLoader`](%gh-ic%/platform/extensions/src/com/intellij/ide/plugins/cl/PluginAwareClassLoader.java) |
| `PluginManager.getLogger()` | Use own logger, see [](ide_infrastructure.md#logging) | | `PluginManager.getLogger()` | Use own logger, see [](ide_infrastructure.md#logging) |

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# Notable Changes in IntelliJ Platform and Plugins API 2019.* # Notable Changes in IntelliJ Platform and Plugins API 2019.*
@ -21,7 +21,7 @@ Run task once (per project)
: Use `com.intellij.ide.util.RunOnceUtil` to run a task exactly once for application or per project. : Use `com.intellij.ide.util.RunOnceUtil` to run a task exactly once for application or per project.
Symbol completion in plain text editor (VCS Commit Message) Symbol completion in plain text editor (VCS Commit Message)
: Contribute symbol names (classes, methods, ..) via `com.intellij.completion.plainTextSymbol` extension point (`com.intellij.codeInsight.completion.PlainTextSymbolCompletionContributor`). : Contribute symbol names (classes, methods, ...) via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.completion.plainTextSymbol"/></include> ([`PlainTextSymbolCompletionContributor`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/completion/PlainTextSymbolCompletionContributor.java)).
User-customizable date/time formatting User-customizable date/time formatting
: Use `com.intellij.util.text.JBDateFormat#getFormatter()` to use configured format from <ui-path>Settings | Appearance & Behavior | System Settings | Date Formats</ui-path>. : Use `com.intellij.util.text.JBDateFormat#getFormatter()` to use configured format from <ui-path>Settings | Appearance & Behavior | System Settings | Date Formats</ui-path>.
@ -55,13 +55,13 @@ New API for Editor Inlay Hints
: Provides background color in all Trees, Lists and ComboBoxes. : Provides background color in all Trees, Lists and ComboBoxes.
`com.intellij.openapi.startup.StartupActivity` background variant `com.intellij.openapi.startup.StartupActivity` background variant
: Use new dedicated `com.intellij.backgroundPostStartupActivity` extension point (see Javadoc for `StartupActivity#BACKGROUND_POST_STARTUP_ACTIVITY`). : Use new dedicated <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.backgroundPostStartupActivity"/></include> (see Javadoc for `StartupActivity#BACKGROUND_POST_STARTUP_ACTIVITY`).
`com.intellij.codeHighlighting.TextEditorHighlightingPassFactory` registration `com.intellij.codeHighlighting.TextEditorHighlightingPassFactory` registration
: Use new dedicated `com.intellij.highlightingPassFactory` extension point. : Use new dedicated <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.highlightingPassFactory"/></include>.
`com.intellij.openapi.fileTypes.FileTypeFactory` deprecated `com.intellij.openapi.fileTypes.FileTypeFactory` deprecated
: When registering a file type via file extension, pattern or exact file name matching, use `com.intellij.fileType` extension point instead (see [Sample](language_and_filetype.md#register-the-file-type)). : When registering a file type via file extension, pattern, or exact filename matching, use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileType"/></include> instead (see [Sample](language_and_filetype.md#register-the-file-type)).
`@org.jetbrains.annotations.ApiStatus.NonExtendable` `@org.jetbrains.annotations.ApiStatus.NonExtendable`
: Indicates that the annotated API class, interface, or method must not get extended, implemented, or overridden by external plugins but can only be obtained or instantiated for classes and interfaces, or called for methods. : Indicates that the annotated API class, interface, or method must not get extended, implemented, or overridden by external plugins but can only be obtained or instantiated for classes and interfaces, or called for methods.

View File

@ -23,23 +23,23 @@ Generating HTML fragments
: Use [`HtmlBuilder`](%gh-ic%/platform/util/src/com/intellij/openapi/util/text/HtmlBuilder.java) for generating formatted content, e.g., for [Documentation](documentation.md). : Use [`HtmlBuilder`](%gh-ic%/platform/util/src/com/intellij/openapi/util/text/HtmlBuilder.java) for generating formatted content, e.g., for [Documentation](documentation.md).
Extensible HTML Lexer/Parser Extensible HTML Lexer/Parser
: Implement [`HtmlEmbeddedContentSupport`](%gh-ic%/xml/xml-psi-impl/src/com/intellij/html/embedding/HtmlEmbeddedContentSupport.kt) and register in `com.intellij.html.embeddedContentSupport` extension point to embed arbitrary tokens into any tag or attribute. : Implement [<include from="snippets.topic" element-id="ep"><var name="ep" value="HtmlEmbeddedContentSupport`](%gh-ic%/xml/xml-psi-impl/src/com/intellij/html/embedding/HtmlEmbeddedContentSupport.kt) and register in `com.intellij.html.embeddedContentSupport"/></include> to embed arbitrary tokens into any tag or attribute.
Please note that old API from `com.intellij.lexer.BaseHtmlLexer` is no longer working. Please note that old API from `com.intellij.lexer.BaseHtmlLexer` is no longer working.
Action System Action System
: New features in [](action_system.md): `<override-text>` works now for [`<group>`](plugin_configuration_file.md#idea-plugin__actions__group) as well, [`<synonym>`](plugin_configuration_file.md#idea-plugin__actions__action__synonym) provides alternative names when searching for actions, and groups can be excluded from search results. : New features in [](action_system.md): `<override-text>` works now for [`<group>`](plugin_configuration_file.md#idea-plugin__actions__group) as well, [`<synonym>`](plugin_configuration_file.md#idea-plugin__actions__action__synonym) provides alternative names when searching for actions, and groups can be excluded from search results.
Welcome Screen customization Welcome Screen customization
: To provide additional custom tabs, implement [`WelcomeTabFactory`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/wm/WelcomeTabFactory.java) and register in `com.intellij.welcomeTabFactory` extension point. : To provide additional custom tabs, implement [<include from="snippets.topic" element-id="ep"><var name="ep" value="WelcomeTabFactory`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/wm/WelcomeTabFactory.java) and register in `com.intellij.welcomeTabFactory"/></include>.
File Type association with the IDE File Type association with the IDE
: To control file type association with the IDE in the operating system, implement [`OSFileIdeAssociation`](%gh-ic%/platform/core-api/src/com/intellij/openapi/fileTypes/OSFileIdeAssociation.java). : To control file type association with the IDE in the operating system, implement [`OSFileIdeAssociation`](%gh-ic%/platform/core-api/src/com/intellij/openapi/fileTypes/OSFileIdeAssociation.java).
Reader Mode customization Reader Mode customization
: Implement [`ReaderModeProvider`](%gh-ic%/platform/editor-ui-api/src/com/intellij/codeInsight/actions/ReaderModeProvider.kt) and register in `com.intellij.readerModeProvider` extension point to apply custom settings for files rendered in reader mode. Provide `com.intellij.codeInsight.actions.ReaderModeMatcher` to disable Reader Mode for particular set of files. : Implement [<include from="snippets.topic" element-id="ep"><var name="ep" value="ReaderModeProvider`](%gh-ic%/platform/editor-ui-api/src/com/intellij/codeInsight/actions/ReaderModeProvider.kt) and register in `com.intellij.readerModeProvider"/></include> to apply custom settings for files rendered in reader mode. Provide `com.intellij.codeInsight.actions.ReaderModeMatcher` to disable Reader Mode for particular set of files.
Text Editor customization Text Editor customization
: Implement [`TextEditorCustomizer`](%gh-ic%/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorCustomizer.kt) and register in `com.intellij.textEditorCustomizer` extension point to customize created editors. : Implement [<include from="snippets.topic" element-id="ep"><var name="ep" value="TextEditorCustomizer`](%gh-ic%/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorCustomizer.kt) and register in `com.intellij.textEditorCustomizer"/></include> to customize created editors.
### JavaScript Plugin 2020.3 ### JavaScript Plugin 2020.3
@ -63,7 +63,7 @@ Constructor Injection in `Configurable` forbidden
: Added `VirtualFileManager.findFileByNioPath()`/`refreshAndFindFileByNioPath()`. See also `VirtualFile.toNioPath()`. : Added `VirtualFileManager.findFileByNioPath()`/`refreshAndFindFileByNioPath()`. See also `VirtualFile.toNioPath()`.
Tooltip descriptions for icons Tooltip descriptions for icons
: Register resource bundle via `com.intellij.iconDescriptionBundle` extension point to provide tooltips automatically for all [`SimpleColoredComponent`](%gh-ic%/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java) renderers. : Register resource bundle via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.iconDescriptionBundle"/></include> to provide tooltips automatically for all [`SimpleColoredComponent`](%gh-ic%/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java) renderers.
Specify incompatibility with Module Specify incompatibility with Module
: A plugin can [mark itself incompatible](plugin_compatibility.md#declaring-incompatibility-with-module) if IDE contains specified module. : A plugin can [mark itself incompatible](plugin_compatibility.md#declaring-incompatibility-with-module) if IDE contains specified module.
@ -75,16 +75,16 @@ Support for WebP images
: The platform now bundles support for images in [WebP](https://en.wikipedia.org/wiki/WebP) format. : The platform now bundles support for images in [WebP](https://en.wikipedia.org/wiki/WebP) format.
FileType mapping via hashbang (`#!`) FileType mapping via hashbang (`#!`)
: Specify `hashBangs` attribute in `com.intellij.fileType` extension point. [Issue](https://youtrack.jetbrains.com/issue/IDEA-175757) : Specify <include from="snippets.topic" element-id="ep"><var name="ep" value="hashBangs` attribute in `com.intellij.fileType"/></include>. [Issue](https://youtrack.jetbrains.com/issue/IDEA-175757)
Add information to About dialog Add information to About dialog
: Implement [`AboutPopupDescriptionProvider`](%gh-ic%/platform/platform-impl/src/com/intellij/ide/AboutPopupDescriptionProvider.kt) and register in `com.intellij.aboutPopupDescriptionProvider` extension point. : Implement [<include from="snippets.topic" element-id="ep"><var name="ep" value="AboutPopupDescriptionProvider`](%gh-ic%/platform/platform-impl/src/com/intellij/ide/AboutPopupDescriptionProvider.kt) and register in `com.intellij.aboutPopupDescriptionProvider"/></include>.
Previewing Intention/Quick Fix Previewing Intention/Quick Fix
: To support preview in intention popup, suitable [`FileModifier`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/intention/FileModifier.java) must be provided (default implementation `FileModifier.getFileModifierForPreview()` works for most cases). : To support preview in intention popup, suitable [`FileModifier`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/intention/FileModifier.java) must be provided (default implementation `FileModifier.getFileModifierForPreview()` works for most cases).
Delegate Run Anything/Terminal commands to IDE features Delegate Run Anything/Terminal commands to IDE features
: Switch to matching IDE feature by implementing [`TerminalShellCommandHandler`](%gh-ic%/platform/execution-impl/src/com/intellij/terminal/TerminalShellCommandHandler.kt) (`com.intellij.terminal.shellCommandHandler` extension point). [Blog post](https://blog.jetbrains.com/idea/2020/07/run-ide-features-from-the-terminal/) : Switch to matching IDE feature by implementing [<include from="snippets.topic" element-id="ep"><var name="ep" value="TerminalShellCommandHandler`](%gh-ic%/platform/execution-impl/src/com/intellij/terminal/TerminalShellCommandHandler.kt) (`com.intellij.terminal.shellCommandHandler"/></include>). [Blog post](https://blog.jetbrains.com/idea/2020/07/run-ide-features-from-the-terminal/)
Deprecating JavaFX in favor of JCEF Deprecating JavaFX in favor of JCEF
: We recommend switching to [JCEF](embedded_browser_jcef.md), please see [blog post](https://blog.jetbrains.com/platform/2020/07/javafx-and-jcef-in-the-intellij-platform/) for details. : We recommend switching to [JCEF](embedded_browser_jcef.md), please see [blog post](https://blog.jetbrains.com/platform/2020/07/javafx-and-jcef-in-the-intellij-platform/) for details.
@ -120,7 +120,7 @@ Refactoring dialog: builtin "Open in editor" option
: Set `addOpenInEditorCheckbox` constructor parameter to enable it in custom `RefactoringDialog` implementation. : Set `addOpenInEditorCheckbox` constructor parameter to enable it in custom `RefactoringDialog` implementation.
Configurable status bar widgets Configurable status bar widgets
: Use `com.intellij.statusBarWidgetFactory` extension point to provide widgets that can be disabled or reordered, see [](status_bar_widgets.md). : Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.statusBarWidgetFactory"/></include> to provide widgets that can be disabled or reordered, see [](status_bar_widgets.md).
JCEF Support (_Experimental Feature_) JCEF Support (_Experimental Feature_)
: Allows [embedding](embedded_browser_jcef.md) Chromium-based browser in the IDE. : Allows [embedding](embedded_browser_jcef.md) Chromium-based browser in the IDE.

View File

@ -1,6 +1,6 @@
# Notable Changes in IntelliJ Platform and Plugins API 2021.* # Notable Changes in IntelliJ Platform and Plugins API 2021.*
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
<link-summary>List of known Notable API Changes in 2021.*</link-summary> <link-summary>List of known Notable API Changes in 2021.*</link-summary>
@ -30,7 +30,9 @@ Constructor Injection disabled for Extensions
: Please obtain necessary components only when needed (logged as ERROR now). : Please obtain necessary components only when needed (logged as ERROR now).
Language Injection Language Injection
: Use [`LanguageInjectionContributor`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionContributor.java) (`com.intellij.languageInjectionContributor` EP) and [`LanguageInjectionPerformer`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionPerformer.java) (`com.intellij.languageInjectionPerformer` EP) to customize [language injection](language_injection.md#languageinjectioncontributor-and-languageinjectionperformer). : Use [`LanguageInjectionContributor`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionContributor.java) (<include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageInjectionContributor"/></include>)
and [`LanguageInjectionPerformer`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionPerformer.java) (<include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageInjectionPerformer"/></include>)
to customize [language injection](language_injection.md#languageinjectioncontributor-and-languageinjectionperformer).
### IntelliJ IDEA 2021.2 ### IntelliJ IDEA 2021.2
@ -45,7 +47,7 @@ _Add unambiguous imports on the fly_ for custom languages
: Override [`ReferenceImporter#isAddUnambiguousImportsOnTheFlyEnabled()`](%gh-ic%/platform/analysis-impl/src/com/intellij/codeInsight/daemon/ReferenceImporter.java) and provide corresponding user setting. Implement `HintAction` with `fixSilently()` and hook it up to highlighting as a quick fix for unresolved reference. : Override [`ReferenceImporter#isAddUnambiguousImportsOnTheFlyEnabled()`](%gh-ic%/platform/analysis-impl/src/com/intellij/codeInsight/daemon/ReferenceImporter.java) and provide corresponding user setting. Implement `HintAction` with `fixSilently()` and hook it up to highlighting as a quick fix for unresolved reference.
Ability to override encoding per `VirtualFile` Ability to override encoding per `VirtualFile`
: Implement [`FileEncodingProvider`](%gh-ic%/platform/core-api/src/com/intellij/openapi/vfs/encoding/FileEncodingProvider.java) and register in `com.intellij.fileEncodingProvider` extension point. : Implement [`FileEncodingProvider`](%gh-ic%/platform/core-api/src/com/intellij/openapi/vfs/encoding/FileEncodingProvider.java) and register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileEncodingProvider"/></include>.
[JCEF](embedded_browser_jcef.md): wrapper for `CefBrowser` [JCEF](embedded_browser_jcef.md): wrapper for `CefBrowser`
: [`JBCefOsrHandlerBrowser`](%gh-ic%/platform/ui.jcef/jcef/JBCefOsrHandlerBrowser.java) forwards to custom `CefRenderHandler`, e.g., for off-screen rendering. : [`JBCefOsrHandlerBrowser`](%gh-ic%/platform/ui.jcef/jcef/JBCefOsrHandlerBrowser.java) forwards to custom `CefRenderHandler`, e.g., for off-screen rendering.

View File

@ -16,7 +16,7 @@ Display of previews for Intentions and Quick Fixes
: Intentions and Quick Fix actions now display a preview for the code changes. Read [this article](code_intentions_preview.md) to learn more about this feature. : Intentions and Quick Fix actions now display a preview for the code changes. Read [this article](code_intentions_preview.md) to learn more about this feature.
Specify language for Intention Specify language for Intention
: Specify `<language>` in `com.intellij.intentionAction` EP registration to avoid instantiating language-specific intentions in non-relevant places. : Specify `<language>` in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.intentionAction"/></include> registration to avoid instantiating language-specific intentions in non-relevant places.
"Heavy" Brace Matching "Heavy" Brace Matching
: Alternative extension point to implement [](additional_minor_features.md#brace-matching) in background thread. : Alternative extension point to implement [](additional_minor_features.md#brace-matching) in background thread.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Custom Plugin Repository # Custom Plugin Repository
@ -36,7 +36,8 @@ To use a plugin repository _other than_ the [JetBrains Marketplace](https://plug
To avoid collisions between private plugins and those hosted on JetBrains Marketplace, an organization can [reserve plugin IDs](https://plugins.jetbrains.com/docs/marketplace/reserved-plugin-ids.html). To avoid collisions between private plugins and those hosted on JetBrains Marketplace, an organization can [reserve plugin IDs](https://plugins.jetbrains.com/docs/marketplace/reserved-plugin-ids.html).
To provide custom authentication, implement [`PluginRepositoryAuthProvider`](%gh-ic%/platform/platform-impl/src/com/intellij/ide/plugins/auth/PluginRepositoryAuthProvider.java) registered in `com.intellij.pluginRepositoryAuthProvider` extension point. To provide custom authentication, implement [`PluginRepositoryAuthProvider`](%gh-ic%/platform/platform-impl/src/com/intellij/ide/plugins/auth/PluginRepositoryAuthProvider.java)
registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.pluginRepositoryAuthProvider"/></include>.
## Describing Plugins in `updatePlugins.xml` File ## Describing Plugins in `updatePlugins.xml` File

View File

@ -121,7 +121,7 @@ to limit your searches, for example, to only <path>idea-xxx.jar</path> files.
### Inspect the Contents of Packages ### Inspect the Contents of Packages
If you open an EP's interface or abstract class, it is always helpful to inspect the contents of its package. If you open an EP's interface or abstract class, it is always helpful to inspect the contents of its package.
For instance, the interface of the `com.intellij.sdkType` EP lives in the `com.intellij.openapi.projectRoots` package. For instance, the interface of the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.sdkType"/></include> lives in the `com.intellij.openapi.projectRoots` package.
Inspecting the contents of this package shows many related classes that will be useful if you are implementing this feature. Inspecting the contents of this package shows many related classes that will be useful if you are implementing this feature.
### Search for Symbol Names ### Search for Symbol Names

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# File View Providers # File View Providers
@ -28,7 +28,8 @@ A `FileViewProvider` instance corresponds to a single `VirtualFile`, a single `D
## How do I extend the `FileViewProvider`? ## How do I extend the `FileViewProvider`?
To create a file type that has multiple interspersing trees for different languages, a plugin must contain an extension to the `com.intellij.fileType.fileViewProviderFactory` extension point. To create a file type that has multiple interspersing trees for different languages, a plugin must contain an extension to
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileType.fileViewProviderFactory"/></include>.
Implement [`FileViewProviderFactory`](%gh-ic%/platform/core-api/src/com/intellij/psi/FileViewProviderFactory.java) and return your `FileViewProvider` implementation from `createFileViewProvider()` method. Implement [`FileViewProviderFactory`](%gh-ic%/platform/core-api/src/com/intellij/psi/FileViewProviderFactory.java) and return your `FileViewProvider` implementation from `createFileViewProvider()` method.

View File

@ -61,7 +61,8 @@ To save the PSI file to disk, use its parent directory's [`PsiDirectory.add()`](
## How do I get notified when PSI files change? ## How do I get notified when PSI files change?
`PsiManager.addPsiTreeChangeListener()` allows you to receive notifications about all changes to the PSI tree of a project. `PsiManager.addPsiTreeChangeListener()` allows you to receive notifications about all changes to the PSI tree of a project.
Alternatively, register [`PsiTreeChangeListener`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiTreeChangeListener.java) in `com.intellij.psi.treeChangeListener` extension point. Alternatively, register [`PsiTreeChangeListener`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiTreeChangeListener.java)
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.psi.treeChangeListener"/></include>.
> Please see [`PsiTreeChangeEvent`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiTreeChangeEvent.java) Javadoc for common problems when dealing with PSI events. > Please see [`PsiTreeChangeEvent`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiTreeChangeEvent.java) Javadoc for common problems when dealing with PSI events.
> >

View File

@ -1,6 +1,6 @@
# PSI References <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
<!-- Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> # PSI References
<link-summary>PSI Reference represents a link from a usage of a particular element in the code to the corresponding declaration.</link-summary> <link-summary>PSI Reference represents a link from a usage of a particular element in the code to the corresponding declaration.</link-summary>
@ -58,7 +58,7 @@ References are also often contributed to non-code files, such as XML or JSON.
Contributing references is one of the most common ways to extend an existing language. Contributing references is one of the most common ways to extend an existing language.
For example, your plugin can contribute references to Java code, even though the Java PSI is part of the platform and not defined in your plugin. For example, your plugin can contribute references to Java code, even though the Java PSI is part of the platform and not defined in your plugin.
Implement [`PsiReferenceContributor`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiReferenceContributor.java) registered in `com.intellij.psi.referenceContributor` extension point. Implement [`PsiReferenceContributor`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiReferenceContributor.java) registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.psi.referenceContributor"/></include>.
Attribute `language` should be set to the Language ID where this contributor applies to. Attribute `language` should be set to the Language ID where this contributor applies to.
The exact places to contribute references to are then specified using [](element_patterns.md) in calls to `PsiReferenceRegistrar.registerReferenceProvider()`. The exact places to contribute references to are then specified using [](element_patterns.md) in calls to `PsiReferenceRegistrar.registerReferenceProvider()`.

View File

@ -84,7 +84,8 @@ Use [`ProjectLocator`](%gh-ic%/platform/core-api/src/com/intellij/openapi/projec
## How do I extend VFS? ## How do I extend VFS?
To provide an alternative file system implementation (for example, an FTP file system), implement the [`VirtualFileSystem`](%gh-ic%/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileSystem.java) class (most likely you'll also need to implement `VirtualFile`), and register your implementation via `com.intellij.virtualFileSystem` extension point (2019.2 and later) or [application component](plugin_components.md) for earlier versions. To provide an alternative file system implementation (for example, an FTP file system), implement the [`VirtualFileSystem`](%gh-ic%/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileSystem.java) class (most likely you'll also need to implement `VirtualFile`),
and register your implementation via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.virtualFileSystem"/></include>.
To hook into operations performed in the local file system (for example, when developing a version control system integration that needs custom rename/move handling), implement [`LocalFileOperationsHandler`](%gh-ic%/platform/analysis-api/src/com/intellij/openapi/vfs/LocalFileOperationsHandler.java) and register it via `LocalFileSystem.registerAuxiliaryFileOperationsHandler()`. To hook into operations performed in the local file system (for example, when developing a version control system integration that needs custom rename/move handling), implement [`LocalFileOperationsHandler`](%gh-ic%/platform/analysis-api/src/com/intellij/openapi/vfs/LocalFileOperationsHandler.java) and register it via `LocalFileSystem.registerAuxiliaryFileOperationsHandler()`.

View File

@ -78,10 +78,10 @@ The three default executors provided by the IntelliJ Platform are:
* [`CoverageExecutor`](%gh-ic%/plugins/coverage-common/src/com/intellij/coverage/CoverageExecutor.java) _(Run with Coverage)_ * [`CoverageExecutor`](%gh-ic%/plugins/coverage-common/src/com/intellij/coverage/CoverageExecutor.java) _(Run with Coverage)_
Custom implementations are rarely required (it may be necessary, e.g., when a profiler integration is implemented). Custom implementations are rarely required (it may be necessary, e.g., when a profiler integration is implemented).
Executor implementations are registered in the `com.intellij.executor` extension point (EP). Executor implementations are registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.executor"/></include>.
[`ProgramRunner`](%gh-ic%/platform/execution/src/com/intellij/execution/runners/ProgramRunner.java) is responsible for the [execution workflow](#execution-workflow) of a `RunProfile` with a certain `Executor`. [`ProgramRunner`](%gh-ic%/platform/execution/src/com/intellij/execution/runners/ProgramRunner.java) is responsible for the [execution workflow](#execution-workflow) of a `RunProfile` with a certain `Executor`.
`ProgramRunner` implementations are registered in the `com.intellij.programRunner` EP. <include from="snippets.topic" element-id="ep"><var name="ep" value="ProgramRunner` implementations are registered in the `com.intellij.programRunner"/></include>.
[`ExecutionEnvironment`](%gh-ic%/platform/execution/src/com/intellij/execution/runners/ExecutionEnvironment.java) object aggregates all the objects and settings required to execute the process. [`ExecutionEnvironment`](%gh-ic%/platform/execution/src/com/intellij/execution/runners/ExecutionEnvironment.java) object aggregates all the objects and settings required to execute the process.
It is used by the `ProgramRunner.execute()` method. It is used by the `ProgramRunner.execute()` method.
@ -159,7 +159,8 @@ Console [`Filter`](%gh-ic%/platform/execution/src/com/intellij/execution/filters
To attach a filter to the console, use `CommandLineState.addConsoleFilters()` or [`TextConsoleBuilder.addFilter()`](%gh-ic%/platform/execution/src/com/intellij/execution/filters/TextConsoleBuilder.java) if the console is created manually. To attach a filter to the console, use `CommandLineState.addConsoleFilters()` or [`TextConsoleBuilder.addFilter()`](%gh-ic%/platform/execution/src/com/intellij/execution/filters/TextConsoleBuilder.java) if the console is created manually.
Two standard filter implementations are [`RegexpFilter`](%gh-ic%/platform/lang-api/src/com/intellij/execution/filters/RegexpFilter.java) and [`UrlFilter`](%gh-ic%/platform/execution-impl/src/com/intellij/execution/filters/UrlFilter.java). Two standard filter implementations are [`RegexpFilter`](%gh-ic%/platform/lang-api/src/com/intellij/execution/filters/RegexpFilter.java) and [`UrlFilter`](%gh-ic%/platform/execution-impl/src/com/intellij/execution/filters/UrlFilter.java).
Console filters can be also provided by implementing [`ConsoleFilterProvider`](%gh-ic%/platform/lang-api/src/com/intellij/execution/filters/ConsoleFilterProvider.java) and registering it in `com.intellij.consoleFilterProvider` EP. Console filters can be also provided by implementing [`ConsoleFilterProvider`](%gh-ic%/platform/lang-api/src/com/intellij/execution/filters/ConsoleFilterProvider.java) and registering
it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.consoleFilterProvider"/></include>.
## Listening for Execution Events ## Listening for Execution Events

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Run Configurations # Run Configurations
@ -57,7 +57,7 @@ A single configuration type can have multiple configuration factories, e.g., the
To see the list of configuration types available in the IDE, go to <ui-path>Run \| Edit Configurations</ui-path> and click the <control>Add</control> button (<control>+</control> icon). To see the list of configuration types available in the IDE, go to <ui-path>Run \| Edit Configurations</ui-path> and click the <control>Add</control> button (<control>+</control> icon).
`ConfigurationType` implementations are registered in the `com.intellij.configurationType` extension point (EP). `ConfigurationType` implementations are registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.configurationType"/></include>.
Standard base classes for configuration type implementations are: Standard base classes for configuration type implementations are:
* [`SimpleConfigurationType`](%gh-ic%/platform/execution/src/com/intellij/execution/configurations/runConfigurationType.kt) - used for configuration types that have a single configuration factory. * [`SimpleConfigurationType`](%gh-ic%/platform/execution/src/com/intellij/execution/configurations/runConfigurationType.kt) - used for configuration types that have a single configuration factory.
@ -130,7 +130,8 @@ If a plugin requires creating run configurations programmatically, .e.g, from a
## Creating a Run Configuration from Context ## Creating a Run Configuration from Context
Run configurations can be created and run from context, e.g., by right-clicking an application main method, a test class/method, etc., directly in the editor or the project view. Run configurations can be created and run from context, e.g., by right-clicking an application main method, a test class/method, etc., directly in the editor or the project view.
This is achieved by implementing [`LazyRunConfigurationProducer`](%gh-ic%/platform/lang-api/src/com/intellij/execution/actions/LazyRunConfigurationProducer.kt) and registering it in `com.intellij.runConfigurationProducer` EP. This is achieved by implementing [`LazyRunConfigurationProducer`](%gh-ic%/platform/lang-api/src/com/intellij/execution/actions/LazyRunConfigurationProducer.kt) and registering
it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.runConfigurationProducer"/></include>.
The extension requires implementing the following methods: The extension requires implementing the following methods:
* `getConfigurationFactory()` - returns the factory creating run configurations of the type specified in the extension class implementation. * `getConfigurationFactory()` - returns the factory creating run configurations of the type specified in the extension class implementation.
@ -227,8 +228,8 @@ Plugins can modify existing run configurations before they are run, e.g., by add
However, there is no single platform-wide extension point, and different IDEs provide different configuration base classes and extension points, allowing for their modifications. However, there is no single platform-wide extension point, and different IDEs provide different configuration base classes and extension points, allowing for their modifications.
To see what is possible in your case, check the [`RunConfigurationExtensionBase`](%gh-ic%/platform/execution/src/com/intellij/execution/configuration/RunConfigurationExtensionBase.java) inheritors. To see what is possible in your case, check the [`RunConfigurationExtensionBase`](%gh-ic%/platform/execution/src/com/intellij/execution/configuration/RunConfigurationExtensionBase.java) inheritors.
Examples: Examples:
* [`RunConfigurationExtension`](%gh-ic%/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java) implementations registered in `com.intellij.runConfigurationExtension` EP allow for modifying Java run configurations extending [`RunConfigurationBase`](%gh-ic%/platform/execution/src/com/intellij/execution/configurations/RunConfigurationBase.java). * [`RunConfigurationExtension`](%gh-ic%/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java) implementations registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.runConfigurationExtension"/></include> allow for modifying Java run configurations extending [`RunConfigurationBase`](%gh-ic%/platform/execution/src/com/intellij/execution/configurations/RunConfigurationBase.java).
* [`PythonRunConfigurationExtension`](%gh-ic%/python/src/com/jetbrains/python/run/PythonRunConfigurationExtension.java) implementations registered in `Pythonid.runConfigurationExtension` EP allow for modifying configuration extending [`AbstractPythonRunConfiguration`](%gh-ic%/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java) * [`PythonRunConfigurationExtension`](%gh-ic%/python/src/com/jetbrains/python/run/PythonRunConfigurationExtension.java) implementations registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="Pythonid.runConfigurationExtension"/></include> allow for modifying configuration extending [`AbstractPythonRunConfiguration`](%gh-ic%/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java)
etc. etc.
## Referencing Environment Variables in Run Configurations ## Referencing Environment Variables in Run Configurations
@ -243,7 +244,8 @@ To substitute variable references with the actual references, it is required to
Sometimes, it is necessary to perform specific tasks before a configuration is actually run, e.g., build the project, run a build tool preparation task, launch a web browser, etc. Sometimes, it is necessary to perform specific tasks before a configuration is actually run, e.g., build the project, run a build tool preparation task, launch a web browser, etc.
Plugins can provide custom tasks that can be added by users to a created run configuration. Plugins can provide custom tasks that can be added by users to a created run configuration.
To provide a custom task, implement [`BeforeRunTaskProvider`](%gh-ic%/platform/execution/src/com/intellij/execution/BeforeRunTaskProvider.java) and register it in `com.intellij.stepsBeforeRunProvider` EP. To provide a custom task, implement [`BeforeRunTaskProvider`](%gh-ic%/platform/execution/src/com/intellij/execution/BeforeRunTaskProvider.java) and register it
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.stepsBeforeRunProvider"/></include>.
The provider implementation is responsible for creating a task instance for a given run configuration and executing the task. The provider implementation is responsible for creating a task instance for a given run configuration and executing the task.
If access to indexes is not required, it can be marked [dumb aware](indexing_and_psi_stubs.md#DumbAwareAPI). If access to indexes is not required, it can be marked [dumb aware](indexing_and_psi_stubs.md#DumbAwareAPI).
@ -274,4 +276,4 @@ See their Javadocs for the details.
### Providing Custom Macros ### Providing Custom Macros
If the predefined list of macros is insufficient, a plugin can provide custom macros by extending [`Macro`](%gh-ic%/platform/macro/src/com/intellij/ide/macro/Macro.java) and registering it in the `com.intellij.macro` EP. If the predefined list of macros is insufficient, a plugin can provide custom macros by extending [<include from="snippets.topic" element-id="ep"><var name="ep" value="Macro`](%gh-ic%/platform/macro/src/com/intellij/ide/macro/Macro.java) and registering it in the `com.intellij.macro"/></include>.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Creating a Theme Project # Creating a Theme Project
@ -80,5 +80,5 @@ The wizard can be used for both DevKit-based and Gradle-based plugins.
## Bundling Color Schemes ## Bundling Color Schemes
Use `com.intellij.bundledColorScheme` extension point specifying the `path` to the color scheme XML file (without `.xml` suffix). Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.bundledColorScheme"/></include> specifying the `path` to the color scheme XML file (without `.xml` suffix).
Specify attribute `id` for this extension in <path>plugin.xml</path> matching its `name` attribute value from the color scheme XML. Specify attribute `id` for this extension in <path>plugin.xml</path> matching its `name` attribute value from the color scheme XML.

View File

@ -85,7 +85,7 @@ For the latter, reporting is disabled by default — instead, there's an option
To let users report such errors to the vendor, plugins can use one of the solutions: To let users report such errors to the vendor, plugins can use one of the solutions:
- Use [JetBrains Exception Analyzer (EA)](https://plugins.jetbrains.com/docs/marketplace/exception-analyzer.html) that sends errors to the backend provided by JetBrains (2023.3+). - Use [JetBrains Exception Analyzer (EA)](https://plugins.jetbrains.com/docs/marketplace/exception-analyzer.html) that sends errors to the backend provided by JetBrains (2023.3+).
- Implement custom [`ErrorReportSubmitter`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/diagnostic/ErrorReportSubmitter.java) registered in `com.intellij.errorHandler` extension point. - Implement custom [`ErrorReportSubmitter`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/diagnostic/ErrorReportSubmitter.java) registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.errorHandler"/></include>.
See [IntelliJ Platform Explorer](https://jb.gg/ipe?extensions=com.intellij.errorHandler) for existing implementations — ranging from pre-filling web-based issue tracker forms to fully automated submission to log monitoring systems. See [IntelliJ Platform Explorer](https://jb.gg/ipe?extensions=com.intellij.errorHandler) for existing implementations — ranging from pre-filling web-based issue tracker forms to fully automated submission to log monitoring systems.
This [tutorial](https://www.plugin-dev.com/intellij/general/error-reporting/) also offers a working solution for using _Sentry_. This [tutorial](https://www.plugin-dev.com/intellij/general/error-reporting/) also offers a working solution for using _Sentry_.
@ -108,7 +108,7 @@ For paid plugins, see also [Marketplace docs](https://plugins.jetbrains.com/docs
## Context Help ## Context Help
To show custom context web-based help for your plugin's functionality (e.g., for [dialogs](dialog_wrapper.md)), provide [`WebHelpProvider`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/help/WebHelpProvider.java) registered in `com.intellij.webHelpProvider` extension point. To show custom context web-based help for your plugin's functionality (e.g., for [dialogs](dialog_wrapper.md)), provide [`WebHelpProvider`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/help/WebHelpProvider.java) registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.webHelpProvider"/></include>.
> To [localize](providing_translations.md) the help page URL, retrieve the current locale and language tag from the [dynamic bundle](providing_translations.md#getting-the-current-locale-programmatically). > To [localize](providing_translations.md) the help page URL, retrieve the current locale and language tag from the [dynamic bundle](providing_translations.md#getting-the-current-locale-programmatically).
@ -157,7 +157,7 @@ To suggest other relevant plugins, use [`PluginsAdvertiser.installAndEnable()`](
### Deprecating a Plugin ### Deprecating a Plugin
To suggest replacing the currently installed deprecated plugin with the new one, implement [`PluginReplacement`](%gh-ic%/platform/platform-api/src/com/intellij/ide/plugins/PluginReplacement.java) registered in `com.intellij.pluginReplacement` extension point. To suggest replacing the currently installed deprecated plugin with the new one, implement [`PluginReplacement`](%gh-ic%/platform/platform-api/src/com/intellij/ide/plugins/PluginReplacement.java) registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.pluginReplacement"/></include>.
## Network ## Network

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# File-Based Indexes # File-Based Indexes
@ -29,7 +29,7 @@ When accessing an index, specify the key you're interested in and get back the l
> A relatively simple file-based index implementation is the [UI Designer bound forms index](%gh-ic%/plugins/ui-designer/src/com/intellij/uiDesigner/binding/FormClassIndex.java), storing FQN of bound implementation class for [GUI Designer](https://www.jetbrains.com/help/idea/gui-designer-basics.html) <path>.form</path> files. > A relatively simple file-based index implementation is the [UI Designer bound forms index](%gh-ic%/plugins/ui-designer/src/com/intellij/uiDesigner/binding/FormClassIndex.java), storing FQN of bound implementation class for [GUI Designer](https://www.jetbrains.com/help/idea/gui-designer-basics.html) <path>.form</path> files.
> >
Each specific index implementation is a class extending [`FileBasedIndexExtension`](%gh-ic%/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndexExtension.java) registered via `com.intellij.fileBasedIndex` extension point. Each specific index implementation is a class extending [`FileBasedIndexExtension`](%gh-ic%/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndexExtension.java) registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileBasedIndex"/></include>.
An implementation of a file-based index consists of the following main parts: An implementation of a file-based index consists of the following main parts:

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Stub Indexes # Stub Indexes
@ -95,7 +95,7 @@ Keys in stub indexes are typically strings (such as class names); other data typ
A stub index is a class which extends [`AbstractStubIndex`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/stubs/AbstractStubIndex.java). A stub index is a class which extends [`AbstractStubIndex`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/stubs/AbstractStubIndex.java).
In the most common case, when the key type is `String`, use a more specific base class, namely [`StringStubIndexExtension`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/stubs/StringStubIndexExtension.java). In the most common case, when the key type is `String`, use a more specific base class, namely [`StringStubIndexExtension`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/stubs/StringStubIndexExtension.java).
Stub index implementation classes are registered in the `com.intellij.stubIndex` extension point. Stub index implementation classes are registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.stubIndex"/></include>.
To put data into an index, implement `IStubElementType.indexStub()` ([example: `JavaClassElementType.indexStub()`](%gh-ic%/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java)). To put data into an index, implement `IStubElementType.indexStub()` ([example: `JavaClassElementType.indexStub()`](%gh-ic%/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java)).
This method accepts an [`IndexSink`](%gh-ic%/platform/core-api/src/com/intellij/psi/stubs/IndexSink.java) as a parameter and puts in the index ID and the key for each index in which the element should be stored. This method accepts an [`IndexSink`](%gh-ic%/platform/core-api/src/com/intellij/psi/stubs/IndexSink.java) as a parameter and puts in the index ID and the key for each index in which the element should be stored.

View File

@ -317,7 +317,7 @@ This is not recommended and should be avoided whenever possible.
To disable the expansion of path macros ([`PathMacro`](%gh-ic%/platform/macro/src/com/intellij/ide/macro/PathMacro.java)) To disable the expansion of path macros ([`PathMacro`](%gh-ic%/platform/macro/src/com/intellij/ide/macro/PathMacro.java))
in stored values, implement [`PathMacroFilter`](%gh-ic%/jps/model-serialization/src/com/intellij/openapi/application/PathMacroFilter.java) in stored values, implement [`PathMacroFilter`](%gh-ic%/jps/model-serialization/src/com/intellij/openapi/application/PathMacroFilter.java)
and register in `com.intellij.pathMacroFilter` extension point. and register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.pathMacroFilter"/></include>.
### Migrating Persisted Values ### Migrating Persisted Values

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Components (Deprecated) # Components (Deprecated)
<primary-label ref="Deprecated"/> <primary-label ref="Deprecated"/>
@ -48,7 +48,7 @@ See also [Running Tasks Once](ide_infrastructure.md#running-tasks-once).
<tab title="2023.1 and later"> <tab title="2023.1 and later">
Using [Kotlin coroutines](kotlin_coroutines.md), implement [`ProjectActivity`](%gh-ic%/platform/core-api/src/com/intellij/openapi/startup/StartupActivity.kt) and register in `com.intellij.postStartupActivity` extension point. Using [Kotlin coroutines](kotlin_coroutines.md), implement [`ProjectActivity`](%gh-ic%/platform/core-api/src/com/intellij/openapi/startup/StartupActivity.kt) and register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.postStartupActivity"/></include>.
Examples: Examples:
- [`PowerSaveModeNotifier`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/actions/PowerSaveModeNotifier.kt) - [`PowerSaveModeNotifier`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/actions/PowerSaveModeNotifier.kt)
- [`TipOfTheDayStartupActivity`](%gh-ic%/platform/tips-of-the-day/src/com/intellij/ide/TipOfTheDayStartupActivity.kt) - [`TipOfTheDayStartupActivity`](%gh-ic%/platform/tips-of-the-day/src/com/intellij/ide/TipOfTheDayStartupActivity.kt)

View File

@ -12,8 +12,8 @@ _Extensions_ are the most common way for a plugin to extend the IntelliJ Platfor
The following are some of the most common tasks achieved using extensions: The following are some of the most common tasks achieved using extensions:
* The `com.intellij.toolWindow` extension point allows plugins to add [tool windows](tool_windows.md) (panels displayed at the sides of the IDE user interface); * The <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.toolWindow"/></include> allows plugins to add [tool windows](tool_windows.md) (panels displayed at the sides of the IDE user interface);
* The `com.intellij.applicationConfigurable` and `com.intellij.projectConfigurable` extension points allow plugins to add pages to the [Settings dialog](settings.md); * The <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.applicationConfigurable"/></include> and <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.projectConfigurable"/></include> allow plugins to add pages to the [Settings dialog](settings.md);
* [Custom language plugins](custom_language_support.md) use many extension points to extend various language support features in the IDE. * [Custom language plugins](custom_language_support.md) use many extension points to extend various language support features in the IDE.
There are more than 1600 extension points available in the platform and the bundled plugins, allowing customizing different parts of the IDE behavior. There are more than 1600 extension points available in the platform and the bundled plugins, allowing customizing different parts of the IDE behavior.

View File

@ -171,11 +171,7 @@ In-paragraph code fragments and IntelliJ Platform APIs are formatted according t
#### Extension Points #### Extension Points
* Extension point name must be followed by "extension point (EP)" for the first occurrence on a page. Use `<include from="snippets.topic" element-id="ep"><var name="ep" value="fqn.of.ep"/></include>` snippet to introduce EP.
All following occurrences can use "EP" suffix.
* Use the FQN when first introducing an [extension point](plugin_extension_points.md) (EP) on a page.
Rather than `stubIndex`, introduce `com.intellij.stubIndex`.
Later mentions on the page can be `stubIndex`.
#### XML #### XML

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Spring API # Spring API
<primary-label ref="IntelliJIDEA_Ultimate"/> <primary-label ref="IntelliJIDEA_Ultimate"/>
@ -114,7 +114,7 @@ _Version 14_: implement `SpringInfrastructureBean`, such beans obtain a special
All support for XML-based Spring configuration files is provided via [DOM-API](xml_dom_api.md). All support for XML-based Spring configuration files is provided via [DOM-API](xml_dom_api.md).
#### Add Support for Additional Spring Namespace #### Add Support for Additional Spring Namespace
See `com.intellij.spring.customNamespaces` EP, registered namespace-key must match the one registered with your DOM elements via `@Namespace`. See <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spring.customNamespaces"/></include>, registered namespace-key must match the one registered with your DOM elements via `@Namespace`.
Register available elements via standard `DomExtender<Beans>` EP or `com.intellij.spring.dom.SpringCustomNamespaces#registerExtensions` (Version 14). Register available elements via standard `DomExtender<Beans>` EP or `com.intellij.spring.dom.SpringCustomNamespaces#registerExtensions` (Version 14).
Please pay attention to `getModelVersion` and `getStubVersion` (see Javadoc). Please pay attention to `getModelVersion` and `getStubVersion` (see Javadoc).
@ -150,7 +150,8 @@ See `com.intellij.spring.spi.SpringSpiManager`.
### IDE Features ### IDE Features
#### Add Inspections to Spring Validator #### Add Inspections to Spring Validator
Add additional inspections (e.g. for custom namespace) to Spring Validator (*Settings|Compiler|Validation*) via `com.intellij.spring.SpringInspectionsRegistry$Contributor` in `com.intellij.spring.inspectionsRegistryContributor` extension point. Add additional inspections (e.g. for custom namespace) to Spring Validator (*Settings|Compiler|Validation*) via `com.intellij.spring.SpringInspectionsRegistry$Contributor`
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spring.inspectionsRegistryContributor"/></include>.
#### Add Additional Files to Spring Validator #### Add Additional Files to Spring Validator
_Version 14.1_ _Version 14.1_
@ -195,5 +196,5 @@ Custom `@ConditionalOn...` annotations implementing `com.intellij.spring.boot.mo
`com.intellij.spring.boot.initializr.SpringInitializrModuleBuilderPostTask` allows performing custom setup steps after creation of module (e.g. setup integration with build system). `com.intellij.spring.boot.initializr.SpringInitializrModuleBuilderPostTask` allows performing custom setup steps after creation of module (e.g. setup integration with build system).
### Endpoint Tab ### Endpoint Tab
Use `com.intellij.spring.boot.run.endpoint` extension point to add custom actuator endpoint tabs. Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spring.boot.run.endpoint"/></include> to add custom actuator endpoint tabs.
Any settings should be exposed in "Spring Boot" settings tab via `com.intellij.spring.boot.run.endpointTabConfigurable` EP. Any settings should be exposed in "Spring Boot" settings tab via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spring.boot.run.endpointTabConfigurable"/></include>.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# PHP Type Providers # PHP Type Providers
@ -9,7 +9,8 @@ specific PSI elements.
For example, `com.jetbrains.php.lang.psi.resolve.types.PhpArrayAccessTP` is responsible for inferring the types of expressions like `$arr[10]`. For example, `com.jetbrains.php.lang.psi.resolve.types.PhpArrayAccessTP` is responsible for inferring the types of expressions like `$arr[10]`.
There are dozens of such providers, and they all work one after another to provide type information when needed. There are dozens of such providers, and they all work one after another to provide type information when needed.
All providers inherit from `com.jetbrains.php.lang.psi.resolve.types.PhpTypeProvider4`, which is registered in the `com.jetbrains.php.typeProvider4` extension point. All providers inherit from `com.jetbrains.php.lang.psi.resolve.types.PhpTypeProvider4`, which is registered in
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.php.typeProvider4"/></include>.
## Types in PhpStorm ## Types in PhpStorm
@ -297,7 +298,7 @@ public class PhpUnitFiledInitializedInSetUpMethodsTP implements PhpTypeProvider4
### Register the `PhpUnitFiledInitializedInSetUpMethodsTP` ### Register the `PhpUnitFiledInitializedInSetUpMethodsTP`
The `PhpUnitFiledInitializedInSetUpMethodsTP` implementation is registered with the IntelliJ Platform in the The `PhpUnitFiledInitializedInSetUpMethodsTP` implementation is registered with the IntelliJ Platform in the
plugin configuration file using the `com.jetbrains.php.typeProvider4` extension point. plugin configuration file using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.php.typeProvider4"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.jetbrains"> <extensions defaultExtensionNs="com.jetbrains">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# Additional Minor Features # Additional Minor Features
@ -35,7 +35,7 @@ See also [](#recognizing-complex-multi-block-expressions).
If the brace matching is "too heavy" and should not be executed in [EDT](threading_model.md), implement If the brace matching is "too heavy" and should not be executed in [EDT](threading_model.md), implement
[`HeavyBraceHighlighter`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HeavyBraceHighlighter.java) [`HeavyBraceHighlighter`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HeavyBraceHighlighter.java)
and register in `com.intellij.heavyBracesHighlighter` extension point. and register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.heavyBracesHighlighter"/></include>.
### Quote Handling ### Quote Handling
@ -102,7 +102,7 @@ Can be [](indexing_and_psi_stubs.md#DumbAwareAPI) (2024.3+).
EP: `com.intellij.indexPatternSearch` EP: `com.intellij.indexPatternSearch`
Additional places can be provided via [`IndexPatternSearch`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/search/searches/IndexPatternSearch.java) registered in `com.intellij.indexPatternSearch` extension point. Additional places can be provided via [<include from="snippets.topic" element-id="ep"><var name="ep" value="IndexPatternSearch`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/search/searches/IndexPatternSearch.java) registered in `com.intellij.indexPatternSearch"/></include>.
### Context Info ### Context Info
@ -220,7 +220,7 @@ which shows how the project name is added to the editor tab for Gradle files.
EP: `com.intellij.problemHighlightFilter`, `com.intellij.problemFileHighlightFilter` EP: `com.intellij.problemHighlightFilter`, `com.intellij.problemFileHighlightFilter`
[`ProblemHighlightFilter`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/daemon/ProblemHighlightFilter.java) and [`ProblemHighlightFilter`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/daemon/ProblemHighlightFilter.java) and
the `com.intellij.problemFileHighlightFilter` EP (which implements the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.problemFileHighlightFilter"/></include> (which implements
[`Condition<VirtualFile>`](%gh-ic%/platform/util/src/com/intellij/openapi/util/Condition.java)) [`Condition<VirtualFile>`](%gh-ic%/platform/util/src/com/intellij/openapi/util/Condition.java))
are used to filter out files that should not be error-highlighted because they are, e.g., outside are used to filter out files that should not be error-highlighted because they are, e.g., outside
the current project scope. the current project scope.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Code Completion # Code Completion
@ -38,7 +38,7 @@ To provide completion variants by a `PsiSymbolReference` implement
### Contributor-Based Completion ### Contributor-Based Completion
Implementing the [`CompletionContributor`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionContributor.java) interface gives you the greatest control over the operation of code completion for your language. Implementing the [`CompletionContributor`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionContributor.java) interface gives you the greatest control over the operation of code completion for your language.
Register in `com.intellij.completion.contributor` extension point and specify `language` attribute (unless it works on any supported language). Register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.completion.contributor"/></include> and specify `language` attribute (unless it works on any supported language).
> Note that the Javadoc of that class contains a detailed FAQ for implementing code completion. > Note that the Javadoc of that class contains a detailed FAQ for implementing code completion.
> >

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Code Formatter # Code Formatter
@ -41,7 +41,7 @@ On the other hand, spacing elements should never be covered by blocks unless the
To format a file or a file fragment, the following steps are required: To format a file or a file fragment, the following steps are required:
* Implement [`FormattingModelBuilder`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/FormattingModelBuilder.java) * Implement [`FormattingModelBuilder`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/FormattingModelBuilder.java)
and register it as `com.intellij.lang.formatter` extension point in the <path>plugin.xml</path>. and register it as <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.formatter"/></include> in the <path>plugin.xml</path>.
* The main purpose of the formatting model builder is its `createModel()` method that must provide a * The main purpose of the formatting model builder is its `createModel()` method that must provide a
[`FormattingModel`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/FormattingModel.java) necessary for the framework to format the document. [`FormattingModel`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/FormattingModel.java) necessary for the framework to format the document.
As an argument, it receives a [`FormattingContext`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/FormattingContext.java) which As an argument, it receives a [`FormattingContext`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/FormattingContext.java) which
@ -202,7 +202,8 @@ Allows executing additional processing before the actual formatting is performed
For example, it can be used to adjust the formatting range or modify the code by adding, removing, or converting elements like braces, semicolons, quotes, etc. For example, it can be used to adjust the formatting range or modify the code by adding, removing, or converting elements like braces, semicolons, quotes, etc.
All the introduced changes will be handled by the main formatting step. All the introduced changes will be handled by the main formatting step.
To register a formatting pre-processor, a plugin has to provide an implementation of [`PreFormatProcessor`](%gh-ic%/platform/code-style-api/src/com/intellij/psi/impl/source/codeStyle/PreFormatProcessor.java) and register it in the `com.intellij.preFormatProcessor` extension point. To register a formatting pre-processor, a plugin has to provide an implementation of [`PreFormatProcessor`](%gh-ic%/platform/code-style-api/src/com/intellij/psi/impl/source/codeStyle/PreFormatProcessor.java)
and register it in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.preFormatProcessor"/></include>.
**Example:** **Example:**
[`JsonTrailingCommaRemover`](%gh-ic%/json/split/src/com/intellij/json/formatter/JsonTrailingCommaRemover.java) removing trailing commas in JSON files [`JsonTrailingCommaRemover`](%gh-ic%/json/split/src/com/intellij/json/formatter/JsonTrailingCommaRemover.java) removing trailing commas in JSON files
@ -212,7 +213,8 @@ To register a formatting pre-processor, a plugin has to provide an implementatio
It is similar to the pre-processor but is run after the actual formatting is performed. It is similar to the pre-processor but is run after the actual formatting is performed.
It can be used for adding, removing, or converting elements like braces, semicolons, quotes, changing letter-cases, etc. It can be used for adding, removing, or converting elements like braces, semicolons, quotes, changing letter-cases, etc.
To register a formatting post-processor, a plugin has to provide an implementation of [`PostFormatProcessor`](%gh-ic%/platform/code-style-api/src/com/intellij/psi/impl/source/codeStyle/PostFormatProcessor.java) and register it in the `com.intellij.postFormatProcessor` extension point. To register a formatting post-processor, a plugin has to provide an implementation of [`PostFormatProcessor`](%gh-ic%/platform/code-style-api/src/com/intellij/psi/impl/source/codeStyle/PostFormatProcessor.java)
and register it in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.postFormatProcessor"/></include>.
**Example:** **Example:**
[`TrailingCommaPostFormatProcessor`](%gh-ic%/plugins/kotlin/code-insight/impl-base/src/org/jetbrains/kotlin/idea/formatter/TrailingCommaPostFormatProcessor.kt) inserting trailing commas in Kotlin files [`TrailingCommaPostFormatProcessor`](%gh-ic%/plugins/kotlin/code-insight/impl-base/src/org/jetbrains/kotlin/idea/formatter/TrailingCommaPostFormatProcessor.kt) inserting trailing commas in Kotlin files
@ -227,7 +229,7 @@ See [`Rearranger`](%gh-ic%/platform/code-style-api/src/com/intellij/psi/codeStyl
To set the default indent size for a plugin's language and allow user configuration of tab and indent sizes, To set the default indent size for a plugin's language and allow user configuration of tab and indent sizes,
implement the [`FileTypeIndentOptionsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/psi/codeStyle/FileTypeIndentOptionsProvider.java) implement the [`FileTypeIndentOptionsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/psi/codeStyle/FileTypeIndentOptionsProvider.java)
interface and register it at the `com.intellij.fileTypeIndentOptionsProvider` extension point. interface and register it at the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileTypeIndentOptionsProvider"/></include>.
The return value of `createIndentOptions()` sets the default indent size. The return value of `createIndentOptions()` sets the default indent size.

View File

@ -41,12 +41,13 @@ If none of that is required and the analysis only needs to run in the active edi
<primary-label ref="2023.3"/> <primary-label ref="2023.3"/>
A [custom language plugin](custom_language_support.md) providing many inspections (>100) can register the default [`PsiElementVisitor`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiElementVisitor.java) A [custom language plugin](custom_language_support.md) providing many inspections (>100) can register the default [`PsiElementVisitor`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiElementVisitor.java)
for its language in `com.intellij.inspection.basicVisitor` extension point to optimize processing. for its language in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.inspection.basicVisitor"/></include> to optimize processing.
## Intentions ## Intentions
The code intentions for custom languages also use the standard API for intentions. The code intentions for custom languages also use the standard API for intentions.
The intention classes need to implement the [`IntentionAction`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/intention/IntentionAction.java) interface and are registered using the `com.intellij.intentionAction` extension point. The intention classes need to implement the [`IntentionAction`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/intention/IntentionAction.java) interface
and are registered using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.intentionAction"/></include>.
**Examples:** **Examples:**
- [Code Intentions Tutorial](code_intentions.md) - [Code Intentions Tutorial](code_intentions.md)

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Declarations and References # Declarations and References
<primary-label ref="2020.3"/> <primary-label ref="2020.3"/>
@ -24,7 +24,8 @@ Declarations in PSI elements are implementations of
To report a declaration in a PSI element, either: To report a declaration in a PSI element, either:
- implement and register - implement and register
[`PsiSymbolDeclarationProvider`](%gh-ic%/platform/core-api/src/com/intellij/model/psi/PsiSymbolDeclarationProvider.java) in `com.intellij.psi.declarationProvider` extension point [`PsiSymbolDeclarationProvider`](%gh-ic%/platform/core-api/src/com/intellij/model/psi/PsiSymbolDeclarationProvider.java)
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.psi.declarationProvider"/></include>
- implement `PsiSymbolDeclaration` directly in the `PsiElement`. - implement `PsiSymbolDeclaration` directly in the `PsiElement`.
## References ## References
@ -85,4 +86,4 @@ At the same time, it's possible:
To provide an Implicit reference, implement and register To provide an Implicit reference, implement and register
[`ImplicitReferenceProvider`](%gh-ic%/platform/core-api/src/com/intellij/model/psi/ImplicitReferenceProvider.java) [`ImplicitReferenceProvider`](%gh-ic%/platform/core-api/src/com/intellij/model/psi/ImplicitReferenceProvider.java)
in `com.intellij.psi.implicitReferenceProvider` extension point. in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.psi.implicitReferenceProvider"/></include>.

View File

@ -58,19 +58,19 @@ outlining the primary components and their interactions.
`DocumentationTargetProvider` `DocumentationTargetProvider`
: Implement : Implement
[`DocumentationTargetProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/platform/backend/documentation/DocumentationTargetProvider.java) [`DocumentationTargetProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/platform/backend/documentation/DocumentationTargetProvider.java)
and register it as `com.intellij.platform.backend.documentation.targetProvider` extension point to build documentation and register it as <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.platform.backend.documentation.targetProvider"/></include> to build documentation
for a certain offset in a `PsiFile` by overriding `documentationTargets()`. for a certain offset in a `PsiFile` by overriding `documentationTargets()`.
`PsiDocumentationTargetProvider` `PsiDocumentationTargetProvider`
: Implement : Implement
[`PsiDocumentationTargetProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/platform/backend/documentation/PsiDocumentationTargetProvider.java) [`PsiDocumentationTargetProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/platform/backend/documentation/PsiDocumentationTargetProvider.java)
and register it as `com.intellij.platform.backend.documentation.psiTargetProvider` extension point to build documentation and register it as <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.platform.backend.documentation.psiTargetProvider"/></include> to build documentation
for PSI elements by overriding `documentationTarget()`. for PSI elements by overriding `documentationTarget()`.
`SymbolDocumentationTargetProvider` `SymbolDocumentationTargetProvider`
: Implement : Implement
[`SymbolDocumentationTargetProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/platform/backend/documentation/SymbolDocumentationTargetProvider.java) [`SymbolDocumentationTargetProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/platform/backend/documentation/SymbolDocumentationTargetProvider.java)
and register it as `com.intellij.platform.backend.documentation.symbolTargetProvider` extension point to build documentation and register it as <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.platform.backend.documentation.symbolTargetProvider"/></include> to build documentation
for [](symbols.md) by overriding `documentationTarget()`. for [](symbols.md) by overriding `documentationTarget()`.
### `DocumentationTarget` ### `DocumentationTarget`
@ -115,7 +115,7 @@ Custom language developers usually extend from
[`AbstractDocumentationProvider`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/documentation/AbstractDocumentationProvider.java) [`AbstractDocumentationProvider`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/documentation/AbstractDocumentationProvider.java)
instead of implementing the instead of implementing the
[`DocumentationProvider`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/documentation/DocumentationProvider.java) interface. [`DocumentationProvider`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/documentation/DocumentationProvider.java) interface.
This implementation needs to be registered in `com.intellij.lang.documentationProvider` extension point. This implementation needs to be registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.documentationProvider"/></include>.
The main work is done in `generateDoc()`, which has two PSI element arguments: The main work is done in `generateDoc()`, which has two PSI element arguments:
the target element for which the documentation is requested and the original element under the cursor. the target element for which the documentation is requested and the original element under the cursor.
@ -143,7 +143,7 @@ In addition, several implementations of other languages exist in the IntelliJ Pl
Additionally, custom actions can be incorporated into documentation inlays and popups using the Additionally, custom actions can be incorporated into documentation inlays and popups using the
[`DocumentationActionProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationActionProvider.java). [`DocumentationActionProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationActionProvider.java).
This provider should be registered with the `com.intellij.documentationActionProvider` extension point. This provider should be registered with the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.documentationActionProvider"/></include>.
How the documentation for the target element is created is up to the custom language developer. How the documentation for the target element is created is up to the custom language developer.
A common choice is to extract and format documentation comments. A common choice is to extract and format documentation comments.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Find Usages # Find Usages
@ -12,7 +12,8 @@
The _Find Usages_ action is a multi-step process, and each step of the process requires involvement from the custom language plugin. The _Find Usages_ action is a multi-step process, and each step of the process requires involvement from the custom language plugin.
The language plugin participates in the Find Usages process by registering an implementation of [`FindUsagesProvider`](%gh-ic%/platform/indexing-api/src/com/intellij/lang/findUsages/FindUsagesProvider.java) in the `com.intellij.lang.findUsagesProvider` extension point, and through the PSI implementation using [`PsiNamedElement`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiNamedElement.java) and [`PsiReference`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiReference.java) interfaces. The language plugin participates in the Find Usages process by registering an implementation of [`FindUsagesProvider`](%gh-ic%/platform/indexing-api/src/com/intellij/lang/findUsages/FindUsagesProvider.java) in
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.findUsagesProvider"/></include>, and through the PSI implementation using [`PsiNamedElement`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiNamedElement.java) and [`PsiReference`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiReference.java) interfaces.
> In cases like function parameters and local variables, consider overriding [`PsiElement.getUseScope()`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiElement.java) to return a narrower scope. > In cases like function parameters and local variables, consider overriding [`PsiElement.getUseScope()`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiElement.java) to return a narrower scope.
> For instance, returning the scope of the nearest function definition can significantly reduce the number of files that need to be parsed and references that need to be resolved when renaming such elements. > For instance, returning the scope of the nearest function definition can significantly reduce the number of files that need to be parsed and references that need to be resolved when renaming such elements.
@ -35,7 +36,8 @@ The steps of the _Find Usages_ action are the following:
If the element was indexed as a comment or literal and the search in comments or literals is enabled, it checks if the word is equal to the searched element's name. If the element was indexed as a comment or literal and the search in comments or literals is enabled, it checks if the word is equal to the searched element's name.
* After the usages are collected, results are shown in the usages pane. * After the usages are collected, results are shown in the usages pane.
The text shown for each found element is taken from the [`FindUsagesProvider.getNodeText()`](%gh-ic%/platform/indexing-api/src/com/intellij/lang/findUsages/FindUsagesProvider.java) method. The text shown for each found element is taken from the [`FindUsagesProvider.getNodeText()`](%gh-ic%/platform/indexing-api/src/com/intellij/lang/findUsages/FindUsagesProvider.java) method.
To group results by type, implement [`UsageTypeProvider`](%gh-ic%/platform/usageView-impl/src/com/intellij/usages/impl/rules/UsageTypeProvider.java) and register in `com.intellij.usageTypeProvider` extension point to provide custom or predefined [`UsageType`](%gh-ic%/platform/usageView/src/com/intellij/usages/impl/rules/UsageType.java). To group results by type, implement [`UsageTypeProvider`](%gh-ic%/platform/usageView-impl/src/com/intellij/usages/impl/rules/UsageTypeProvider.java) and register
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.usageTypeProvider"/></include> to provide custom or predefined [`UsageType`](%gh-ic%/platform/usageView/src/com/intellij/usages/impl/rules/UsageType.java).
**Examples:** **Examples:**
- Implementation of [`FindUsagesProvider`](%gh-ic%/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java) in [Properties language plugin](%gh-ic%/plugins/properties) - Implementation of [`FindUsagesProvider`](%gh-ic%/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java) in [Properties language plugin](%gh-ic%/plugins/properties)

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Implementing Lexer # Implementing Lexer
@ -13,11 +13,11 @@ The IDE invokes the lexer in three main contexts, and the plugin can provide dif
* [Syntax highlighting](syntax_highlighting_and_error_highlighting.md#lexer): The lexer is returned from the implementation of the * [Syntax highlighting](syntax_highlighting_and_error_highlighting.md#lexer): The lexer is returned from the implementation of the
[`SyntaxHighlighterFactory`](%gh-ic%/platform/editor-ui-api/src/com/intellij/openapi/fileTypes/SyntaxHighlighterFactory.java) [`SyntaxHighlighterFactory`](%gh-ic%/platform/editor-ui-api/src/com/intellij/openapi/fileTypes/SyntaxHighlighterFactory.java)
interface which is registered in the `com.intellij.lang.syntaxHighlighterFactory` extension point. interface which is registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.syntaxHighlighterFactory"/></include>.
* [Building the syntax tree of a file](grammar_and_parser.md): the lexer is expected to be returned from * [Building the syntax tree of a file](grammar_and_parser.md): the lexer is expected to be returned from
[`ParserDefinition.createLexer()`](%gh-ic%/platform/core-api/src/com/intellij/lang/ParserDefinition.java) [`ParserDefinition.createLexer()`](%gh-ic%/platform/core-api/src/com/intellij/lang/ParserDefinition.java)
implementation registered in the `com.intellij.lang.parserDefinition` extension point. implementation registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.parserDefinition"/></include>.
* Building the index of the words contained in the file: * Building the index of the words contained in the file:
if the lexer-based words scanner implementation is used, the lexer is passed to the if the lexer-based words scanner implementation is used, the lexer is passed to the

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Inlay Hints # Inlay Hints
@ -41,7 +41,7 @@ It is not possible to provide advanced presentation and behavior of inlay parame
To provide inlay parameter hints, implement To provide inlay parameter hints, implement
[`InlayParameterHintsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/InlayParameterHintsProvider.java) [`InlayParameterHintsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/InlayParameterHintsProvider.java)
and register it in `com.intellij.codeInsight.parameterNameHints` extension point (EP). and register it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.parameterNameHints"/></include> (EP).
The API documentation of `InlayParameterHintsProvider` explains in detail the rationale behind all methods. The API documentation of `InlayParameterHintsProvider` explains in detail the rationale behind all methods.
**Examples:** **Examples:**
@ -50,7 +50,7 @@ The API documentation of `InlayParameterHintsProvider` explains in detail the ra
To suppress inlay parameter hints in specific places, implement To suppress inlay parameter hints in specific places, implement
[`ParameterNameHintsSuppressor`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/ParameterNameHintsSuppressor.kt) [`ParameterNameHintsSuppressor`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/ParameterNameHintsSuppressor.kt)
and register it in `com.intellij.codeInsight.parameterNameHintsSuppressor` EP. and register it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.parameterNameHintsSuppressor"/></include>.
### Declarative Inlay Hints Provider ### Declarative Inlay Hints Provider
<primary-label ref="2023.1"/> <primary-label ref="2023.1"/>
@ -60,7 +60,7 @@ Please note this API has limited presentation customization possibilities due to
To provide declarative inlay hints implement declarative To provide declarative inlay hints implement declarative
[`InlayHintsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/InlayHintsProvider.kt) [`InlayHintsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/InlayHintsProvider.kt)
and register it in `com.intellij.codeInsight.declarativeInlayProvider` EP. and register it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.declarativeInlayProvider"/></include>.
See the API documentation for the details. See the API documentation for the details.
**Examples:** **Examples:**
@ -69,10 +69,10 @@ See the API documentation for the details.
To provide a custom configuration UI, implement To provide a custom configuration UI, implement
[`InlayHintsCustomSettingsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/InlayHintsCustomSettingsProvider.kt) [`InlayHintsCustomSettingsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/declarative/InlayHintsCustomSettingsProvider.kt)
registered in `com.intellij.codeInsight.declarativeInlayProviderCustomSettingsProvider` extension point. registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.declarativeInlayProviderCustomSettingsProvider"/></include>.
Preview texts displayed for inlay hint providers under <ui-path>Settings | Editor | Inlay Hints</ui-path> must be located in plugin resources in <path>inlayProviders/\$provider_id\$</path> directory, for example, <path>inlayProviders/java.implicit.types</path>. Preview texts displayed for inlay hint providers under <ui-path>Settings | Editor | Inlay Hints</ui-path> must be located in plugin resources in <path>inlayProviders/\$provider_id\$</path> directory, for example, <path>inlayProviders/java.implicit.types</path>.
The <path>\$provider_id\$</path> value must match the `providerId` attribute of `com.intellij.codeInsight.declarativeInlayProvider` EP. The <path>\$provider_id\$</path> value must match the `providerId` attribute of <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.declarativeInlayProvider"/></include>.
The preview file name must be <path>preview.\$ext\$</path>, where <path>\$ext\$</path> is a default extension of a supported file type, for example, <path>preview.java</path>. The preview file name must be <path>preview.\$ext\$</path>, where <path>\$ext\$</path> is a default extension of a supported file type, for example, <path>preview.java</path>.
Hints displayed in the preview panel are defined with the dedicated markup: Hints displayed in the preview panel are defined with the dedicated markup:
@ -111,9 +111,12 @@ Code vision hints can be displayed over the element, or on the right, at the end
It is configurable by users in <ui-path>Settings | Editor | Inlay Hints | Code vision</ui-path> by choosing a value in <control>Default position for metrics</control> combo box, or by selecting <control>Position</control> in specific provider entries. It is configurable by users in <ui-path>Settings | Editor | Inlay Hints | Code vision</ui-path> by choosing a value in <control>Default position for metrics</control> combo box, or by selecting <control>Position</control> in specific provider entries.
There are three extension points for implementing a code vision provider: There are three extension points for implementing a code vision provider:
- [`DaemonBoundCodeVisionProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/hints/codeVision/DaemonBoundCodeVisionProvider.kt) registered in `com.intellij.codeInsight.daemonBoundCodeVisionProvider` EP - [`DaemonBoundCodeVisionProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/hints/codeVision/DaemonBoundCodeVisionProvider.kt) registered
- [`CodeVisionProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/codeVision/CodeVisionProvider.kt) registered in `com.intellij.codeInsight.codeVisionProvider` EP in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.daemonBoundCodeVisionProvider"/></include>
- [`CodeVisionGroupSettingProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/codeVision/settings/CodeVisionGroupSettingProvider.kt) registered in `com.intellij.config.codeVisionGroupSettingProvider` EP - [`CodeVisionProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/codeVision/CodeVisionProvider.kt) registered
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.codeVisionProvider"/></include>
- [`CodeVisionGroupSettingProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/codeVision/settings/CodeVisionGroupSettingProvider.kt) registered
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.config.codeVisionGroupSettingProvider"/></include>
`DaemonBoundCodeVisionProvider` API should be used in cases when code vision entries are related to PSI, so that calculated values are invalidated and recalculated on PSI changes. `DaemonBoundCodeVisionProvider` API should be used in cases when code vision entries are related to PSI, so that calculated values are invalidated and recalculated on PSI changes.
@ -150,7 +153,7 @@ See the API documentation for the details.
To provide inlay hints, implement To provide inlay hints, implement
[`InlayHintsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/InlayHintsProvider.kt) [`InlayHintsProvider`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hints/InlayHintsProvider.kt)
and register it in `com.intellij.codeInsight.inlayProvider` EP. and register it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.inlayProvider"/></include>.
See the API documentation for the details. See the API documentation for the details.
**Examples:** **Examples:**

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Language Injection # Language Injection
@ -48,9 +48,9 @@ As a plugin author, you can provide language injection in different ways:
* For simple cases, the bundled [IntelliLang plugin](https://plugins.jetbrains.com/plugin/13374-intellilang) can handle injections, * For simple cases, the bundled [IntelliLang plugin](https://plugins.jetbrains.com/plugin/13374-intellilang) can handle injections,
and plugin authors need to provide a configuration with patterns that specify the context where languages should be injected. and plugin authors need to provide a configuration with patterns that specify the context where languages should be injected.
IntelliLang can also be extended to support unknown custom languages. IntelliLang can also be extended to support unknown custom languages.
* Implementing the `com.intellij.languageInjectionContributor` extension point (EP) provides a high-level API for the injection of other languages. * Implementing the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageInjectionContributor"/></include> provides a high-level API for the injection of other languages.
For more control over how a language is injected, plugin authors use the `com.intellij.languageInjectionPerformer` EP. For more control over how a language is injected, plugin authors use the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageInjectionPerformer"/></include>.
* Implementing the `com.intellij.multiHostInjector` EP gives plugin authors the most control over where and how language injection will take place. * Implementing the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.multiHostInjector"/></include> gives plugin authors the most control over where and how language injection will take place.
In the following sections, we'll discuss these three options in more detail. In the following sections, we'll discuss these three options in more detail.
@ -83,7 +83,7 @@ On the plugin side, these entries are defined in the file [`javaInjections.xml`]
</injection> </injection>
``` ```
The XML file with the injection configurations is loaded through the `org.intellij.intelliLang.injectionConfig` EP in the file The XML file with the injection configurations is loaded through the <include from="snippets.topic" element-id="ep"><var name="ep" value="org.intellij.intelliLang.injectionConfig"/></include> in the file
[`intellilang-java-support.xml`](%gh-ic%/plugins/IntelliLang/resources/META-INF/intellilang-java-support.xml). [`intellilang-java-support.xml`](%gh-ic%/plugins/IntelliLang/resources/META-INF/intellilang-java-support.xml).
```xml ```xml
@ -98,12 +98,12 @@ The XML file with the injection configurations is loaded through the `org.intell
It is important to make a distinction between plugin authors who want to provide injections into existing languages and plugin authors who want to provide support for IntelliLang injections in their custom language. It is important to make a distinction between plugin authors who want to provide injections into existing languages and plugin authors who want to provide support for IntelliLang injections in their custom language.
Both define their injections by providing XML configurations and loading them through the <path>[plugin.xml](plugin_configuration_file.md)</path>. Both define their injections by providing XML configurations and loading them through the <path>[plugin.xml](plugin_configuration_file.md)</path>.
However, custom language authors need to implement the `org.intellij.intelliLang.languageSupport` EP to make their language and PSI element patterns known to IntelliLang. However, custom language authors need to implement the <include from="snippets.topic" element-id="ep"><var name="ep" value="org.intellij.intelliLang.languageSupport"/></include> to make their language and PSI element patterns known to IntelliLang.
Therefore, plugin authors who want to provide injections for existing languages can skip the first step. Therefore, plugin authors who want to provide injections for existing languages can skip the first step.
#### Implement `org.intellij.intelliLang.languageSupport` EP #### Implement `org.intellij.intelliLang.languageSupport` EP
Implement the `org.intellij.intelliLang.languageSupport` EP and use Implement the <include from="snippets.topic" element-id="ep"><var name="ep" value="org.intellij.intelliLang.languageSupport"/></include> and use
[`AbstractLanguageInjectionSupport`](%gh-ic%/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java) as a base class. [`AbstractLanguageInjectionSupport`](%gh-ic%/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/AbstractLanguageInjectionSupport.java) as a base class.
Please refer to the API docs of Please refer to the API docs of
[`LanguageInjectionSupport`](%gh-ic%/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/LanguageInjectionSupport.java) [`LanguageInjectionSupport`](%gh-ic%/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/LanguageInjectionSupport.java)
@ -145,7 +145,7 @@ Inside an injection, the following tags can be used:
#### Create an XML File to Load the Configuration #### Create an XML File to Load the Configuration
Create an XML file <path>myLanguageID-injections.xml</path> next to your <path>plugin.xml</path> that loads the above configuration. Create an XML file <path>myLanguageID-injections.xml</path> next to your <path>plugin.xml</path> that loads the above configuration.
Custom language authors also register their implementation of the `languageSupport` EP there. Custom language authors also register their implementation of the <include from="snippets.topic" element-id="ep"><var name="ep" value="languageSupport"/></include> there.
```xml ```xml
<idea-plugin> <idea-plugin>
@ -168,7 +168,7 @@ Therefore, you load the configuration optionally in your main <path>plugin.xml</
## `LanguageInjectionContributor` and `LanguageInjectionPerformer` ## `LanguageInjectionContributor` and `LanguageInjectionPerformer`
The `com.intellij.languageInjectionContributor` EP provides injection information for the given context in terms of _what_ to inject. The <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageInjectionContributor"/></include> provides injection information for the given context in terms of _what_ to inject.
As a plugin author, implement [`LanguageInjectionContributor`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionContributor.java) to provide context-specific injections. As a plugin author, implement [`LanguageInjectionContributor`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionContributor.java) to provide context-specific injections.
For instance, if you want to inject a YAML or JSON to a literal language depending on some conditions, you could implement this interface like this: For instance, if you want to inject a YAML or JSON to a literal language depending on some conditions, you could implement this interface like this:
@ -201,12 +201,12 @@ Register the implementation in your <path>plugin.xml</path>:
language="YourLanguage"/> language="YourLanguage"/>
``` ```
If you want more control over how the injection should be done then implement the `com.intellij.languageInjectionPerformer` EP which allows for complex language injections, e.g. for concatenation or interpolation of strings. If you want more control over how the injection should be done then implement the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageInjectionPerformer"/></include> which allows for complex language injections, e.g. for concatenation or interpolation of strings.
If it is not implemented, then the If it is not implemented, then the
[`DefaultLanguageInjectionPerformer`](%gh-ic%/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/DefaultLanguageInjectionPerformer.java) [`DefaultLanguageInjectionPerformer`](%gh-ic%/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/DefaultLanguageInjectionPerformer.java)
will be used. will be used.
For the `com.intellij.languageInjectionPerformer` EP, two methods need to be implemented in [`LanguageInjectionPerformer`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionPerformer.java). For the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageInjectionPerformer"/></include>, two methods need to be implemented in [`LanguageInjectionPerformer`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/general/LanguageInjectionPerformer.java).
First, `isPrimary()` determines if this is the default `LanguageInjectionPerformer` for the language and if it handles most of the injections. First, `isPrimary()` determines if this is the default `LanguageInjectionPerformer` for the language and if it handles most of the injections.
If there is no primary `LanguageInjectionPerformer` found, then a fallback injection will be performed. If there is no primary `LanguageInjectionPerformer` found, then a fallback injection will be performed.
@ -218,7 +218,7 @@ The method `performInjection()` does the actual injection into the context PSI e
## `MultiHostInjector` ## `MultiHostInjector`
[`MultiHostInjector`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/MultiHostInjector.java) registered in `com.intellij.multiHostInjector` EP is a very low-level API, but it gives plugin authors the most freedom. [`MultiHostInjector`](%gh-ic%/platform/core-api/src/com/intellij/lang/injection/MultiHostInjector.java) registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.multiHostInjector"/></include> is a very low-level API, but it gives plugin authors the most freedom.
It performs language injection inside other PSI elements, e.g. inject SQL inside an XML tag text or inject regular expressions into Java string literals. It performs language injection inside other PSI elements, e.g. inject SQL inside an XML tag text or inject regular expressions into Java string literals.
Plugin authors need to implement `getLanguagesToInject()` to provide a list of places to inject a language, and `elementsToInjectIn()` to return a list of elements to inject. Plugin authors need to implement `getLanguagesToInject()` to provide a list of places to inject a language, and `elementsToInjectIn()` to return a list of elements to inject.
@ -309,7 +309,8 @@ Now, inside the editor the injected portion will work as expected where foo is t
## Formatting ## Formatting
<primary-label ref="2022.3"/> <primary-label ref="2022.3"/>
To control delegation of formatting to containing file, implement [`InjectedFormattingOptionsProvider`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/InjectedFormattingOptionsProvider.java) and register in `com.intellij.formatting.injectedOptions` extension point. To control delegation of formatting to containing file, implement [`InjectedFormattingOptionsProvider`](%gh-ic%/platform/code-style-api/src/com/intellij/formatting/InjectedFormattingOptionsProvider.java) and
register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.formatting.injectedOptions"/></include>.
## Injection Highlighting ## Injection Highlighting

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Navigation Bar # Navigation Bar
@ -16,7 +16,7 @@ structure.
The starting point for the navigation bar extension is the The starting point for the navigation bar extension is the
[`NavBarModelExtension`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarModelExtension.java) [`NavBarModelExtension`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarModelExtension.java)
interface, which is registered in the `com.intellij.navbar` extension point. interface, which is registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.navbar"/></include>.
To reuse the IntelliJ Platform implementation, you can extend one of two classes: To reuse the IntelliJ Platform implementation, you can extend one of two classes:

View File

@ -17,7 +17,8 @@ Direct navigation is the navigation from `PsiElement` to another `PsiElement`,
such as navigation from `break` keyword to the end of a loop in Java, without showing any popups. such as navigation from `break` keyword to the end of a loop in Java, without showing any popups.
To provide `PsiElement` for direct navigation, implement and register To provide `PsiElement` for direct navigation, implement and register
[`DirectNavigationProvider`](%gh-ic%/platform/core-api/src/com/intellij/navigation/DirectNavigationProvider.java) in `com.intellij.lang.directNavigationProvider` EP. [`DirectNavigationProvider`](%gh-ic%/platform/core-api/src/com/intellij/navigation/DirectNavigationProvider.java)
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.directNavigationProvider"/></include>.
## Symbol Navigation ## Symbol Navigation
@ -34,7 +35,8 @@ instances (where to go and what to show in the popup).
To provide navigation targets by a `Symbol`, either: To provide navigation targets by a `Symbol`, either:
- implement and register - implement and register
[`SymbolNavigationProvider`](%gh-ic%/platform/core-api/src/com/intellij/navigation/SymbolNavigationProvider.java) in `com.intellij.symbolNavigation` EP; [`SymbolNavigationProvider`](%gh-ic%/platform/core-api/src/com/intellij/navigation/SymbolNavigationProvider.java)
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.symbolNavigation"/></include>;
- or implement - or implement
[`NavigatableSymbol`](%gh-ic%/platform/core-api/src/com/intellij/navigation/NavigatableSymbol.java) [`NavigatableSymbol`](%gh-ic%/platform/core-api/src/com/intellij/navigation/NavigatableSymbol.java)
in the `Symbol`. in the `Symbol`.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Parameter Info # Parameter Info
@ -12,7 +12,7 @@
Custom languages can use Custom languages can use
[`ParameterInfoHandler`](%gh-ic%/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoHandler.java) [`ParameterInfoHandler`](%gh-ic%/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoHandler.java)
registered in `com.intellij.codeInsight.parameterInfo` extension point (EP) to show information about parameters in method and function calls. registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.parameterInfo"/></include> to show information about parameters in method and function calls.
This is a convenient way to display type signatures directly as a popup in the editor without having to consult the documentation. This is a convenient way to display type signatures directly as a popup in the editor without having to consult the documentation.
If it is available, the IDE can show this popup automatically after a short delay, or it can be invoked explicitly via If it is available, the IDE can show this popup automatically after a short delay, or it can be invoked explicitly via
<ui-path>View | Parameter Info</ui-path>. <ui-path>View | Parameter Info</ui-path>.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# References and Resolve # References and Resolve
@ -10,7 +10,8 @@ Resolving references allows users to navigate from a PSI element usage (accessin
This feature is required to support the <ui-path>Navigate | Declaration or Usages</ui-path> action invoked by <shortcut>Ctrl/Cmd+B</shortcut> or clicking the mouse button while holding <shortcut>Ctrl/Cmd</shortcut> key, and it is a prerequisite for implementing [finding usages](find_usages.md), [rename refactoring](rename_refactoring.md), and [code completion](code_completion.md). This feature is required to support the <ui-path>Navigate | Declaration or Usages</ui-path> action invoked by <shortcut>Ctrl/Cmd+B</shortcut> or clicking the mouse button while holding <shortcut>Ctrl/Cmd</shortcut> key, and it is a prerequisite for implementing [finding usages](find_usages.md), [rename refactoring](rename_refactoring.md), and [code completion](code_completion.md).
The <ui-path>View | Quick Definition</ui-path> action is based on the same mechanism, so it becomes automatically available for all references that can be resolved by the language plugin. The <ui-path>View | Quick Definition</ui-path> action is based on the same mechanism, so it becomes automatically available for all references that can be resolved by the language plugin.
To customize the exact document range to show in the popup (e.g., include "surrounding" code or comments), provide [`ImplementationTextSelectioner`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hint/ImplementationTextSelectioner.java) registered in `com.intellij.lang.implementationTextSelectioner` extension point. To customize the exact document range to show in the popup (e.g., include "surrounding" code or comments), provide [`ImplementationTextSelectioner`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/hint/ImplementationTextSelectioner.java) registered
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.implementationTextSelectioner"/></include>.
## PSI References ## PSI References

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Registering a File Type # Registering a File Type
@ -21,7 +21,7 @@ A custom language file type is a class derived from [`LanguageFileType`](%gh-ic%
<tab title="2019.2+"> <tab title="2019.2+">
Use `com.intellij.fileType` extension point to register `LanguageFileType` implementation and instance via `implementationClass` and `fieldName` attributes. Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileType"/></include> to register `LanguageFileType` implementation and instance via `implementationClass` and `fieldName` attributes.
Also, `name` and `language` must be declared matching `FileType.getName()` and ID of language returned from `LanguageFileType.getLanguage()`, respectively. Also, `name` and `language` must be declared matching `FileType.getName()` and ID of language returned from `LanguageFileType.getLanguage()`, respectively.
To associate the file type in the IDE, specify one or more associations listed in the following table. To associate the file type in the IDE, specify one or more associations listed in the following table.
@ -41,7 +41,7 @@ To associate the file type in the IDE, specify one or more associations listed i
> >
{style="warning"} {style="warning"}
To register a file type, the plugin developer provides a subclass of [`FileTypeFactory`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/fileTypes/FileTypeFactory.java), which is registered via the `com.intellij.fileTypeFactory` extension point. To register a file type, the plugin developer provides a subclass of [<include from="snippets.topic" element-id="ep"><var name="ep" value="FileTypeFactory`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/fileTypes/FileTypeFactory.java), which is registered via the `com.intellij.fileTypeFactory"/></include>.
</tab> </tab>
</tabs> </tabs>

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Rename Refactoring # Rename Refactoring
@ -24,12 +24,13 @@ Thus, surprisingly, the easiest way to get the replacement node is to create a d
If a renamed reference extends [`PsiReferenceBase`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiReferenceBase.java), renaming is performed by invoking the [`ElementManipulator.handleContentChange()`](%gh-ic%/platform/core-api/src/com/intellij/psi/ElementManipulator.java), responsible for handling the content change and calculating the text range of reference inside the element. If a renamed reference extends [`PsiReferenceBase`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiReferenceBase.java), renaming is performed by invoking the [`ElementManipulator.handleContentChange()`](%gh-ic%/platform/core-api/src/com/intellij/psi/ElementManipulator.java), responsible for handling the content change and calculating the text range of reference inside the element.
To disable renaming for specific elements, implement `com.intellij.openapi.util.Condition<T>` for PsiElement of type `T` and register it in `com.intellij.vetoRenameCondition` extension point. To disable renaming for specific elements, implement `com.intellij.openapi.util.Condition<T>` for PsiElement of type `T` and register it
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.vetoRenameCondition"/></include>.
### Name Validation ### Name Validation
[`NamesValidator`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/refactoring/NamesValidator.java) allows a plugin to check if the name entered by the user in the `Rename` dialog is a valid identifier (and not a keyword) according to the custom language rules. [`NamesValidator`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/refactoring/NamesValidator.java) allows a plugin to check if the name entered by the user in the `Rename` dialog is a valid identifier (and not a keyword) according to the custom language rules.
If an implementation of this interface is not provided by the plugin, Java rules for validating identifiers are used. If an implementation of this interface is not provided by the plugin, Java rules for validating identifiers are used.
Implementations of `NamesValidator` are registered in the `com.intellij.lang.namesValidator` extension point. Implementations of `NamesValidator` are registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.namesValidator"/></include>.
**Example:** **Example:**
[`PropertiesNamesValidator`](%gh-ic%/plugins/properties/src/com/intellij/lang/properties/PropertiesNamesValidator.java) for [Properties language plugin](%gh-ic%/plugins/properties) [`PropertiesNamesValidator`](%gh-ic%/plugins/properties/src/com/intellij/lang/properties/PropertiesNamesValidator.java) for [Properties language plugin](%gh-ic%/plugins/properties)
@ -53,7 +54,7 @@ Note that `getErrorMessage()` only works if all `RenameInputValidator` accept th
**Example:** **Example:**
[`YamlKeyValueRenameInputValidator`](%gh-ic%/plugins/yaml/editing/src/org/jetbrains/yaml/refactoring/rename/YamlKeyValueRenameInputValidator.java) validating YAML language keys [`YamlKeyValueRenameInputValidator`](%gh-ic%/plugins/yaml/editing/src/org/jetbrains/yaml/refactoring/rename/YamlKeyValueRenameInputValidator.java) validating YAML language keys
Implementations of `RenameInputValidator` or `RenameInputValidatorEx` are registered in the `com.intellij.renameInputValidator` extension point. Implementations of `RenameInputValidator` or `RenameInputValidatorEx` are registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.renameInputValidator"/></include>.
### Custom Rename UI and Workflow ### Custom Rename UI and Workflow
Further customization of the Rename refactoring processing is possible on multiple levels. Further customization of the Rename refactoring processing is possible on multiple levels.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Safe Delete Refactoring # Safe Delete Refactoring
@ -16,7 +16,7 @@ In addition to that, to support _Safe Delete_, a plugin needs to implement two t
* The * The
[`RefactoringSupportProvider`](%gh-ic%/platform/refactoring/src/com/intellij/lang/refactoring/RefactoringSupportProvider.java) [`RefactoringSupportProvider`](%gh-ic%/platform/refactoring/src/com/intellij/lang/refactoring/RefactoringSupportProvider.java)
interface, registered in the `com.intellij.lang.refactoringSupport` extension point, and the `isSafeDeleteAvailable()` method, which checks if the _Safe Delete_ refactoring is available for a specific PSI element interface, registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.refactoringSupport"/></include>, and the `isSafeDeleteAvailable()` method, which checks if the _Safe Delete_ refactoring is available for a specific PSI element
* The * The
[`PsiElement.delete()`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiElement.java) [`PsiElement.delete()`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiElement.java)

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Spell Checking # Spell Checking
@ -13,7 +13,7 @@
Spell Checking is used to check the correctness of natural languages within code. Spell Checking is used to check the correctness of natural languages within code.
Language plugins can implement customized spell checking by implementing Language plugins can implement customized spell checking by implementing
[`SpellcheckingStrategy`](%gh-ic%/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java) [`SpellcheckingStrategy`](%gh-ic%/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java)
and registering it in the `com.intellij.spellchecker.support` extension point. and registering it in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spellchecker.support"/></include>.
**Examples:** **Examples:**
@ -97,7 +97,7 @@ Some custom languages may have a distinct fixed set of words or key identifiers.
These words can be provided in additional dictionaries from These words can be provided in additional dictionaries from
[BundledDictionaryProvider](%gh-ic%/spellchecker/src/com/intellij/spellchecker/BundledDictionaryProvider.java). [BundledDictionaryProvider](%gh-ic%/spellchecker/src/com/intellij/spellchecker/BundledDictionaryProvider.java).
Implement `getBundledDictionaries()` to return paths to the word dictionaries (<path>*.dic</path> files) and Implement `getBundledDictionaries()` to return paths to the word dictionaries (<path>*.dic</path> files) and
register it with the `com.intellij.spellchecker.bundledDictionaryProvider` extension point. register it with the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spellchecker.bundledDictionaryProvider"/></include>.
**Example:** **Example:**
[`PythonBundledDictionaryProvider`](%gh-ic%/python/src/com/jetbrains/python/spellchecker/PythonBundledDictionaryProvider.java) [`PythonBundledDictionaryProvider`](%gh-ic%/python/src/com/jetbrains/python/spellchecker/PythonBundledDictionaryProvider.java)
@ -106,7 +106,7 @@ register it with the `com.intellij.spellchecker.bundledDictionaryProvider` exten
[`RuntimeDictionaryProvider`](%gh-ic%/spellchecker/src/com/intellij/spellchecker/dictionary/RuntimeDictionaryProvider.java) [`RuntimeDictionaryProvider`](%gh-ic%/spellchecker/src/com/intellij/spellchecker/dictionary/RuntimeDictionaryProvider.java)
allows providing (dynamic) dictionaries generated at runtime, e.g., downloaded from a server, created from project sources on-the-fly, etc. allows providing (dynamic) dictionaries generated at runtime, e.g., downloaded from a server, created from project sources on-the-fly, etc.
Register in `com.intellij.spellchecker.dictionary.runtimeDictionaryProvider` extension point. Register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spellchecker.dictionary.runtimeDictionaryProvider"/></include>.
**Example:** **Example:**
[`PyPackagesDictionary`](%gh-ic%/python/src/com/jetbrains/python/packaging/PyPackagesDictionary.kt) [`PyPackagesDictionary`](%gh-ic%/python/src/com/jetbrains/python/packaging/PyPackagesDictionary.kt)
@ -124,13 +124,13 @@ To use the API mentioned below, add a [dependency](plugin_dependencies.md) on pl
To define how to extract natural language text from PSI, implement To define how to extract natural language text from PSI, implement
[`TextExtractor`](%gh-ic%/plugins/grazie/src/main/kotlin/com/intellij/grazie/text/TextExtractor.java) [`TextExtractor`](%gh-ic%/plugins/grazie/src/main/kotlin/com/intellij/grazie/text/TextExtractor.java)
and register in `com.intellij.grazie.textExtractor` extension point. and register in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.grazie.textExtractor"/></include>.
**Example:** [`JavaTextExtractor`](%gh-ic%/plugins/grazie/java/src/main/kotlin/com/intellij/grazie/ide/language/java/JavaTextExtractor.java) **Example:** [`JavaTextExtractor`](%gh-ic%/plugins/grazie/java/src/main/kotlin/com/intellij/grazie/ide/language/java/JavaTextExtractor.java)
### `ProblemFilter` ### `ProblemFilter`
To ignore specific reported problems, implement [`ProblemFilter`](%gh-ic%/plugins/grazie/src/main/kotlin/com/intellij/grazie/text/ProblemFilter.java) To ignore specific reported problems, implement [`ProblemFilter`](%gh-ic%/plugins/grazie/src/main/kotlin/com/intellij/grazie/text/ProblemFilter.java)
registered in `com.intellij.grazie.problemFilter` extension point. registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.grazie.problemFilter"/></include>.
**Example:** [`JavadocProblemFilter`](%gh-ic%/plugins/grazie/java/src/main/kotlin/com/intellij/grazie/ide/language/java/JavadocProblemFilter.java) **Example:** [`JavadocProblemFilter`](%gh-ic%/plugins/grazie/java/src/main/kotlin/com/intellij/grazie/ide/language/java/JavadocProblemFilter.java)

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Structure View # Structure View
@ -14,10 +14,12 @@ The Structure View implementation used for a specific file type can be customize
If a custom language plugin provides an implementation of the [`StructureView`](%gh-ic%/platform/editor-ui-api/src/com/intellij/ide/structureView/StructureView.java) interface, it can completely replace the standard structure view implementation with a custom user interface component. If a custom language plugin provides an implementation of the [`StructureView`](%gh-ic%/platform/editor-ui-api/src/com/intellij/ide/structureView/StructureView.java) interface, it can completely replace the standard structure view implementation with a custom user interface component.
However, for most languages, this is not necessary, and the standard `StructureView` implementation provided by IntelliJ Platform can be reused. However, for most languages, this is not necessary, and the standard `StructureView` implementation provided by IntelliJ Platform can be reused.
> To modify an existing Structure View (e.g., add/filter nodes of builtin language support), use [`StructureViewExtension`](%gh-ic%/platform/structure-view-impl/src/com/intellij/ide/structureView/StructureViewExtension.java) registered in `com.intellij.lang.structureViewExtension` extension point. > To modify an existing Structure View (e.g., add/filter nodes of builtin language support), use [`StructureViewExtension`](%gh-ic%/platform/structure-view-impl/src/com/intellij/ide/structureView/StructureViewExtension.java) registered
> in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.structureViewExtension"/></include>.
> >
The starting point for the structure view is the [`PsiStructureViewFactory`](%gh-ic%/platform/editor-ui-api/src/com/intellij/lang/PsiStructureViewFactory.java) interface, which is registered in the `com.intellij.lang.psiStructureViewFactory` extension point. The starting point for the structure view is the [`PsiStructureViewFactory`](%gh-ic%/platform/editor-ui-api/src/com/intellij/lang/PsiStructureViewFactory.java) interface, which is registered
in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.psiStructureViewFactory"/></include>.
**Examples:** **Examples:**
- [`PsiStructureViewFactory`](%gh-ic%/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesStructureViewBuilderFactory.java) for [Properties language plugin](%gh-ic%/plugins/properties) - [`PsiStructureViewFactory`](%gh-ic%/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesStructureViewBuilderFactory.java) for [Properties language plugin](%gh-ic%/plugins/properties)

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Surround With # Surround With
@ -10,7 +10,7 @@
</tldr> </tldr>
To support the _Surround With_ action, the plugin needs to register one or more implementations of the [`SurroundDescriptor`](%gh-ic%/platform/lang-api/src/com/intellij/lang/surroundWith/SurroundDescriptor.java) interface in the `com.intellij.lang.surroundDescriptor` extension point. To support the _Surround With_ action, the plugin needs to register one or more implementations of the [<include from="snippets.topic" element-id="ep"><var name="ep" value="SurroundDescriptor`](%gh-ic%/platform/lang-api/src/com/intellij/lang/surroundWith/SurroundDescriptor.java) interface in the `com.intellij.lang.surroundDescriptor"/></include>.
Each of the surround descriptors defines a possible type of code fragment that can be surrounded - for example, one surround descriptor can handle surrounding expressions, and another can handle statements. Each of the surround descriptors defines a possible type of code fragment that can be surrounded - for example, one surround descriptor can handle surrounding expressions, and another can handle statements.
Each surround descriptor, in turn, contains an array of [`Surrounder`](%gh-ic%/platform/lang-api/src/com/intellij/lang/surroundWith/Surrounder.java) objects, defining specific templates which can be used for surrounding the selected code fragment (for example, _Surround With if_, _Surround With for_, and so on). Each surround descriptor, in turn, contains an array of [`Surrounder`](%gh-ic%/platform/lang-api/src/com/intellij/lang/surroundWith/Surrounder.java) objects, defining specific templates which can be used for surrounding the selected code fragment (for example, _Surround With if_, _Surround With for_, and so on).

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Syntax and Error Highlighting # Syntax and Error Highlighting
@ -31,7 +31,8 @@ Highlighting from multiple `TextAttributesKey` items can be layered — for exam
## Color Settings ## Color Settings
The mapping of the `TextAttributesKey` to specific attributes used in an editor is defined by the [`EditorColorsScheme`](%gh-ic%/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsScheme.java) class. The mapping of the `TextAttributesKey` to specific attributes used in an editor is defined by the [`EditorColorsScheme`](%gh-ic%/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsScheme.java) class.
It can be configured by the user via <ui-path>Settings | Editor | Color Scheme</ui-path> by providing an implementation of [`ColorSettingPage`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/options/colors/ColorSettingsPage.java) registered in `com.intellij.colorSettingsPage` extension point. It can be configured by the user via <ui-path>Settings | Editor | Color Scheme</ui-path> by providing an implementation of [`ColorSettingPage`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/options/colors/ColorSettingsPage.java) registered
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.colorSettingsPage"/></include>.
To look up the external name for a setting in the IDE, use [UI Inspector](internal_ui_inspector.md#inspecting-settings). To look up the external name for a setting in the IDE, use [UI Inspector](internal_ui_inspector.md#inspecting-settings).
The <ui-path>File | Export | Files or Selection to HTML</ui-path> feature uses the same syntax highlighting mechanism as the editor. The <ui-path>File | Export | Files or Selection to HTML</ui-path> feature uses the same syntax highlighting mechanism as the editor.
@ -65,7 +66,8 @@ For highlighting lexer errors [`HighlighterColors.BAD_CHARACTER`](%gh-ic%/platfo
[Semantic highlighting](https://www.jetbrains.com/help/idea/configuring-colors-and-fonts.html#semantic-highlighting) provides an additional coloring layer to improve the visual distinction of several related items (e.g., method parameters, local variables). [Semantic highlighting](https://www.jetbrains.com/help/idea/configuring-colors-and-fonts.html#semantic-highlighting) provides an additional coloring layer to improve the visual distinction of several related items (e.g., method parameters, local variables).
Register [`RainbowVisitor`](%gh-ic%/platform/analysis-impl/src/com/intellij/codeInsight/daemon/RainbowVisitor.java) in `com.intellij.highlightVisitor` extension point. Register [`RainbowVisitor`](%gh-ic%/platform/analysis-impl/src/com/intellij/codeInsight/daemon/RainbowVisitor.java)
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.highlightVisitor"/></include>.
[](#color-settings) must implement [`RainbowColorSettingsPage`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/options/colors/RainbowColorSettingsPage.java) in addition. [](#color-settings) must implement [`RainbowColorSettingsPage`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/options/colors/RainbowColorSettingsPage.java) in addition.
## Parser ## Parser
@ -78,7 +80,7 @@ See [](syntax_errors.md) on how to programmatically suppress these errors in cer
## Annotator ## Annotator
The third level of highlighting is performed through the [`Annotator`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/annotation/Annotator.java) interface. The third level of highlighting is performed through the [`Annotator`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/annotation/Annotator.java) interface.
A plugin can register one or more annotators in the `com.intellij.annotator` extension point, and these annotators are called during the background highlighting pass to process the elements in the custom language's PSI tree. A plugin can register one or more annotators in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.annotator"/></include>, and these annotators are called during the background highlighting pass to process the elements in the custom language's PSI tree.
Attribute `language` should be set to the Language ID where this annotator applies to. Attribute `language` should be set to the Language ID where this annotator applies to.
If highlighting data requires invoking external tools, use [](#external-annotator) instead. If highlighting data requires invoking external tools, use [](#external-annotator) instead.
@ -151,12 +153,14 @@ Call `AnnotationHolder.createInfoAnnotation()` with an empty message and then [`
## External Annotator ## External Annotator
If the custom language employs external tools for validating files in the language (for example, using the Xerces library for XML schema validation), If the custom language employs external tools for validating files in the language (for example, using the Xerces library for XML schema validation),
it can provide an implementation of the [`ExternalAnnotator`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/annotation/ExternalAnnotator.java) interface and register it in `com.intellij.externalAnnotator` extension point (`language` attribute must be specified). it can provide an implementation of the [`ExternalAnnotator`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/annotation/ExternalAnnotator.java) interface and register
it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.externalAnnotator"/></include> (`language` attribute must be specified).
The `ExternalAnnotator` highlighting has the lowest priority and is invoked only after all other background processing has completed. The `ExternalAnnotator` highlighting has the lowest priority and is invoked only after all other background processing has completed.
It uses the same [`AnnotationHolder`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/annotation/AnnotationHolder.java) interface for converting the output of the external tool into editor highlighting. It uses the same [`AnnotationHolder`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/annotation/AnnotationHolder.java) interface for converting the output of the external tool into editor highlighting.
To skip running specific `ExternalAnnotator` for given file, register [`ExternalAnnotatorsFilter`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/ExternalAnnotatorsFilter.java) extension in `com.intellij.daemon.externalAnnotatorsFilter` extension point. To skip running specific `ExternalAnnotator` for given file, register [`ExternalAnnotatorsFilter`](%gh-ic%/platform/analysis-api/src/com/intellij/lang/ExternalAnnotatorsFilter.java) extension
in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.daemon.externalAnnotatorsFilter"/></include>.
To enable running `ExternalAnnotator` during indexing in [dumb mode](indexing_and_psi_stubs.md#dumb-mode), it can be marked [dumb aware](indexing_and_psi_stubs.md#DumbAwareAPI) (2023.3). To enable running `ExternalAnnotator` during indexing in [dumb mode](indexing_and_psi_stubs.md#dumb-mode), it can be marked [dumb aware](indexing_and_psi_stubs.md#DumbAwareAPI) (2023.3).

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Web Symbols Context # Web Symbols Context
<primary-label ref="2022.3"/> <primary-label ref="2022.3"/>
@ -37,7 +37,7 @@ which is enabled.
## `WebSymbolsContextProvider` ## `WebSymbolsContextProvider`
The most straightforward way to contribute context is to register a [`WebSymbolsContextProvider`](%gh-ic%/platform/webSymbols/src/com/intellij/webSymbols/context/WebSymbolsContextProvider.kt) The most straightforward way to contribute context is to register a [`WebSymbolsContextProvider`](%gh-ic%/platform/webSymbols/src/com/intellij/webSymbols/context/WebSymbolsContextProvider.kt)
through `com.intellij.webSymbols.context` extension point and override one of `isEnabled()` methods through <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.webSymbols.context"/></include> and override one of `isEnabled()` methods
to detect a context of a particular name and kind, e.g.: to detect a context of a particular name and kind, e.g.:
```xml ```xml
@ -226,7 +226,7 @@ for the dependency and the `enableByDefault` attribute set to `true`.
Context rules can also be provided dynamically through [`WebSymbolsContextRulesProvider`](%gh-ic%/platform/webSymbols/src/com/intellij/webSymbols/context/WebSymbolsContextRulesProvider.kt). Context rules can also be provided dynamically through [`WebSymbolsContextRulesProvider`](%gh-ic%/platform/webSymbols/src/com/intellij/webSymbols/context/WebSymbolsContextRulesProvider.kt).
To do that, register a [`WebSymbolsQueryConfigurator`](%gh-ic%/platform/webSymbols/src/com/intellij/webSymbols/query/WebSymbolsQueryConfigurator.kt) To do that, register a [`WebSymbolsQueryConfigurator`](%gh-ic%/platform/webSymbols/src/com/intellij/webSymbols/query/WebSymbolsQueryConfigurator.kt)
through `com.intellij.webSymbols.queryConfigurator` extension point and implement `getContextRulesProviders()`. through <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.webSymbols.queryConfigurator"/></include> and implement `getContextRulesProviders()`.
It is important that the results are stable, because any unexpected change in the rules will cause It is important that the results are stable, because any unexpected change in the rules will cause
rescanning of the project, dropping of all caches and restarting code analysis. rescanning of the project, dropping of all caches and restarting code analysis.
@ -270,7 +270,7 @@ When choosing between different patterns matching the same file name, the follow
`WebSymbolsContextSourceProximityProvider` allows providing evaluation logic for the context rules. It should be used when `WebSymbolsContextSourceProximityProvider` allows providing evaluation logic for the context rules. It should be used when
working on integrating support for a package manager or a language which has a way to define global libraries. The provider should be registered working on integrating support for a package manager or a language which has a way to define global libraries. The provider should be registered
through `com.intellij.webSymbols.contextSourceProximityProvider` extension point. through <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.webSymbols.contextSourceProximityProvider"/></include>.
The provider has a single method to be overridden — `calculateProximity()`. When `sourceKind` parameter matches the provider requirements, The provider has a single method to be overridden — `calculateProximity()`. When `sourceKind` parameter matches the provider requirements,
it should calculate the [proximity](#context-proximity) of each source provided by `sourceNames`. For instance, when supporting a package manager and it should calculate the [proximity](#context-proximity) of each source provided by `sourceNames`. For instance, when supporting a package manager and

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Web Types # Web Types
<primary-label ref="2022.3"/> <primary-label ref="2022.3"/>
@ -140,7 +140,7 @@ The property accepts a string or an array of strings with relative paths to Web
IDE Plugin IDE Plugin
: You can ship Web Types JSON with your IDE plugin. : You can ship Web Types JSON with your IDE plugin.
To point an IDE to its location, use `com.intellij.webSymbols.webTypes` extension point and pass the file location in `source` attribute value. To point an IDE to its location, use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.webSymbols.webTypes"/></include> and pass the file location in `source` attribute value.
With `enableByDefault` attribute, you can choose whether the Web Types file should be contributed to Web Symbols scope by default, With `enableByDefault` attribute, you can choose whether the Web Types file should be contributed to Web Symbols scope by default,
or only if an NPM package with the same name is present in the project. or only if an NPM package with the same name is present in the project.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# External Builder API and Plugins # External Builder API and Plugins
<primary-label ref="IntelliJIDEA"/> <primary-label ref="IntelliJIDEA"/>
@ -56,7 +56,7 @@ These files don't have extensions, so you need to map corresponding patterns to
Sources of a plugin for External Builder should be put in a separate module. Sources of a plugin for External Builder should be put in a separate module.
By convention, such a module has a name '...-jps-plugin', and its sources are placed under the <path>jps-plugin</path> directory in the main plugin directory. By convention, such a module has a name '...-jps-plugin', and its sources are placed under the <path>jps-plugin</path> directory in the main plugin directory.
Use `com.intellij.compileServer.plugin` extension point to add the plugin to the classpath of the external build process, the plugin JAR should be named <path>\$JPS_module_name\$.jar</path>. <ui-path>Build | Prepare Plugin Module for Deployment</ui-path> action will automatically pack the 'jps-plugin' part to a separate JAR accordingly. Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.compileServer.plugin"/></include> to add the plugin to the classpath of the external build process, the plugin JAR should be named <path>\$JPS_module_name\$.jar</path>. <ui-path>Build | Prepare Plugin Module for Deployment</ui-path> action will automatically pack the 'jps-plugin' part to a separate JAR accordingly.
See [IntelliJ Platform Explorer](https://jb.gg/ipe?extensions=com.intellij.compileServer.plugin) for samples. See [IntelliJ Platform Explorer](https://jb.gg/ipe?extensions=com.intellij.compileServer.plugin) for samples.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# XML DOM API # XML DOM API
@ -85,11 +85,8 @@ interface Bar extends com.intellij.util.xml.DomElement {
``` ```
Next, you should create a [`DomFileDescription`](%gh-ic%/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java) class, pass to its constructor the root tag name and root element interface. Next, you should create a [`DomFileDescription`](%gh-ic%/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java) class, pass to its constructor the root tag name and root element interface.
Register it in <path>[plugin.xml](plugin_configuration_file.md)</path> using `com.intellij.dom.fileMetaData` extension point and specify `rootTagName` and `domVersion`/`stubVersion` attributes. Register it in <path>[plugin.xml](plugin_configuration_file.md)</path>
using <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.dom.fileMetaData"/></include> and specify `rootTagName` and `domVersion`/`stubVersion` attributes.
> When targeting 2019.1 or earlier, use `com.intellij.dom.fileDescription` extension point instead.
>
{style="note"}
You can now get the file element from [`DomManager`](%gh-ic%/xml/dom-openapi/src/com/intellij/util/xml/DomManager.java). You can now get the file element from [`DomManager`](%gh-ic%/xml/dom-openapi/src/com/intellij/util/xml/DomManager.java).
To get the "239" value, you only have to write the following code: To get the "239" value, you only have to write the following code:
@ -369,7 +366,7 @@ The index parameter in the last example means the index in the merged collection
### Dynamic Definition ### Dynamic Definition
You can extend existing DOM model at runtime by implementing `com.intellij.util.xml.reflect.DomExtender<T>`. You can extend existing DOM model at runtime by implementing `com.intellij.util.xml.reflect.DomExtender<T>`.
Register it in "extenderClass" attribute of `com.intellij.dom.extender` extension point, where "domClass" specifies DOM class `<T>` to be extended. Register it in "extenderClass" attribute of <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.dom.extender"/></include>, where "domClass" specifies DOM class `<T>` to be extended.
[`DomExtensionsRegistrar`](%gh-ic%/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomExtensionsRegistrar.java) provides various methods to register dynamic attributes and children. [`DomExtensionsRegistrar`](%gh-ic%/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomExtensionsRegistrar.java) provides various methods to register dynamic attributes and children.
If the contributed elements depend on anything other than plain XML file content (used framework version, libraries in classpath, ...), make sure to return `false` from `DomExtender.supportsStubs()`. If the contributed elements depend on anything other than plain XML file content (used framework version, libraries in classpath, ...), make sure to return `false` from `DomExtender.supportsStubs()`.
@ -616,7 +613,7 @@ Add the desired methods to your interface, then create an abstract class impleme
Note that the class should have a constructor with no arguments. Note that the class should have a constructor with no arguments.
Now you only have to let DOM know that you wish to use this implementation every time you're creating a model element that should implement the necessary interface. Now you only have to let DOM know that you wish to use this implementation every time you're creating a model element that should implement the necessary interface.
Simply register it using `com.intellij.dom.implementation` extension point and DOM will generate at run-time the class that not only implements the needed interface, but also extends your abstract class. Register it using <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.dom.implementation"/></include> and DOM will generate at run-time the class that not only implements the needed interface, but also extends your abstract class.
### Models Across Multiple Files ### Models Across Multiple Files

View File

@ -211,7 +211,7 @@ This icon has a larger `AnimatedIcon.Big` version.
## Icon Tooltips ## Icon Tooltips
Register a resource bundle via `com.intellij.iconDescriptionBundle` extension point to provide tooltips automatically for all [`SimpleColoredComponent`](%gh-ic%/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java) renderers. Register a resource bundle via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.iconDescriptionBundle"/></include> to provide tooltips automatically for all [`SimpleColoredComponent`](%gh-ic%/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java) renderers.
Create `icon.<icon-path>.tooltip` key in a resource bundle, where `<icon-path>` is the icon path with leading slash and `.svg` removed and slashes replaced with dots (e.g., `/nodes/class.svg` &rarr; `icon.nodes.class.tooltip`). Create `icon.<icon-path>.tooltip` key in a resource bundle, where `<icon-path>` is the icon path with leading slash and `.svg` removed and slashes replaced with dots (e.g., `/nodes/class.svg` &rarr; `icon.nodes.class.tooltip`).
@ -228,7 +228,7 @@ This allows supporting both UI variants at the same time, depending on what the
1. Create a new <path>expui</path> directory in the icon root directory ([Reference](#organizing-icons)). 1. Create a new <path>expui</path> directory in the icon root directory ([Reference](#organizing-icons)).
2. Copy all icons for the New UI into this directory. 2. Copy all icons for the New UI into this directory.
3. Create an empty <path>\$PluginName\$IconMappings.json</path> mapping file in the resources directory. 3. Create an empty <path>\$PluginName\$IconMappings.json</path> mapping file in the resources directory.
4. Register <path>\$PluginName\$IconMappings.json</path> in <path>plugin.xml</path> via the `com.intellij.iconMapper` extension point. 4. Register <path>\$PluginName\$IconMappings.json</path> in <path>plugin.xml</path> via the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.iconMapper"/></include>.
</procedure> </procedure>

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Inspection Options # Inspection Options
@ -125,7 +125,7 @@ An example of such a case is the <ui-path>Java | Probable bugs | Nullability pro
Custom Swing controls can be provided by implementing Custom Swing controls can be provided by implementing
[`CustomComponentExtensionWithSwingRenderer`](%gh-ic%/platform/lang-api/src/com/intellij/codeInspection/ui/CustomComponentExtensionWithSwingRenderer.java) [`CustomComponentExtensionWithSwingRenderer`](%gh-ic%/platform/lang-api/src/com/intellij/codeInspection/ui/CustomComponentExtensionWithSwingRenderer.java)
and registering the implementation in the `com.intellij.inspectionCustomComponent` extension point. and registering the implementation in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.inspectionCustomComponent"/></include>.
Please note that this API is still in experimental state and may be changed without preserving backward compatibility. Please note that this API is still in experimental state and may be changed without preserving backward compatibility.
**Example:** **Example:**

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Providing Translations # Providing Translations
@ -25,7 +25,7 @@ Note that language packs aim for full IDE localization.
If it is required to translate a plugin, see the [](#bundled-translations) section. If it is required to translate a plugin, see the [](#bundled-translations) section.
Language packs must define their language. Language packs must define their language.
The language definition is provided in the [`plugin.xml`](plugin_configuration_file.md) file with `com.intellij.languageBundle` extension point (EP), for example: The language definition is provided in the [`plugin.xml`](plugin_configuration_file.md) file with <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageBundle"/></include>, for example:
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">
<languageBundle locale="zh-CN"/> <languageBundle locale="zh-CN"/>
@ -36,7 +36,7 @@ The `locale` attribute defines the translation language on two possible levels:
- region level, for example: `zh-CN` Chinese (Simplified), `zh-TW` Chinese (Taiwan) - region level, for example: `zh-CN` Chinese (Simplified), `zh-TW` Chinese (Taiwan)
- language level, for example, `ja` Japanese - language level, for example, `ja` Japanese
> Note that `com.intellij.languageBundle` EP is internal and must be used by JetBrains only. > Note that <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageBundle"/></include> is internal and must be used by JetBrains only.
> >
{style="warning"} {style="warning"}
@ -52,7 +52,7 @@ To select the IDE language, follow the instruction from the [IntelliJ IDEA Web H
<tab title="Pre-2024.2"> <tab title="Pre-2024.2">
In versions 2024.1 and older, there is no language selector in the IDE, and language packs serve as the IDE "language switcher." In versions 2024.1 and older, there is no language selector in the IDE, and language packs serve as the IDE "language switcher."
Installing a language pack changes the IDE language to the one defined by the `languageBundle` EP. Installing a language pack changes the IDE language to the one defined by the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.languageBundle"/></include>.
Only a single language pack can be installed at the same time, and restart is required for the translations to take effect. Only a single language pack can be installed at the same time, and restart is required for the translations to take effect.
</tab> </tab>

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Facet # Facet
@ -24,7 +24,8 @@ To create, search, and access the list of facets for a module, use [`FacetManage
### Facet-Based Tool Window ### Facet-Based Tool Window
A [tool window](tool_windows.md) dependent on the existence of given facet(s) can be registered via `com.intellij.facet.toolWindow` extension point. A [tool window](tool_windows.md) dependent on the existence of given facet(s) can be registered
via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.facet.toolWindow"/></include>.
## Facet Basics Sample ## Facet Basics Sample

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Library # Library
@ -136,6 +136,6 @@ More details on libraries can be found in the [plugin_model](%gh-sdk-samples-mas
## Predefined Libraries ## Predefined Libraries
[`AdditionalLibraryRootsProvider`](%gh-ic%/platform/projectModel-api/src/com/intellij/openapi/roots/AdditionalLibraryRootsProvider.java) registered in `com.intellij.additionalLibraryRootsProvider` extension point [`AdditionalLibraryRootsProvider`](%gh-ic%/platform/projectModel-api/src/com/intellij/openapi/roots/AdditionalLibraryRootsProvider.java) registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.additionalLibraryRootsProvider"/></include> allows
allows providing synthetic/predefined libraries ([`SyntheticLibrary`](%gh-ic%/platform/projectModel-api/src/com/intellij/openapi/roots/SyntheticLibrary.java)) in a project without exposing them in the model. providing synthetic/predefined libraries ([`SyntheticLibrary`](%gh-ic%/platform/projectModel-api/src/com/intellij/openapi/roots/SyntheticLibrary.java)) in a project without exposing them in the model.
By default, they're also hidden from UI. By default, they're also hidden from UI.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
<link-summary>Configuring and getting information about a project SDK.</link-summary> <link-summary>Configuring and getting information about a project SDK.</link-summary>
@ -62,7 +62,8 @@ See the [project_model](%gh-sdk-samples-master%/project_model/src/main/java/org/
### Working with a Custom SDK ### Working with a Custom SDK
To create a custom SDK, provide a class extending [`SdkType`](%gh-ic%/platform/lang-core/src/com/intellij/openapi/projectRoots/SdkType.java), leave `saveAdditionalData()` blank, and register it in the `com.intellij.sdkType` extension point. To create a custom SDK, provide a class extending [`SdkType`](%gh-ic%/platform/lang-core/src/com/intellij/openapi/projectRoots/SdkType.java), leave `saveAdditionalData()` blank, and register it
in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.sdkType"/></include>.
To make SDK settings persistent, override `setupSdkPaths()` and save settings by `modificator.commitChanges()`: To make SDK settings persistent, override `setupSdkPaths()` and save settings by `modificator.commitChanges()`:
@ -86,7 +87,9 @@ The recommended way of managing "SDK" settings is to create a [`CustomStepProjec
## Assisting in Setting Up an SDK ## Assisting in Setting Up an SDK
Prompting the user with a notification to set up an SDK can help them get up-and-running with a plugin faster. Prompting the user with a notification to set up an SDK can help them get up-and-running with a plugin faster.
Use `com.intellij.projectSdkSetupValidator` extension point to register an implementation of [`ProjectSdkSetupValidator`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/daemon/ProjectSdkSetupValidator.java) to notify the user if they are missing an SDK. Use <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.projectSdkSetupValidator"/></include> to register
an implementation of [`ProjectSdkSetupValidator`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/daemon/ProjectSdkSetupValidator.java)
to notify the user if they are missing an SDK.
The following is a simplified example that checks whether an instance of "DemoSdk" has been configured in the project when the user opens a "DemoFileType": The following is a simplified example that checks whether an instance of "DemoSdk" has been configured in the project when the user opens a "DemoFileType":
@ -122,6 +125,7 @@ Within `DemoProjectSdkSetupValidator`:
* `getFixHandler()` returns an `EditorNotificationPanel.ActionHandler` that enables the user to execute a quick fix to resolve the validation issue. * `getFixHandler()` returns an `EditorNotificationPanel.ActionHandler` that enables the user to execute a quick fix to resolve the validation issue.
> `ProjectSdkSetupValidator` will not work in IntelliJ Platform-based IDEs such as PyCharm. > `ProjectSdkSetupValidator` will not work in IntelliJ Platform-based IDEs such as PyCharm.
> In such cases, you should register an implementation of [`EditorNotificationProvider`](%gh-ic%/platform/platform-api/src/com/intellij/ui/EditorNotificationProvider.java) at the `com.intellij.editorNotificationProvider` extension point and override the `createNotificationPanel()` method with the conditionality and panel setup you want. > In such cases, you should register an implementation of [`EditorNotificationProvider`](%gh-ic%/platform/platform-api/src/com/intellij/ui/EditorNotificationProvider.java)
> via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.editorNotificationProvider"/></include> and override the `createNotificationPanel()` method with the conditionality and panel setup you want.
> >
{style="warning"} {style="warning"}

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# Settings Guide # Settings Guide
@ -40,7 +40,7 @@ See [Implementations for Settings Extension Points](#implementations-for-setting
### Declaring Application Settings ### Declaring Application Settings
The application-level settings are declared using `com.intellij.applicationConfigurable` EP. The application-level settings are declared using <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.applicationConfigurable"/></include>.
An example `<applicationConfigurable>` EP declaration is shown below. An example `<applicationConfigurable>` EP declaration is shown below.
The declaration indicates the settings are a child of the `tools` settings group, the implementation FQN is `com.example.ApplicationSettingsConfigurable`, the unique ID is the same as the implementation fully qualified name (FQN), and the (non-localized) title displayed to users is "My Application Settings". The declaration indicates the settings are a child of the `tools` settings group, the implementation FQN is `com.example.ApplicationSettingsConfigurable`, the unique ID is the same as the implementation fully qualified name (FQN), and the (non-localized) title displayed to users is "My Application Settings".
@ -61,7 +61,7 @@ See [](#settings-declaration-attributes) for more information.
### Declaring Project Settings ### Declaring Project Settings
The project-level settings are declared using `com.intellij.projectConfigurable` EP. The project-level settings are declared using <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.projectConfigurable"/></include>.
An example `<projectConfigurable>` EP declaration is shown below. An example `<projectConfigurable>` EP declaration is shown below.
Similar to the application setting example above, but it includes the additional attribute `nonDefaultProject` indicating these settings do not apply to the [default project](https://www.jetbrains.com/help/idea/configure-project-settings.html#new-default-settings). Similar to the application setting example above, but it includes the additional attribute `nonDefaultProject` indicating these settings do not apply to the [default project](https://www.jetbrains.com/help/idea/configure-project-settings.html#new-default-settings).
@ -85,7 +85,7 @@ This section provides some additional clarification of those comments.
#### Table of Attributes #### Table of Attributes
The attributes supported by `com.intellij.applicationConfigurable` EP and `com.intellij.projectConfigurable` EP are in the table below: The attributes supported by <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.applicationConfigurable"/></include> and <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.projectConfigurable"/></include> are in the table below:
| Attribute | Required | <p>Attribute</p><p>Value</p> | <p>Implementation</p><p>Basis</p> | | Attribute | Required | <p>Attribute</p><p>Value</p> | <p>Implementation</p><p>Basis</p> |
|---------------------|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------| |---------------------|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------|
@ -128,7 +128,7 @@ See the [previous section](#table-of-attributes) for all supported attributes.
## Implementations for Settings Extension Points ## Implementations for Settings Extension Points
Implementations for `com.intellij.projectConfigurable` EP and `com.intellij.applicationConfigurable` EP can have one of two bases: Implementations for <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.applicationConfigurable"/></include> and <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.projectConfigurable"/></include> can have one of two bases:
* The [`Configurable`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/options/Configurable.java) interface, which provides a named configurable component with a Swing form. * The [`Configurable`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/options/Configurable.java) interface, which provides a named configurable component with a Swing form.
Most Settings providers are based on the `Configurable` interface or one of its sub- or supertypes. Most Settings providers are based on the `Configurable` interface or one of its sub- or supertypes.
* The [`ConfigurableProvider`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/options/ConfigurableProvider.java) class, which can hide a configurable component from the Settings dialog based on runtime conditions. * The [`ConfigurableProvider`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/options/ConfigurableProvider.java) class, which can hide a configurable component from the Settings dialog based on runtime conditions.
@ -183,7 +183,8 @@ Implementations based on `Configurable` can implement marker interfaces, which p
There are classes in the IntelliJ Platform specialized in particular types of Settings. There are classes in the IntelliJ Platform specialized in particular types of Settings.
These subtypes are based on `com.intellij.openapi.options.ConfigurableEP`. These subtypes are based on `com.intellij.openapi.options.ConfigurableEP`.
For example, <ui-path>Settings | Editor | General | Appearance</ui-path> allows adding Settings via [`EditorSmartKeysConfigurableEP`](%gh-ic%/platform/lang-impl/src/com/intellij/application/options/editor/EditorSmartKeysConfigurableEP.java) registered in `com.intellij.editorSmartKeysConfigurable` EP. For example, <ui-path>Settings | Editor | General | Appearance</ui-path> allows adding Settings via [`EditorSmartKeysConfigurableEP`](%gh-ic%/platform/lang-impl/src/com/intellij/application/options/editor/EditorSmartKeysConfigurableEP.java)
registered in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.editorSmartKeysConfigurable"/></include>.
#### Examples #### Examples

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Text Selection # Text Selection
@ -6,7 +6,8 @@
## Extending/Shrinking Text Selection ## Extending/Shrinking Text Selection
Implementing [`ExtendWordSelectionHandler`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/editorActions/ExtendWordSelectionHandler.java) and registering it in `com.intellij.extendWordSelectionHandler` EP in your <path>[plugin.xml](plugin_configuration_file.md)</path> allows you to provide additional text ranges to be used when extending or shrinking a selection. Implementing [`ExtendWordSelectionHandler`](%gh-ic%/platform/lang-api/src/com/intellij/codeInsight/editorActions/ExtendWordSelectionHandler.java) and registering
it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.extendWordSelectionHandler"/></include> in your <path>[plugin.xml](plugin_configuration_file.md)</path> allows you to provide additional text ranges to be used when extending or shrinking a selection.
Return `true` from `canSelect(PsiElement)` for the PSI elements that you want to provide additional text-ranges for. Return `true` from `canSelect(PsiElement)` for the PSI elements that you want to provide additional text-ranges for.
The IntelliJ Platform will call `select(PsiElement, CharSequence, int, Editor)` for these elements where you can compute additional text ranges and return them as `List<TextRange>`. The IntelliJ Platform will call `select(PsiElement, CharSequence, int, Editor)` for these elements where you can compute additional text ranges and return them as `List<TextRange>`.
@ -37,7 +38,7 @@ If the cursor is located at argument `a`, extending the selection would first se
However, you might want to select the list of all arguments as an intermediate step. However, you might want to select the list of all arguments as an intermediate step.
This can be achieved by implementing this EP in the following way: This can be achieved by implementing this EP in the following way:
1. Create a class that implements the `ExtendWordSelectionHandler` interface and register it in a `com.intellij.extendWordSelectionHandler` EP in your <path>plugin.xml</path>. 1. Create a class that implements the `ExtendWordSelectionHandler` interface and register it in a <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.extendWordSelectionHandler"/></include> in your <path>plugin.xml</path>.
2. The `canSelect(PsiElement)` method should return `true` for the function call node. 2. The `canSelect(PsiElement)` method should return `true` for the function call node.
That indicates that `select(PsiElement, CharSequence, int, Editor)` will be called for the function-call node. That indicates that `select(PsiElement, CharSequence, int, Editor)` will be called for the function-call node.
3. When the `select()` method is called, you can use the function call PSI element or the editor text to extract the text range that spans the arguments `a` and `b` and return it as `List<TextRange>` with one element. 3. When the `select()` method is called, you can use the function call PSI element or the editor text to extract the text range that spans the arguments `a` and `b` and return it as `List<TextRange>` with one element.
@ -47,7 +48,7 @@ This can be achieved by implementing this EP in the following way:
Looking at other implementations can be an effective way to get a better understanding of how this EP works. Looking at other implementations can be an effective way to get a better understanding of how this EP works.
To get further insight into this EP, you may want to take a look at [`DocTagSelectioner`](%gh-ic%/java/java-frontback-impl/src/com/intellij/codeInsight/editorActions/wordSelection/DocTagSelectioner.java). To get further insight into this EP, you may want to take a look at [`DocTagSelectioner`](%gh-ic%/java/java-frontback-impl/src/com/intellij/codeInsight/editorActions/wordSelection/DocTagSelectioner.java).
It provides the ability to select tag names like `@param` in Javadoc comments. It provides the ability to select tag names like `@param` in Javadoc comments.
Additionally, the [IntelliJ Platform Explorer](https://jb.gg/ipe?extensions=com.intellij.extendWordSelectionHandler) provides a list of open-source plugins with implementations of the `com.intellij.extendWordSelectionHandler` EP. Additionally, the [IntelliJ Platform Explorer](https://jb.gg/ipe?extensions=com.intellij.extendWordSelectionHandler) provides a list of open-source plugins with implementations of the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.extendWordSelectionHandler"/></include>.
There are also some important places in the IntelliJ Platform to add breakpoints during debugging. There are also some important places in the IntelliJ Platform to add breakpoints during debugging.
When _Extend Selection_ is called by the user, it is handled by [`SelectWordHandler`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java). When _Extend Selection_ is called by the user, it is handled by [`SelectWordHandler`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java).

View File

@ -1,10 +1,10 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Exposing Theme Metadata # Exposing Theme Metadata
<link-summary>Exposing plugin's UI components' customization keys allowing theme developers to change your components look.</link-summary> <link-summary>Exposing plugin's UI components' customization keys allowing theme developers to change your components look.</link-summary>
All available UI Customization Keys that can be used in [Custom Themes](themes_customize.md) must be defined in a dedicated <path>*.themeMetadata.json</path> file which is registered via `com.intellij.themeMetadataProvider` extension point. All available UI Customization Keys that can be used in [Custom Themes](themes_customize.md) must be defined in a dedicated <path>*.themeMetadata.json</path> file which is registered via <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.themeMetadataProvider"/></include>`com.intellij.themeMetadataProvider`.
The following minimal sample demonstrates all details required when exposing UI customization keys of your plugin's UI. The following minimal sample demonstrates all details required when exposing UI customization keys of your plugin's UI.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Version Control Systems # Version Control Systems
@ -86,7 +86,7 @@ This section describes the different components which comprise a VCS integration
### `AbstractVcs` ### `AbstractVcs`
This is the main entry point for a VCS plugin, which is used by the IntelliJ Platform to retrieve all other services provided by the plugin. This is the main entry point for a VCS plugin, which is used by the IntelliJ Platform to retrieve all other services provided by the plugin.
Register `AbstractVcs` implementation in `com.intellij.vcs` extension point in <path>[plugin.xml](plugin_configuration_file.md)</path>, as shown in the following example: Register `AbstractVcs` implementation in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.vcs"/></include> in <path>[plugin.xml](plugin_configuration_file.md)</path>, as shown in the following example:
```xml ```xml
<idea-plugin> <idea-plugin>

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# Documentation # Documentation
@ -16,7 +16,7 @@ Plugin authors implement
to show documentation for particular [PSI elements](psi_elements.md). to show documentation for particular [PSI elements](psi_elements.md).
Implementations of `DocumentationProvider` can be registered either at the `com.intellij.documentationProvider` or the Implementations of `DocumentationProvider` can be registered either at the `com.intellij.documentationProvider` or the
`com.intellij.lang.documentationProvider` extension point (EP). <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.documentationProvider"/></include> (EP).
It is recommended to use the latter one when creating documentation that targets a specific language because providers registered It is recommended to use the latter one when creating documentation that targets a specific language because providers registered
as `com.intellij.lang.documentationProvider` will only be called for elements from that language. as `com.intellij.lang.documentationProvider` will only be called for elements from that language.
This is the reason they require the `language` attribute when registering the EP in the <path>[plugin.xml](plugin_configuration_file.md)</path>. This is the reason they require the `language` attribute when registering the EP in the <path>[plugin.xml](plugin_configuration_file.md)</path>.

View File

@ -46,12 +46,12 @@ The details of the `comparing_string_references_inspection` implementation illus
### Plugin Configuration File ### Plugin Configuration File
The `comparing_string_references_inspection` is described as a `com.intellij.localInspection` extension point in the `comparing_string_references_inspection` plugin configuration ([`plugin.xml`](%gh-sdk-samples-master%/comparing_string_references_inspection/src/main/resources/META-INF/plugin.xml)) file. The `comparing_string_references_inspection` is described as a <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.localInspection"/></include> in the `comparing_string_references_inspection` plugin configuration ([`plugin.xml`](%gh-sdk-samples-master%/comparing_string_references_inspection/src/main/resources/META-INF/plugin.xml)) file.
There exist two types of inspection extensions: There exist two types of inspection extensions:
* The `com.intellij.localInspection` extension point is used for inspections that operate on one file at a time, and also operate "on-the-fly" as the user edits the file. * The <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.localInspection"/></include> is used for inspections that operate on one file at a time, and also operate "on-the-fly" as the user edits the file.
* The `com.intellij.globalInspection` extension point is used for inspections that operate across multiple files, and the associated fix might, for example, refactor code between files. * The <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.globalInspection"/></include> is used for inspections that operate across multiple files, and the associated fix might, for example, refactor code between files.
The minimum inspection setup must declare the `implementationClass` and `language` attribute (unless the inspection works on any supported language). The minimum inspection setup must declare the `implementationClass` and `language` attribute (unless the inspection works on any supported language).
As shown in the `comparing_string_references_inspection` plugin configuration file, other attributes can be defined in the `localInspection` element, either with or without localization. As shown in the `comparing_string_references_inspection` plugin configuration file, other attributes can be defined in the `localInspection` element, either with or without localization.

View File

@ -1,6 +1,6 @@
# Controlling Highlighting # Controlling Highlighting
<!-- Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
<link-summary>Suppressing highlighting in the editor programmatically.</link-summary> <link-summary>Suppressing highlighting in the editor programmatically.</link-summary>
@ -27,7 +27,8 @@ For example, the old version of a file could be created in a different project c
If the old file version used the library that is not used by the project currently, it would cause reporting false-positive code issues. If the old file version used the library that is not used by the project currently, it would cause reporting false-positive code issues.
The IntelliJ Platform exposes the extension point allowing a plugin to decide which highlighting information will be visible in the editor. The IntelliJ Platform exposes the extension point allowing a plugin to decide which highlighting information will be visible in the editor.
To do that, a plugin has to provide an implementation of [`HighlightInfoFilter`](%gh-ic%/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfoFilter.java) and register it in the `com.intellij.daemon.highlightInfoFilter` extension point. To do that, a plugin has to provide an implementation of [`HighlightInfoFilter`](%gh-ic%/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfoFilter.java) and register it
in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.daemon.highlightInfoFilter"/></include>.
It contains a single method `accept()`, which should return `true` if a given `HighlightInfo` should be visible in the editor and `false` to ignore it. It contains a single method `accept()`, which should return `true` if a given `HighlightInfo` should be visible in the editor and `false` to ignore it.
**Examples:** **Examples:**

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 7. Annotator # 7. Annotator
@ -73,7 +73,7 @@ Annotate the `simple:key` literal expression, and differentiate between a well-f
## Register the Annotator ## Register the Annotator
Using the `com.intellij.annotator` extension point in the plugin configuration file, register the Simple Language annotator class for `JAVA` language: Using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.annotator"/></include> in the plugin configuration file, register the Simple Language annotator class for `JAVA` language:
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 17. Code Style Settings # 17. Code Style Settings
@ -42,7 +42,8 @@ for Simple Language by subclassing [`CodeStyleSettingsProvider`](%gh-ic%/platfor
## Register the Code Style Settings Provider ## Register the Code Style Settings Provider
The `SimpleCodeStyleSettingsProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.codeStyleSettingsProvider` extension point. The `SimpleCodeStyleSettingsProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file
using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeStyleSettingsProvider"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">
@ -61,7 +62,7 @@ Define [`SimpleLanguageCodeStyleSettingsProvider`](%gh-sdk-samples-master%/simpl
## Register the Language Code Style Settings Provider ## Register the Language Code Style Settings Provider
The `SimpleLanguageCodeStyleSettingsProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.langCodeStyleSettingsProvider` extension point. The <include from="snippets.topic" element-id="ep"><var name="ep" value="SimpleLanguageCodeStyleSettingsProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.langCodeStyleSettingsProvider"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 18. Commenter # 18. Commenter
@ -29,7 +29,7 @@ The [`SimpleCommenter`](%gh-sdk-samples-master%/simple_language_plugin/src/main/
## Register the Commenter ## Register the Commenter
The `SimpleCommenter` implementation is registered in the plugin configuration file using the `com.intellij.lang.commenter` extension point. The `SimpleCommenter` implementation is registered in the plugin configuration file using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.commenter"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 9. Completion Contributor # 9. Completion Contributor
@ -29,7 +29,7 @@ This rudimentary completion contributor always adds "Hello" to the completion va
## Register the Completion Contributor ## Register the Completion Contributor
The `SimpleCompletionContributor` implementation is registered in the plugin configuration file using the `com.intellij.completion.contributor` extension point and specifying `language="Simple"`. The <include from="snippets.topic" element-id="ep"><var name="ep" value="SimpleCompletionContributor` implementation is registered in the plugin configuration file using the `com.intellij.completion.contributor"/></include> and specifying `language="Simple"`.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 11. Find Usages Provider # 11. Find Usages Provider
@ -31,7 +31,8 @@ See the comments in `FindUsagesProvider` for more information.
## Register the Find Usages Provider ## Register the Find Usages Provider
The `SimpleFindUsagesProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.lang.findUsagesProvider` extension point. The `SimpleFindUsagesProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.findUsagesProvider"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 12. Folding Builder # 12. Folding Builder
@ -42,7 +42,8 @@ The IntelliJ Platform uses the value to substitute for the key when the code get
## Register the Folding Builder ## Register the Folding Builder
The `SimpleFoldingBuilder` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.lang.foldingBuilder` extension point. The `SimpleFoldingBuilder` implementation is registered with the IntelliJ Platform in the plugin configuration file using
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.foldingBuilder"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 16. Formatter # 16. Formatter
@ -55,7 +55,7 @@ Create [`SimpleFormattingModelBuilder`](%gh-sdk-samples-master%/simple_language_
## Register the Formatter ## Register the Formatter
The `SimpleFormattingModelBuilder` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.lang.formatter` extension point. The <include from="snippets.topic" element-id="ep"><var name="ep" value="SimpleFormattingModelBuilder` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.lang.formatter"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 13. Go To Symbol Contributor # 13. Go To Symbol Contributor
@ -28,7 +28,8 @@ Add the following method to [`SimplePsiImplUtil`](%gh-sdk-samples-master%/simple
``` ```
{src="simple_language_plugin/src/main/java/org/intellij/sdk/language/psi/impl/SimplePsiImplUtil.java" include-symbol="getPresentation"} {src="simple_language_plugin/src/main/java/org/intellij/sdk/language/psi/impl/SimplePsiImplUtil.java" include-symbol="getPresentation"}
In addition, to provide an icon for the displayed items, extend [`IconProvider`](%gh-ic%/platform/core-api/src/com/intellij/ide/IconProvider.java) and register it in `com.intellij.iconProvider` extension point. See [`SimplePropertyIconProvider`](%gh-sdk-samples-master%/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimplePropertyIconProvider.java): In addition, to provide an icon for the displayed items, extend [`IconProvider`](%gh-ic%/platform/core-api/src/com/intellij/ide/IconProvider.java) and register
it in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.iconProvider"/></include>. See [`SimplePropertyIconProvider`](%gh-sdk-samples-master%/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimplePropertyIconProvider.java):
```java ```java
``` ```
@ -59,7 +60,8 @@ to create [`SimpleChooseByNameContributor`](%gh-sdk-samples-master%/simple_langu
## Register the Go To Symbol Contributor ## Register the Go To Symbol Contributor
The `SimpleChooseByNameContributor` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.gotoSymbolContributor` extension point. The `SimpleChooseByNameContributor` implementation is registered with the IntelliJ Platform in the plugin configuration file
using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.gotoSymbolContributor"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -54,7 +54,7 @@ The [`SimpleFileType`](%gh-sdk-samples-master%/simple_language_plugin/src/main/j
## Register the File Type ## Register the File Type
The Simple Language file type is registered via the `com.intellij.fileType` extension point in <path>[plugin.xml](plugin_configuration_file.md)</path> and registered with <path>*.simple</path> extension: The Simple Language file type is registered via the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileType"/></include> in <path>[plugin.xml](plugin_configuration_file.md)</path> and registered with <path>*.simple</path> extension:
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 4. Lexer and Parser Definition # 4. Lexer and Parser Definition
@ -84,7 +84,7 @@ To avoid unnecessary classloading when initializing the extension point implemen
## Register the Parser Definition ## Register the Parser Definition
Registering the parser definition in the <path>[plugin.xml](plugin_configuration_file.md)</path> file makes it available to the IntelliJ Platform. Registering the parser definition in the <path>[plugin.xml](plugin_configuration_file.md)</path> file makes it available to the IntelliJ Platform.
Use the `com.intellij.lang.parserDefinition` extension point for registration. Use the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.parserDefinition"/></include> for registration.
For example, see <path>simple_language_plugin/src/main/resources/META-INF/plugin.xml</path>. For example, see <path>simple_language_plugin/src/main/resources/META-INF/plugin.xml</path>.
```xml ```xml

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 8. Line Marker Provider # 8. Line Marker Provider
@ -84,7 +84,8 @@ final class MyCorrectLineMarkerProvider implements LineMarkerProvider {
## Register the Line Marker Provider ## Register the Line Marker Provider
The `SimpleLineMarkerProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.codeInsight.lineMarkerProvider` extension point. The `SimpleLineMarkerProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.lineMarkerProvider"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 10. Reference Contributor # 10. Reference Contributor
@ -141,7 +141,8 @@ Contribute a reference to each usage of a property:
## Register the Reference Contributor ## Register the Reference Contributor
The `SimpleReferenceContributor` implementation is registered using the `com.intellij.psi.referenceContributor` extension point and specifying `language="JAVA"`. The `SimpleReferenceContributor` implementation is registered using
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.psi.referenceContributor"/></include> and specifying `language="JAVA"`.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">
@ -175,7 +176,8 @@ As long as an element is a `SimpleProperty` it is allowed to be refactored:
## Register the Refactoring Support Provider ## Register the Refactoring Support Provider
The `SimpleRefactoringSupportProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.lang.refactoringSupport` extension point. The `SimpleRefactoringSupportProvider` implementation is registered with the IntelliJ Platform in the plugin configuration file
using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.refactoringSupport"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 21. Spell Checking # 21. Spell Checking
@ -28,7 +28,7 @@ The [`SimpleSpellcheckingStrategy`](%gh-sdk-samples-master%/simple_language_plug
## Register the SimpleSpellcheckingStrategy ## Register the SimpleSpellcheckingStrategy
The implementation is registered with the IntelliJ Platform in the plugin The implementation is registered with the IntelliJ Platform in the plugin
configuration file using the `com.intellij.spellchecker.support` extension point. configuration file using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.spellchecker.support"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 15. Structure Aware Navigation Bar # 15. Structure Aware Navigation Bar
@ -31,7 +31,7 @@ The [`SimpleStructureAwareNavbar`](%gh-sdk-samples-master%/simple_language_plugi
## Register the Structure-Aware Navbar ## Register the Structure-Aware Navbar
The `SimpleStructureAwareNavbar` implementation is registered with the IntelliJ Platform in the plugin The `SimpleStructureAwareNavbar` implementation is registered with the IntelliJ Platform in the plugin
configuration file using the `com.intellij.navbar` extension point. configuration file using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.navbar"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# 14. Structure View Factory # 14. Structure View Factory
@ -52,7 +52,8 @@ The `SortableTreeElement` represents an item in a smart tree that allows using t
## Register the Structure View Factory ## Register the Structure View Factory
The `SimpleStructureViewFactory` implementation is registered with the IntelliJ Platform in the plugin configuration file using the `com.intellij.lang.psiStructureViewFactory` extension point. The `SimpleStructureViewFactory` implementation is registered with the IntelliJ Platform in the plugin configuration file using
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.structureViewExtension"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
# 5. Syntax Highlighter and Color Settings Page # 5. Syntax Highlighter and Color Settings Page
@ -41,7 +41,7 @@ subclasses [`SyntaxHighlighterFactory`](%gh-ic%/platform/editor-ui-api/src/com/i
### Register the Syntax Highlighter Factory ### Register the Syntax Highlighter Factory
Register the factory with the IntelliJ Platform in the plugin configuration file using the `com.intellij.lang.syntaxHighlighterFactory` extension point. Register the factory with the IntelliJ Platform in the plugin configuration file using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.lang.syntaxHighlighterFactory"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">
@ -82,7 +82,7 @@ AttributesDescriptor[] DESCRIPTORS = new AttributesDescriptor[] {
### Register the Color Settings Page ### Register the Color Settings Page
Register the Simple Language color settings page with the IntelliJ Platform in the plugin configuration file using the `com.intellij.colorSettingsPage` extension point. Register the Simple Language color settings page with the IntelliJ Platform in the plugin configuration file using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.colorSettingsPage"/></include>.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Providing File and Code Templates # Providing File and Code Templates
@ -56,12 +56,12 @@ It includes templates located in the <path>fileTemplates/internal</path> directo
#### Other #### Other
The <control>Other</control> category contains other templates organized in groups. The <control>Other</control> category contains other templates organized in groups.
It includes templates located in the <path>fileTemplates/j2ee</path> directory and registered via the `com.intellij.fileTemplateGroup` extension point (EP). It includes templates located in the <path>fileTemplates/j2ee</path> directory and registered via the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileTemplateGroup"/></include>.
Note that the <path>j2ee</path> directory name is historical and unrelated to the J2EE technology. Note that the <path>j2ee</path> directory name is historical and unrelated to the J2EE technology.
This category is intended for templates that are not used for creating core language entities or are used less frequently by users, e.g., a specific XML configuration file, a framework-specific class in Java language, etc. This category is intended for templates that are not used for creating core language entities or are used less frequently by users, e.g., a specific XML configuration file, a framework-specific class in Java language, etc.
To include file templates in the <control>Other</control> section of the <ui-path>Settings | Editor | File and Code Templates</ui-path> settings page, provide an implementation of the To include file templates in the <control>Other</control> section of the <ui-path>Settings | Editor | File and Code Templates</ui-path> settings page, provide an implementation of the
[`FileTemplateGroupDescriptorFactory`](%gh-ic%/platform/lang-api/src/com/intellij/ide/fileTemplates/FileTemplateGroupDescriptorFactory.java) [`FileTemplateGroupDescriptorFactory`](%gh-ic%/platform/lang-api/src/com/intellij/ide/fileTemplates/FileTemplateGroupDescriptorFactory.java)
and register it via the `com.intellij.fileTemplateGroup` EP. and register it via the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileTemplateGroup"/></include>.
**Example:** **Example:**
[`MavenFileTemplateGroupFactory`](%gh-ic%/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenFileTemplateGroupFactory.java) [`MavenFileTemplateGroupFactory`](%gh-ic%/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenFileTemplateGroupFactory.java)
@ -99,7 +99,7 @@ A file template body can use a set of [predefined properties](https://www.jetbra
Some languages or frameworks may require additional properties exposed to existing templates. Some languages or frameworks may require additional properties exposed to existing templates.
To provide custom properties, implement To provide custom properties, implement
[`DefaultTemplatePropertiesProvider`](%gh-ic%/platform/lang-api/src/com/intellij/ide/fileTemplates/DefaultTemplatePropertiesProvider.java) [`DefaultTemplatePropertiesProvider`](%gh-ic%/platform/lang-api/src/com/intellij/ide/fileTemplates/DefaultTemplatePropertiesProvider.java)
and register it via the `com.intellij.defaultTemplatePropertiesProvider` EP. and register it via the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.defaultTemplatePropertiesProvider"/></include>.
**Example:** Java Plugin's **Example:** Java Plugin's
[`TemplatePackagePropertyProvider`](%gh-ic%/java/java-impl/src/com/intellij/ide/fileTemplates/TemplatePackagePropertyProvider.java) [`TemplatePackagePropertyProvider`](%gh-ic%/java/java-impl/src/com/intellij/ide/fileTemplates/TemplatePackagePropertyProvider.java)

View File

@ -31,7 +31,7 @@ File templates assigned to the <control>[Files](providing_file_templates.md#file
Sometimes, creating a file from a given template in a specific project place doesn't make sense, or a template requires some additional properties for its content. Sometimes, creating a file from a given template in a specific project place doesn't make sense, or a template requires some additional properties for its content.
It is possible to control a file template's visibility and its available properties using It is possible to control a file template's visibility and its available properties using
[`CreateFromTemplateHandler`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/fileTemplates/CreateFromTemplateHandler.java) [`CreateFromTemplateHandler`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/fileTemplates/CreateFromTemplateHandler.java)
implementation registered in the `com.intellij.createFromTemplateHandler` EP. implementation registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.createFromTemplateHandler"/></include>.
**Example:** **Example:**
[`JavaCreateFromTemplateHandler`](%gh-ic%/java/java-impl/src/com/intellij/ide/fileTemplates/JavaCreateFromTemplateHandler.java) [`JavaCreateFromTemplateHandler`](%gh-ic%/java/java-impl/src/com/intellij/ide/fileTemplates/JavaCreateFromTemplateHandler.java)
@ -110,7 +110,7 @@ protected void buildDialog(Project project, PsiDirectory directory,
``` ```
As file templates are placed in the <path>fileTemplates/internal</path> directory, they are not listed in the <ui-path>Settings | Editor | File and Code Templates</ui-path> settings page, and users can't adjust them to their needs. As file templates are placed in the <path>fileTemplates/internal</path> directory, they are not listed in the <ui-path>Settings | Editor | File and Code Templates</ui-path> settings page, and users can't adjust them to their needs.
Internal templates can be exposed in the <control>Files</control> category by additionally registering them via the `com.intellij.internalFileTemplate` EP, e.g.: Internal templates can be exposed in the <control>Files</control> category by additionally registering them via the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.internalFileTemplate"/></include>, e.g.:
```xml ```xml
<internalFileTemplate name="My Record"/> <internalFileTemplate name="My Record"/>
@ -126,7 +126,7 @@ Adjusting created templates manually by replacing dynamic parts with properties
It is possible to speed up this process by replacing known elements like package or class names with template properties placeholder. It is possible to speed up this process by replacing known elements like package or class names with template properties placeholder.
It can be achieved by implementing the It can be achieved by implementing the
[`SaveFileAsTemplateHandler`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/actions/SaveFileAsTemplateHandler.java) [`SaveFileAsTemplateHandler`](%gh-ic%/platform/lang-impl/src/com/intellij/ide/actions/SaveFileAsTemplateHandler.java)
and registering it via the `com.intellij.saveFileAsTemplateHandler` EP. and registering it via the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.saveFileAsTemplateHandler"/></include>.
**Example:** **Example:**
[`SaveJavaAsTemplateHandler`](%gh-ic%/java/java-impl/src/com/intellij/ide/fileTemplates/SaveJavaAsTemplateHandler.java) replacing existing class and package names with `${NAME}` and `${PACKAGE_NAME}` properties placeholders respectively. [`SaveJavaAsTemplateHandler`](%gh-ic%/java/java-impl/src/com/intellij/ide/fileTemplates/SaveJavaAsTemplateHandler.java) replacing existing class and package names with `${NAME}` and `${PACKAGE_NAME}` properties placeholders respectively.

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Creating New Functions for Live Templates # Creating New Functions for Live Templates
@ -55,7 +55,7 @@ The argument to the `titleCase` function is `SELECTION`, which tells the Intelli
## Register Extension Point ## Register Extension Point
Using the `com.intellij.liveTemplateMacro` extension point, register the implementation with the IntelliJ Platform. Using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.liveTemplateMacro"/></include>, register the implementation with the IntelliJ Platform.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Providing Live Templates # Providing Live Templates
@ -104,9 +104,9 @@ Depending on the version of the IntelliJ Platform, different steps are used to c
<tab title="2022.3 and later"> <tab title="2022.3 and later">
Using the `com.intellij.defaultLiveTemplates` and `com.intellij.liveTemplateContext` extension points, register the implementations with the IntelliJ Platform. Using the `com.intellij.defaultLiveTemplates` and `com.intellij.liveTemplateContext` extension points, register the implementations with the IntelliJ Platform.
The `file` attribute in `com.intellij.defaultLiveTemplates` EP specifies `path/filename` under the <path>src/main/resources</path> folder. The `file` attribute in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.defaultLiveTemplates"/></include> specifies `path/filename` under the <path>src/main/resources</path> folder.
Specify required `contextId` attribute in `com.intellij.liveTemplateContext` EP instead of [`TemplateContextType`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/template/TemplateContextType.java) constructor (existing declarations will continue working). Specify required `contextId` attribute in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.liveTemplateContext"/></include> instead of [`TemplateContextType`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/template/TemplateContextType.java) constructor (existing declarations will continue working).
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">
@ -122,7 +122,7 @@ Specify required `contextId` attribute in `com.intellij.liveTemplateContext` EP
<tab title="Versions since 2020.1 till 2022.3"> <tab title="Versions since 2020.1 till 2022.3">
Using the `com.intellij.defaultLiveTemplates` and `com.intellij.liveTemplateContext` extension points, register the implementations with the IntelliJ Platform. Using the `com.intellij.defaultLiveTemplates` and `com.intellij.liveTemplateContext` extension points, register the implementations with the IntelliJ Platform.
The `file` attribute in the `com.intellij.defaultLiveTemplates` EP specifies `path/filename` under the <path>src/main/resources</path> folder. The `file` attribute in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.defaultLiveTemplates"/></include> specifies `path/filename` under the <path>src/main/resources</path> folder.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Postfix Templates # Postfix Templates
@ -8,7 +8,7 @@ The IntelliJ Platform allows plugins to provide custom postfix templates specifi
To provide custom postfix templates for an existing or custom language, register an implementation of To provide custom postfix templates for an existing or custom language, register an implementation of
[`PostfixTemplateProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/template/postfix/templates/PostfixTemplateProvider.java) [`PostfixTemplateProvider`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/template/postfix/templates/PostfixTemplateProvider.java)
in the `com.intellij.codeInsight.template.postfixTemplateProvider` extension point (EP). in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.codeInsight.template.postfixTemplateProvider"/></include> (EP).
The `PostfixTemplateProvider` extension contains the list of templates that extend the The `PostfixTemplateProvider` extension contains the list of templates that extend the
[`PostfixTemplate`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/template/postfix/templates/PostfixTemplate.java) [`PostfixTemplate`](%gh-ic%/platform/lang-impl/src/com/intellij/codeInsight/template/postfix/templates/PostfixTemplate.java)

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Adding New Steps to Project Wizard # Adding New Steps to Project Wizard
@ -14,7 +14,7 @@ See the [](creating_plugin_project.md) section for details.
## Register Module Builder ## Register Module Builder
Project configuration settings depend on the project's module type. Project configuration settings depend on the project's module type.
Register a new `com.intellij.moduleBuilder` extension point in the <path>[plugin.xml](plugin_configuration_file.md)</path> configuration file. Register a new <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.moduleBuilder"/></include> in the <path>[plugin.xml](plugin_configuration_file.md)</path> configuration file.
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Run Configurations Tutorial # Run Configurations Tutorial
@ -30,7 +30,7 @@ Implement [`ConfigurationType`](%gh-ic%/platform/execution/src/com/intellij/exec
## Register the `ConfigurationType` ## Register the `ConfigurationType`
Register implemented configuration type in `com.intellij.configurationType` extension point in the [plugin.xml](%gh-sdk-samples-master%/run_configuration/src/main/resources/META-INF/plugin.xml): Register implemented configuration type in <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.configurationType"/></include> in the [plugin.xml](%gh-sdk-samples-master%/run_configuration/src/main/resources/META-INF/plugin.xml):
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Settings Tutorial # Settings Tutorial
@ -34,8 +34,8 @@ It is based on the [IntelliJ Platform Persistence Model](persisting_state_of_com
### Declaring `AppSettings` ### Declaring `AppSettings`
Given a [Light Service](plugin_services.md#light-services) is not used, the persistent data class must be declared as a [Service](plugin_services.md#declaring-a-service) EP in the <path>[plugin.xml](plugin_configuration_file.md)</path> file. Given a [Light Service](plugin_services.md#light-services) is not used, the persistent data class must be declared as a [Service](plugin_services.md#declaring-a-service) EP in the <path>[plugin.xml](plugin_configuration_file.md)</path> file.
If these were Project Settings, the `com.intellij.projectService` EP would be used. If these were Project Settings, the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.projectService"/></include> would be used.
However, because these are Application Settings, the `com.intellij.applicationService` EP is used with the fully qualified name (FQN) of the implementation class: However, because these are Application Settings, the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.applicationService"/></include> is used with the fully qualified name (FQN) of the implementation class:
```xml ```xml
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">

View File

@ -1,6 +1,6 @@
# Syntax Errors # Syntax Errors
<!-- Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
<link-summary>Suppressing syntax errors in the editor programmatically.</link-summary> <link-summary>Suppressing syntax errors in the editor programmatically.</link-summary>
@ -23,7 +23,8 @@ In some cases highlighting syntax errors is insufficient or even unnecessary:
The IntelliJ Platform allows plugins to disable highlighting particular syntax errors. The IntelliJ Platform allows plugins to disable highlighting particular syntax errors.
These errors can be optionally handled by additional Annotators or [Inspections](code_inspections.md) if needed. These errors can be optionally handled by additional Annotators or [Inspections](code_inspections.md) if needed.
To control which `PsiErrorElement`s should be reported and which can be ignored, a plugin has to provide an implementation of [`HighlightErrorFilter`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/highlighting/HighlightErrorFilter.java) and register it in the `com.intellij.highlightErrorFilter` extension point. To control which `PsiErrorElement`s should be reported and which can be ignored, a plugin has to provide an implementation of [`HighlightErrorFilter`](%gh-ic%/platform/analysis-api/src/com/intellij/codeInsight/highlighting/HighlightErrorFilter.java) and
register it in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.highlightErrorFilter"/></include>.
It contains a single abstract method `shouldHighlightErrorElement()` which should return `false` if a given `PsiErrorElement` should not be highlighted in the editor. It contains a single abstract method `shouldHighlightErrorElement()` which should return `false` if a given `PsiErrorElement` should not be highlighted in the editor.
**Examples:** **Examples:**

View File

@ -230,7 +230,7 @@ to implement any <path>[plugin.xml](plugin_configuration_file.md)</path> declara
Managing the lifecycle of extensions is the platform's responsibility, and instantiating these classes as Kotlin singletons may cause issues. Managing the lifecycle of extensions is the platform's responsibility, and instantiating these classes as Kotlin singletons may cause issues.
A notable exception is [`FileType`](%gh-ic%/platform/core-api/src/com/intellij/openapi/fileTypes/FileType.java) A notable exception is [`FileType`](%gh-ic%/platform/core-api/src/com/intellij/openapi/fileTypes/FileType.java)
(`com.intellij.fileType` extension point), see also the inspection descriptions below. (<include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.fileType"/></include>), see also the inspection descriptions below.
Problems are highlighted via these inspections (2023.2): Problems are highlighted via these inspections (2023.2):

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Notifications # Notifications
@ -43,7 +43,8 @@ Other [`HintManager`](%gh-ic%/platform/platform-api/src/com/intellij/codeInsight
Notifications that appear at the top of the file editor are a great way to ask the user to take an important action that would otherwise impede their experience if ignored (e.g., missing SDK, setup/project configuration requiring user input). Notifications that appear at the top of the file editor are a great way to ask the user to take an important action that would otherwise impede their experience if ignored (e.g., missing SDK, setup/project configuration requiring user input).
Register an implementation of [`EditorNotificationProvider`](%gh-ic%/platform/platform-api/src/com/intellij/ui/EditorNotificationProvider.java) using `com.intellij.editorNotificationProvider` extension point. Register an implementation of [`EditorNotificationProvider`](%gh-ic%/platform/platform-api/src/com/intellij/ui/EditorNotificationProvider.java)
using <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.editorNotificationProvider"/></include>.
If access to indexes is not required, it can be marked [dumb-aware](indexing_and_psi_stubs.md#DumbAwareAPI). If access to indexes is not required, it can be marked [dumb-aware](indexing_and_psi_stubs.md#DumbAwareAPI).
A commonly used UI implementation is [`EditorNotificationPanel`](%gh-ic%/platform/platform-api/src/com/intellij/ui/EditorNotificationPanel.java). A commonly used UI implementation is [`EditorNotificationPanel`](%gh-ic%/platform/platform-api/src/com/intellij/ui/EditorNotificationPanel.java).
@ -98,7 +99,8 @@ Please see the following steps for setup, depending on the target platform versi
<tab title="2020.3 and later"> <tab title="2020.3 and later">
`NotificationGroup` is registered in <path>[plugin.xml](plugin_configuration_file.md)</path> using the ` com.intellij.notificationGroup ` extension point. `NotificationGroup` is registered in <path>[plugin.xml](plugin_configuration_file.md)</path> using
the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.notificationGroup"/></include>.
Use `key` to provide a localized group display name. Use `key` to provide a localized group display name.
```xml ```xml

View File

@ -1,4 +1,4 @@
<!-- Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. --> <!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Status Bar Widgets # Status Bar Widgets
@ -19,7 +19,7 @@ Due to the prominent presentation and limited space, they should be used only fo
The starting point for extending the status bar with new widgets is the The starting point for extending the status bar with new widgets is the
[`StatusBarWidgetFactory`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidgetFactory.java) [`StatusBarWidgetFactory`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidgetFactory.java)
interface, which is registered in the `com.intellij.statusBarWidgetFactory` extension point. interface, which is registered in the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.statusBarWidgetFactory"/></include>.
Note: `id` attribute must be provided in <path>plugin.xml</path> registration and match value from `StatusBarWidgetFactory.getId()`. Note: `id` attribute must be provided in <path>plugin.xml</path> registration and match value from `StatusBarWidgetFactory.getId()`.
In case a widget provides information or functionality related to the editor files, consider extending the In case a widget provides information or functionality related to the editor files, consider extending the

View File

@ -26,7 +26,7 @@ Alternatively, using [programmatic setup](#programmatic-setup), the tool window
### Declarative Setup ### Declarative Setup
The tool window is registered in <path>[plugin.xml](plugin_configuration_file.md)</path> using the `com.intellij.toolWindow` extension point. The tool window is registered in <path>[plugin.xml](plugin_configuration_file.md)</path> using the <include from="snippets.topic" element-id="ep"><var name="ep" value="com.intellij.toolWindow"/></include>.
The extension point attributes specify all the data which is necessary to display the tool window button: The extension point attributes specify all the data which is necessary to display the tool window button:
* The `id` attribute (required) of the tool window which corresponds to the text displayed on the tool window button. * The `id` attribute (required) of the tool window which corresponds to the text displayed on the tool window button.