normalize quotes

This commit is contained in:
Karol Lewandowski 2022-02-24 11:22:34 +01:00
parent 552666bae6
commit 30a67f0c88
13 changed files with 38 additions and 38 deletions

View File

@ -78,7 +78,7 @@ _Early Access Program_ (EAP) releases of upcoming versions are available [here](
### IntelliJ Platform 2021.3 ### IntelliJ Platform 2021.3
Running tests fails with `jarFiles is not set for [...]` or `Created extension classloader is not equal to plugins one` Running tests fails with `jarFiles is not set for [...]` or `Created extension classloader is not equal to plugin's one`
: Set system property `idea.force.use.core.classloader` to `true`. : Set system property `idea.force.use.core.classloader` to `true`.
Running tests fails using Gradle setup Running tests fails using Gradle setup

View File

@ -12,7 +12,7 @@ IntelliJ Platform migrated to Java 11
: Using Java 11 is now required, please see [blog post](https://blog.jetbrains.com/platform/2020/09/intellij-project-migrates-to-java-11/). : Using Java 11 is now required, please see [blog post](https://blog.jetbrains.com/platform/2020/09/intellij-project-migrates-to-java-11/).
Internal changes in Project Model Internal changes in Project Model
: Internal changes related to a significant redesign of the representation of project models have been made, please see [blog post](https://blog.jetbrains.com/platform/2020/10/new-implementation-of-project-model-interfaces-in-2020-3/) for details. This shouldnt affect any plugins using the IntelliJ API properly and which dont access internal classes. : Internal changes related to a significant redesign of the representation of project models have been made, please see [blog post](https://blog.jetbrains.com/platform/2020/10/new-implementation-of-project-model-interfaces-in-2020-3/) for details. This shouldn't affect any plugins using the IntelliJ API properly and which don't access internal classes.
Reparsing of `IReparseableLeafElementType` Reparsing of `IReparseableLeafElementType`
: For elements whose `IElementType` implements this interface, platform attempts reparse when a modification is made right before or after the leaf element preventing reparsing the whole file. : For elements whose `IElementType` implements this interface, platform attempts reparse when a modification is made right before or after the leaf element preventing reparsing the whole file.

View File

@ -33,10 +33,10 @@ The following links represent useful resources for working with the IntelliJ Pla
| **Busy plugin developers series. Episode 3** <br/>Jakub Chrzanowski/Anna Maltceva/Yann Cebron, 11/2021 <video href="9J0j-90dC60" title="Busy plugin developers series. Episode 3" width="300"/> | <br/><br/><br/>Building Themes for IntelliJ-based IDEs<br/>Latest updates to JetBrains Marketplace | | **Busy plugin developers series. Episode 3** <br/>Jakub Chrzanowski/Anna Maltceva/Yann Cebron, 11/2021 <video href="9J0j-90dC60" title="Busy plugin developers series. Episode 3" width="300"/> | <br/><br/><br/>Building Themes for IntelliJ-based IDEs<br/>Latest updates to JetBrains Marketplace |
| **Busy plugin developers series. Episode 2** <br/>Anna Maltceva/Łukasz Wawrzyk/Jakub Chrzanowski, 09/2021 <video href="oB1GA9JeeiY" title="Busy plugin developers series. Episode 2" width="300"/> | <br/><br/><br/>How to improve your Marketplace plugin page to attract more users<br/>ide-probe, a testing and benchmarking framework for IntelliJ-based IDEs | | **Busy plugin developers series. Episode 2** <br/>Anna Maltceva/Łukasz Wawrzyk/Jakub Chrzanowski, 09/2021 <video href="oB1GA9JeeiY" title="Busy plugin developers series. Episode 2" width="300"/> | <br/><br/><br/>How to improve your Marketplace plugin page to attract more users<br/>ide-probe, a testing and benchmarking framework for IntelliJ-based IDEs |
| **Busy plugin developers series. Episode 1** <br/>Jakub Chrzanowski/Semyon Atamas/Paweł Lipski, 07/2021 <video href="vAlor5-hC0Q" title="Busy plugin developers series. Episode 1" width="300"/> | <br/><br/><br/>What is Gradle IntelliJ Plugin<br/>New features of Gradle IntelliJ Plugin<br/>How to start with Gradle IntelliJ Plugin<br/>Types of signing and how they work<br/>How JetBrains Marketplace signature works<br/>How to sign your plugin<br/>Tools and tips for testing UI of IntelliJ Plugins | | **Busy plugin developers series. Episode 1** <br/>Jakub Chrzanowski/Semyon Atamas/Paweł Lipski, 07/2021 <video href="vAlor5-hC0Q" title="Busy plugin developers series. Episode 1" width="300"/> | <br/><br/><br/>What is Gradle IntelliJ Plugin<br/>New features of Gradle IntelliJ Plugin<br/>How to start with Gradle IntelliJ Plugin<br/>Types of signing and how they work<br/>How JetBrains Marketplace signature works<br/>How to sign your plugin<br/>Tools and tips for testing UI of IntelliJ Plugins |
| **Make IntelliJ IDEA Your Own** <br/>Sirisha Pratha, 05/2021 <video href="cAwH_DbFrfw?t=1120" title="Make IntelliJ IDEA Your Own" width="300"/> | <br/><br/>In this session, we'll explore the benefits provided by IntelliJ IDEAs customization options, and you will learn how to make the IDE your own. We will also look at the plugins available on the JetBrains Marketplace, discuss the process of developing them, and demo a few custom ones. | | **Make IntelliJ IDEA Your Own** <br/>Sirisha Pratha, 05/2021 <video href="cAwH_DbFrfw?t=1120" title="Make IntelliJ IDEA Your Own" width="300"/> | <br/><br/>In this session, we'll explore the benefits provided by IntelliJ IDEA's customization options, and you will learn how to make the IDE your own. We will also look at the plugins available on the JetBrains Marketplace, discuss the process of developing them, and demo a few custom ones. |
| **IntelliJ IDEA Conf 2021** <br/>Various Speakers, 02/2021 <video href="akrPpWAZzQk&amp;list=PLPZy-hmwOdEUdLO-AKiJJ7LuZ3p16zJ4x" title="IntelliJ IDEA Conf 2021" width="300"/> | <br/><br/>Playlist includes a number of presentations related to plugin development | | **IntelliJ IDEA Conf 2021** <br/>Various Speakers, 02/2021 <video href="akrPpWAZzQk&amp;list=PLPZy-hmwOdEUdLO-AKiJJ7LuZ3p16zJ4x" title="IntelliJ IDEA Conf 2021" width="300"/> | <br/><br/>Playlist includes a number of presentations related to plugin development |
| **Busy plugin developers series. Episode 0** <br/>Mikhail Vink/Jakub Chrzanowski/Yann Cebron, 12/2020 <video href="-6D5-xEaYig" title="Busy plugin developers series. Episode 0" width="300" /> | <br/><br/><br/>IntelliJ Platform Plugin Template<br/>Plugin DevKit Features<br/>IntelliJ Platform Explorer<br/>Whats coming in 2021?<br/>Introduction to the Marketplace<br/>How to make your plugin successful?<br/>Sell on the Marketplace | | **Busy plugin developers series. Episode 0** <br/>Mikhail Vink/Jakub Chrzanowski/Yann Cebron, 12/2020 <video href="-6D5-xEaYig" title="Busy plugin developers series. Episode 0" width="300" /> | <br/><br/><br/>IntelliJ Platform Plugin Template<br/>Plugin DevKit Features<br/>IntelliJ Platform Explorer<br/>What's coming in 2021?<br/>Introduction to the Marketplace<br/>How to make your plugin successful?<br/>Sell on the Marketplace |
| **How We Built Comma, the Raku IDE, on the IntelliJ Platform** <br/>Jonathan Worthington, 01/2020 <video href="zDP9uUMYrvs" title="How We Built Comma, the Raku IDE, on the IntelliJ Platform" width="300"/> | <br/><br/><br/>How to build custom language support<br/>How to go from a language support plugin to an IDE<br/>Lessons Learned<br/><br/>[Blog post](https://blog.jetbrains.com/platform/2020/01/webinar-recording-how-we-built-comma-the-raku-ide-on-the-intellij-platform/) | | **How We Built Comma, the Raku IDE, on the IntelliJ Platform** <br/>Jonathan Worthington, 01/2020 <video href="zDP9uUMYrvs" title="How We Built Comma, the Raku IDE, on the IntelliJ Platform" width="300"/> | <br/><br/><br/>How to build custom language support<br/>How to go from a language support plugin to an IDE<br/>Lessons Learned<br/><br/>[Blog post](https://blog.jetbrains.com/platform/2020/01/webinar-recording-how-we-built-comma-the-raku-ide-on-the-intellij-platform/) |
| **Building IntelliJ IDEA plugins in Scala** <br/>Igal Tabachnik, 2020 <video href="IPO-cY_giNA" title="Building IntelliJ IDEA plugins in Scala" width="300"/> | <br/><br/>In this talk, I will show how to create plugins for IDEA from scratch in Scala, and show why Scalas unique features make it a great fit for such tasks as inspecting and manipulating Abstract Syntax Trees (ASTs) to create your own custom suggestions and quick-fixes. | | **Building IntelliJ IDEA plugins in Scala** <br/>Igal Tabachnik, 2020 <video href="IPO-cY_giNA" title="Building IntelliJ IDEA plugins in Scala" width="300"/> | <br/><br/>In this talk, I will show how to create plugins for IDEA from scratch in Scala, and show why Scala's unique features make it a great fit for such tasks as inspecting and manipulating Abstract Syntax Trees (ASTs) to create your own custom suggestions and quick-fixes. |
| **Live Development of a PyCharm Plugin** <br/>Joachim Ansorg, 2019 <video href="cR-28eaXGQI" title="Live Development of a PyCharm Plugin" width="300"/> | <br/><br/>Background and architecture of IntelliJ plugins<br/>Development using tests<br/>Implementing interesting extension points<br/>Viewing the plugin in the IDE (PyCharm)<br/><br/>[Blog post](https://blog.jetbrains.com/pycharm/2019/01/webinar-recording-live-development-of-a-pycharm-plugin-with-joachim-ansorg/) | | **Live Development of a PyCharm Plugin** <br/>Joachim Ansorg, 2019 <video href="cR-28eaXGQI" title="Live Development of a PyCharm Plugin" width="300"/> | <br/><br/>Background and architecture of IntelliJ plugins<br/>Development using tests<br/>Implementing interesting extension points<br/>Viewing the plugin in the IDE (PyCharm)<br/><br/>[Blog post](https://blog.jetbrains.com/pycharm/2019/01/webinar-recording-live-development-of-a-pycharm-plugin-with-joachim-ansorg/) |
| **Build Developer Tools On Top of IntelliJ Platform** <br/>Dmitry Jemerov, 2013 <video href="vQDzjGzkPFc" title="Build Developer Tools On Top of IntelliJ Platform" width="300"/> | <br/><br/>This webinar makes an overview on IntelliJ Platform and explains how you can use it for building your own products. | | **Build Developer Tools On Top of IntelliJ Platform** <br/>Dmitry Jemerov, 2013 <video href="vQDzjGzkPFc" title="Build Developer Tools On Top of IntelliJ Platform" width="300"/> | <br/><br/>This webinar makes an overview on IntelliJ Platform and explains how you can use it for building your own products. |

View File

@ -29,7 +29,7 @@ When using Gradle, a number of metadata elements will be provided at build time
<version>1.0.0</version> <version>1.0.0</version>
<!-- A displayed Vendor name or Organization ID (if you have one created. The optional `URL` attribute specifies <!-- A displayed Vendor name or Organization ID (if you have one created. The optional `URL` attribute specifies
the link to the vendors homepage.The optional `email` attribute specifies the vendors e-mail address. the link to the vendor's homepage.The optional `email` attribute specifies the vendor's e-mail address.
Displayed on the Plugins Page. --> Displayed on the Plugins Page. -->
<vendor url="https://plugins.jetbrains.com" email="marketplace@jetbrains.com">JetBrains</vendor> <vendor url="https://plugins.jetbrains.com" email="marketplace@jetbrains.com">JetBrains</vendor>

View File

@ -7,7 +7,7 @@
This topic considers the concept of projects based on the IntelliJ Platform and related subjects, such as _modules_, _facets_, _libraries_, and _SDK_. This topic considers the concept of projects based on the IntelliJ Platform and related subjects, such as _modules_, _facets_, _libraries_, and _SDK_.
The project structure and Java classes available to manage projects and modules are discussed. The project structure and Java classes available to manage projects and modules are discussed.
> Internal changes related to a significant redesign of the representation of project models are included in 2020.3 release; please see [blog post](https://blog.jetbrains.com/platform/2020/10/new-implementation-of-project-model-interfaces-in-2020-3/) for details. This shouldnt affect any plugins using the IntelliJ API properly and which dont access internal classes. > Internal changes related to a significant redesign of the representation of project models are included in 2020.3 release; please see [blog post](https://blog.jetbrains.com/platform/2020/10/new-implementation-of-project-model-interfaces-in-2020-3/) for details. This shouldn't affect any plugins using the IntelliJ API properly and which don't access internal classes.
> >
{type="note"} {type="note"}
@ -61,4 +61,4 @@ For more information on each of these entities, see:
- [Module](module.md) - [Module](module.md)
- [SDK](sdk.md) - [SDK](sdk.md)
- [Library](library.md) - [Library](library.md)
- [External system integration](external_system_integration.md) (for projects imported from Gradle or similar build systems) - [External system integration](external_system_integration.md) (for projects imported from Gradle or similar build systems)

View File

@ -4,21 +4,21 @@
## Problems with the Guide ## Problems with the Guide
If youre having problems with the guide itself, such as missing, incorrect, or confusing content, please [raise an issue on YouTrack](https://youtrack.jetbrains.com/newIssue?project=IJSDK&clearDraft=true&c=). If you're having problems with the guide itself, such as missing, incorrect, or confusing content, please [raise an issue on YouTrack](https://youtrack.jetbrains.com/newIssue?project=IJSDK&clearDraft=true&c=).
If the problem is easily solved, you can also submit a [Pull Request](intellij-sdk-docs-original_CONTRIBUTING.md). If the problem is easily solved, you can also submit a [Pull Request](intellij-sdk-docs-original_CONTRIBUTING.md).
If you want to report (smaller) issues for a _specific_ page, you can also use <control>Was this page helpful</control> feedback form on the bottom of each page by providing more details after clicking the <control>No</control> button. Please try to be as specific as possible and provide your e-mail address for further questions and getting notified of updates. If you want to report (smaller) issues for a _specific_ page, you can also use <control>Was this page helpful</control> feedback form on the bottom of each page by providing more details after clicking the <control>No</control> button. Please try to be as specific as possible and provide your e-mail address for further questions and getting notified of updates.
If you just want to share feedback on the guide, again, [raise an issue](https://youtrack.jetbrains.com/newIssue?project=IJSDK&clearDraft=true&c=), even if its for a discussion, ideas on improvements or suggestions. If you just want to share feedback on the guide, again, [raise an issue](https://youtrack.jetbrains.com/newIssue?project=IJSDK&clearDraft=true&c=), even if it's for a discussion, ideas on improvements or suggestions.
> Please don't use the **IJSDK** YouTrack project for plugin or product support requests - it's intended for the SDK and the documentation, and you'll get a better response using one of the methods below. > Please don't use the **IJSDK** YouTrack project for plugin or product support requests - it's intended for the SDK and the documentation, and you'll get a better response using one of the methods below.
> >
{type="note"} {type="note"}
## Problems with Code - Support Issues ## Problems with Code - Support Issues
> Please see [Plugin Development FAQ](faq.md) and [Explore the IntelliJ Platform API](explore_api.md) for tips & tricks. > Please see [Plugin Development FAQ](faq.md) and [Explore the IntelliJ Platform API](explore_api.md) for tips & tricks.
> >
{type="tip"} {type="tip"}
For problems related to code, rather than the content of the guide, you have several options: For problems related to code, rather than the content of the guide, you have several options:
@ -31,4 +31,4 @@ Of course, all issues will be used to try and improve this guide.
## Problems with Products ## Problems with Products
If you have a problem with an IntelliJ Platform-based product, such as IntelliJ IDEA, WebStorm, Rider, etc., please raise an issue on [YouTrack](https://youtrack.jetbrains.com), assigning it to the correct project for the product. If you have a problem with an IntelliJ Platform-based product, such as IntelliJ IDEA, WebStorm, Rider, etc., please raise an issue on [YouTrack](https://youtrack.jetbrains.com), assigning it to the correct project for the product.

View File

@ -38,7 +38,7 @@ The following changes were introduced:
See the [YouTrack issue](https://youtrack.jetbrains.com/issue/WI-54484) for details. See the [YouTrack issue](https://youtrack.jetbrains.com/issue/WI-54484) for details.
### Constructor Property Promotion ### Constructor Property Promotion
The new shorthand syntax allows defining class properties by [“promoting” the constructor parameters](https://wiki.php.net/rfc/constructor_promotion) with a visibility keyword (`public`, `protected`, or `private`). The new shorthand syntax allows defining class properties by ["promoting" the constructor parameters](https://wiki.php.net/rfc/constructor_promotion) with a visibility keyword (`public`, `protected`, or `private`).
The following changes were introduced: The following changes were introduced:
* `com.jetbrains.php.lang.psi.elements.Parameter` now can contain one of `com.jetbrains.php.lang.lexer.PhpTokenTypes#tsVARIABLE_MODIFIERS` as a child element. * `com.jetbrains.php.lang.psi.elements.Parameter` now can contain one of `com.jetbrains.php.lang.lexer.PhpTokenTypes#tsVARIABLE_MODIFIERS` as a child element.
@ -67,7 +67,7 @@ With [attributes](https://wiki.php.net/rfc/attributes_v2), you can provide struc
The following changes were introduced: The following changes were introduced:
* New PSI elements `PhpAttribute` and `PhpAttributesList` were added. * New PSI elements `PhpAttribute` and `PhpAttributesList` were added.
* Possible attributes owners (`com.jetbrains.php.lang.psi.elements.Function`, `com.jetbrains.php.lang.psi.elements.Parameter`, and so on) can now have zero or more instances of `PhpAttributesList` as first children. This means that now it is not safe to assume that `PhpPsiElement#getFirstChild` will return some token. We encourage finding the needed tokens by `IElementType` manually. * Possible attributes' owners (`com.jetbrains.php.lang.psi.elements.Function`, `com.jetbrains.php.lang.psi.elements.Parameter`, and so on) can now have zero or more instances of `PhpAttributesList` as first children. This means that now it is not safe to assume that `PhpPsiElement#getFirstChild` will return some token. We encourage finding the needed tokens by `IElementType` manually.
* If a PHPDoc comment of a named element is preceded by `PhpAttribute`, it will not be a sibling of a named element, but rather a child. We encourage using `PhpNamedElement#getDocComment` (which is already updated to reflect the changes) instead of finding the PHPDoc comment manually. * If a PHPDoc comment of a named element is preceded by `PhpAttribute`, it will not be a sibling of a named element, but rather a child. We encourage using `PhpNamedElement#getDocComment` (which is already updated to reflect the changes) instead of finding the PHPDoc comment manually.
@ -93,4 +93,4 @@ See the [YouTrack issue](https://youtrack.jetbrains.com/issue/WI-54356) for deta
The following changes were introduced: The following changes were introduced:
* PSI layout of Twig variables and fields has been changed. Earlier, Twig variables and fields used to be parsed as `PsiIdentifier`; now they are wrapped into new PSI elements: `TwigVariable` and `TwigField`. * PSI layout of Twig variables and fields has been changed. Earlier, Twig variables and fields used to be parsed as `PsiIdentifier`; now they are wrapped into new PSI elements: `TwigVariable` and `TwigField`.
* `TwigField` may be nested and contain a variable or other fields inside. * `TwigField` may be nested and contain a variable or other fields inside.

View File

@ -9,7 +9,7 @@ Accessing the documentation is done by calling
or hovering over a symbol, which will open a popup to show type information, parameters, usage descriptions, or examples. or hovering over a symbol, which will open a popup to show type information, parameters, usage descriptions, or examples.
The source of the documentation contents can vary. The source of the documentation contents can vary.
Often it is extracted from comments (e.g. JavaDoc comments) in the source code, Often it is extracted from comments (e.g. JavaDoc comments) in the source code,
but its also possible to access external resources like web pages. but it's also possible to access external resources like web pages.
In addition to showing the documentation, the `getQuickNavigateInfo()` method returns the text to be displayed In addition to showing the documentation, the `getQuickNavigateInfo()` method returns the text to be displayed
when the user hovers over an element with <shortcut>Ctrl</shortcut>/<shortcut>Cmd</shortcut> pressed. when the user hovers over an element with <shortcut>Ctrl</shortcut>/<shortcut>Cmd</shortcut> pressed.
@ -37,7 +37,7 @@ A common choice is to extract and format documentation comments.
To format the documentation contents, you should use To format the documentation contents, you should use
[`DocumentationMarkup`](upsource:///platform/analysis-api/src/com/intellij/lang/documentation/DocumentationMarkup.java) [`DocumentationMarkup`](upsource:///platform/analysis-api/src/com/intellij/lang/documentation/DocumentationMarkup.java)
to achieve a consistent output. to achieve a consistent output.
> Use [`HtmlSyntaxInfoUtil`](upsource:///platform/lang-impl/src/com/intellij/openapi/editor/richcopy/HtmlSyntaxInfoUtil.java) to create Lexer-based highlighted code samples. > Use [`HtmlSyntaxInfoUtil`](upsource:///platform/lang-impl/src/com/intellij/openapi/editor/richcopy/HtmlSyntaxInfoUtil.java) to create Lexer-based highlighted code samples.
> >
{type="tip"} {type="tip"}
@ -46,7 +46,7 @@ Once these steps are completed, the following additional features can be impleme
* Implement `getQuickNavigateInfo()` to provide the text that should be displayed when an element is hovered over with <shortcut>Ctrl</shortcut>/<shortcut>Cmd</shortcut> pressed. * Implement `getQuickNavigateInfo()` to provide the text that should be displayed when an element is hovered over with <shortcut>Ctrl</shortcut>/<shortcut>Cmd</shortcut> pressed.
* Implement `generateHoverDoc()` to show different contents on mouse hover. * Implement `generateHoverDoc()` to show different contents on mouse hover.
* Implement `getDocumentationElementForLookupItem()` to return a suitable PSI element for the given lookup element when * Implement `getDocumentationElementForLookupItem()` to return a suitable PSI element for the given lookup element when
<menupath>View | Quick Documentation</menupath> is called on an element of the autocompletion popup. <menupath>View | Quick Documentation</menupath> is called on an element of the autocompletion popup.
* Implement `getUrlFor()` and [`ExternalDocumentationProvider`](upsource:///platform/analysis-api/src/com/intellij/lang/documentation/ExternalDocumentationProvider.java) to fetch documentation for elements from online resources. * Implement `getUrlFor()` and [`ExternalDocumentationProvider`](upsource:///platform/analysis-api/src/com/intellij/lang/documentation/ExternalDocumentationProvider.java) to fetch documentation for elements from online resources.

View File

@ -28,7 +28,7 @@ Injected code is always bound to a specific context that depends on the surround
</tab> </tab>
</tabs> </tabs>
Its not unusual that injected fragments are distributed among, e.g., several strings that are concatenated like it is common for SQL queries. To solve this, the IntelliJ Platform allows injecting a language into several fragments at once. Multiple parts are then considered belonging together. It's not unusual that injected fragments are distributed among, e.g., several strings that are concatenated like it is common for SQL queries. To solve this, the IntelliJ Platform allows injecting a language into several fragments at once. Multiple parts are then considered belonging together.
As a plugin author, you can provide language injection in different ways: As a plugin author, you can provide language injection in different ways:
@ -39,7 +39,7 @@ As a plugin author, you can provide language injection in different ways:
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 `com.intellij.languageInjectionPerformer` EP.
- Implementing the `com.intellij.multiHostInjector` EP gives plugin authors the most control over where and how language injection will take place. - Implementing the `com.intellij.multiHostInjector` EP gives plugin authors the most control over where and how language injection will take place.
In the following sections, well discuss these three options in more detail. In the following sections, we'll discuss these three options in more detail.
## IntelliLang ## IntelliLang
@ -49,7 +49,7 @@ The injections shown are configured through XML files and loaded automatically.
### Example ### Example
Lets take a look at the Java `String.matches()` method that injects the RegExp language into the string of the first argument. Let's take a look at the Java `String.matches()` method that injects the RegExp language into the string of the first argument.
In the IntelliLang settings, it is defined as one possible injection in Java code. In the IntelliLang settings, it is defined as one possible injection in Java code.
![Language Injection Settings](language_injection_settings.png){border-effect="line"} ![Language Injection Settings](language_injection_settings.png){border-effect="line"}

View File

@ -59,7 +59,7 @@ Therefore, when the user moves the caret or types something, the following happe
Implementations return `null` if an appropriate element could not be found or if it is different from `getParameterOwner()` of the provided `UpdateParameterInfoContext`. Implementations return `null` if an appropriate element could not be found or if it is different from `getParameterOwner()` of the provided `UpdateParameterInfoContext`.
If `null` is returned, the `dispose()` method is called. If `null` is returned, the `dispose()` method is called.
3. The `processFoundElementForUpdatingParameterInfo()` method is called which allows for additional adjustments of the `UpdateParameterInfoContext`. 3. The `processFoundElementForUpdatingParameterInfo()` method is called which allows for additional adjustments of the `UpdateParameterInfoContext`.
By default, this method does nothing and its usually not necessary to implement it. By default, this method does nothing and it's usually not necessary to implement it.
4. The `updateParameterInfo()` is called. Many implementations only invoke `setParameterOwner()` of the `UpdateParameterInfoContext` here. 4. The `updateParameterInfo()` is called. Many implementations only invoke `setParameterOwner()` of the `UpdateParameterInfoContext` here.
5. The `updateUI()` method is called for each item in the `getItemsToShow()` array of the context which were collected in the initial phase. 5. The `updateUI()` method is called for each item in the `getItemsToShow()` array of the context which were collected in the initial phase.

View File

@ -35,7 +35,7 @@ Enable `ide.browser.jcef.enabled` in Registry dialog (invoke **Help \| Find Acti
## Debugging ## Debugging
The [Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/), embedded into JCEF, can be used as a debugging and profiling tool. The [Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/), embedded into JCEF, can be used as a debugging and profiling tool.
Its active by default, so that a Chrome DevTools client can attach to it via the default port number - `9222`. It's active by default, so that a Chrome DevTools client can attach to it via the default port number - `9222`.
The port number can be configured with the following registry key: The port number can be configured with the following registry key:
``` ```
@ -45,7 +45,7 @@ ide.browser.jcef.debug.port=9222
JavaScript debugger in IntelliJ IDEA Ultimate can thus be used to debug JavaScript code running in the IDE via the Chrome DevTools. JavaScript debugger in IntelliJ IDEA Ultimate can thus be used to debug JavaScript code running in the IDE via the Chrome DevTools.
Use the _Attach to Node.js/Chrome_ configurations with a proper port number. Use the _Attach to Node.js/Chrome_ configurations with a proper port number.
Also, JCEF provides a default Chrome DevTools front-end (similar to the one in the Chrome browser) that can be opened from the JCEFs browser component context menu via **Open DevTools**. Also, JCEF provides a default Chrome DevTools front-end (similar to the one in the Chrome browser) that can be opened from the JCEF's browser component context menu via **Open DevTools**.
The menu item is available in [internal mode](enabling_internal.md) only, starting with 2021.3 platform registry key `ide.browser.jcef.contextMenu.devTools.enabled` must be set to `true` explicitly. The menu item is available in [internal mode](enabling_internal.md) only, starting with 2021.3 platform registry key `ide.browser.jcef.contextMenu.devTools.enabled` must be set to `true` explicitly.
To access the Chrome DevTools in plugin code, use the following API: To access the Chrome DevTools in plugin code, use the following API:
@ -65,7 +65,7 @@ Or in order to just open it in a separate window:
## API ## API
### JBCefApp ### JBCefApp
[`JBCefApp`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefApp.java) [`JBCefApp`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefApp.java)
Performs JCEF auto-initialization, manages its lifecycle, and provides `JBCefClient` instances. Performs JCEF auto-initialization, manages its lifecycle, and provides `JBCefClient` instances.
@ -82,12 +82,12 @@ Before using JCEF, `JBCefApp.isSupported()` check must be called:
``` ```
JCEF can be unsupported when: JCEF can be unsupported when:
- Its not available in the IDE runtime (the IDE is started with an alternative OpenJDK). - It's not available in the IDE runtime (the IDE is started with an alternative OpenJDK).
- Its version is not compatible with the running IDE. - Its version is not compatible with the running IDE.
To avoid the above problems, the IDE should be run with the bundled JBR. To avoid the above problems, the IDE should be run with the bundled JBR.
### JBCefClient ### JBCefClient
[`JBCefClient`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefClient.java) [`JBCefClient`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefClient.java)
Is tied to every browser component explicitly or implicitly. Is tied to every browser component explicitly or implicitly.
@ -96,7 +96,7 @@ The same instance can be shared among multiple browsers.
It is up to the developer to use a shared or per-browser instance, depending on the handlers' logic. It is up to the developer to use a shared or per-browser instance, depending on the handlers' logic.
If a client was created explicitly, it should be [disposed](disposers.md) by the developer; otherwise, it is disposed automatically following the associated browser instance disposal. If a client was created explicitly, it should be [disposed](disposers.md) by the developer; otherwise, it is disposed automatically following the associated browser instance disposal.
### JBCefBrowser ### JBCefBrowser
[`JBCefBrowser`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefBrowser.java) [`JBCefBrowser`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefBrowser.java)
Provides the browser UI component: Provides the browser UI component:
@ -134,15 +134,15 @@ The simplest way to add a browser component to your UI:
myPanel.add(new JBCefBrowser("https://www.jetbrains.com").getComponent()); myPanel.add(new JBCefBrowser("https://www.jetbrains.com").getComponent());
``` ```
### JBCefJSQuery ### JBCefJSQuery
[`JBCefJSQuery`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefJSQuery.java) [`JBCefJSQuery`](upsource:///platform/platform-api/src/com/intellij/ui/jcef/JBCefJSQuery.java)
Provides JS query callback mechanism. Provides JS query callback mechanism.
Theres no direct access to JS DOM from Java (like in JavaFX WebView, see also [this issue](https://youtrack.jetbrains.com/issue/JBR-2046)). There's no direct access to JS DOM from Java (like in JavaFX WebView, see also [this issue](https://youtrack.jetbrains.com/issue/JBR-2046)).
Still, JCEF provides an asynchronous way to communicate to JS. Still, JCEF provides an asynchronous way to communicate to JS.
Its simpler to illustrate it by an example. It's simpler to illustrate it by an example.
Say we want to open a link in an external browser, and see it in [`MarkdownJCEFHtmlPanel.kt`](upsource:///plugins/markdown/src/org/intellij/plugins/markdown/ui/preview/jcef/MarkdownJCEFHtmlPanel.kt): Say we want to open a link in an external browser, and see it in [`MarkdownJCEFHtmlPanel.kt`](upsource:///plugins/markdown/src/org/intellij/plugins/markdown/ui/preview/jcef/MarkdownJCEFHtmlPanel.kt):
```java ```java
@ -167,4 +167,4 @@ Say we want to open a link in an external browser, and see it in [`MarkdownJCEFH
// Dispose the query when necessary // Dispose the query when necessary
Disposer.dispose(myJSQueryOpenInBrowser); Disposer.dispose(myJSQueryOpenInBrowser);
``` ```

View File

@ -22,7 +22,7 @@ This makes it easy to select not only expressions, blocks, and function definiti
When implementing a custom language, the IntelliJ Platform provides basic implementations of this EP, allowing you to select code based on your PSI structure and to select whole lines. When implementing a custom language, the IntelliJ Platform provides basic implementations of this EP, allowing you to select code based on your PSI structure and to select whole lines.
In many cases this is sufficient to provide a good user experience. In many cases this is sufficient to provide a good user experience.
However, sometimes its advantageous to provide additional regions that the user may wish to be able to select when extending or shrinking a selection. However, sometimes it's advantageous to provide additional regions that the user may wish to be able to select when extending or shrinking a selection.
This EP has two methods that need to be implemented: This EP has two methods that need to be implemented:

View File

@ -81,7 +81,7 @@ All keys must follow this Naming Pattern:
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------| |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|
| **`foreground`** | Text color. | `Label.foreground` | | **`foreground`** | Text color. | `Label.foreground` |
| **`background`** | Background color for objects with text. | `Label.background` | | **`background`** | Background color for objects with text. | `Label.background` |
| **`<part>Color`** | Objects with a single color (do not have foreground/background). Do not use the word “Color” separately, always use with the “part” word. <br/><br/>_The word “Color” shows that this is a color property. Otherwise, it can be confused with a property of another type._ | `Popup.borderColor` <br/> `Group.separatorColor` | | **`<part>Color`** | Objects with a single color (do not have foreground/background). Do not use the word "Color" separately, always use with the "part" word. <br/><br/>_The word "Color" shows that this is a color property. Otherwise, it can be confused with a property of another type._ | `Popup.borderColor` <br/> `Group.separatorColor` |
#### State #### State
@ -107,7 +107,7 @@ If a part is common among several components, use the same name for it. Notable
| **`Border`** | A line around a component. | `NavBar.borderColor` | | **`Border`** | A line around a component. | `NavBar.borderColor` |
| **`Caret`** | The vertical line that denotes typing place. | `TextField.caretForeground` | | **`Caret`** | The vertical line that denotes typing place. | `TextField.caretForeground` |
| **`ModifiedItem`** | An object that has been modified but not yet saved. <br/><br/>_Example: change anything in the Settings dialog, the setting group name in the tree becomes blue._ | `Tree.modifiedItemForeground` | | **`ModifiedItem`** | An object that has been modified but not yet saved. <br/><br/>_Example: change anything in the Settings dialog, the setting group name in the tree becomes blue._ | `Tree.modifiedItemForeground` |
| **`Focus`** | Wide focus border around a component. | `Component.focusColor` <br/><br/>_“Component” is a special key that sets common properties for several basic input components._ | | **`Focus`** | Wide focus border around a component. | `Component.focusColor` <br/><br/>_"Component" is a special key that sets common properties for several basic input components._ |
| **`Info`** | Secondary labels with additional useful information. Usually appear in gray color to the right or below a regular label. | `CompletionPopup.infoForeground` | | **`Info`** | Secondary labels with additional useful information. Usually appear in gray color to the right or below a regular label. | `CompletionPopup.infoForeground` |
| **`Icon`** | An icon that is created with a source code (not an image file). | `Table.sortIconColor` | | **`Icon`** | An icon that is created with a source code (not an image file). | `Table.sortIconColor` |
| **`Selection`** | The focus place in a component with selectable text. Can be in a typed text or in a list or tree. <br/> Goes before other state words (for historical reasons). | `TextField.selectionForeground` <br/> `Tree.selectionInactiveBackground` | | **`Selection`** | The focus place in a component with selectable text. Can be in a typed text or in a list or tree. <br/> Goes before other state words (for historical reasons). | `TextField.selectionForeground` <br/> `Tree.selectionInactiveBackground` |
@ -124,7 +124,7 @@ Use a subobject when creating keys for one of the following:
- The hint text at the bottom of a popup: `Popup.Advertiser.background` - The hint text at the bottom of a popup: `Popup.Advertiser.background`
#### Gradient Color #### Gradient Color
If a component has a gradient color, add the words “start” and “end” for the beginning and ending of a gradient. Examples: If a component has a gradient color, add the words "start" and "end" for the beginning and ending of a gradient. Examples:
- `Button.startBorderColor` / `Button.endBorderColor` - `Button.startBorderColor` / `Button.endBorderColor`
- `SearchMatch.startBackground` / `SearchMatch.endBackground` - `SearchMatch.startBackground` / `SearchMatch.endBackground`