mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-28 01:07:49 +08:00
stub_indexes.md: add Grammar-Kit approach cross link
This commit is contained in:
parent
50a41c3dba
commit
1b18458814
@ -21,7 +21,7 @@ Typically, you need to have stubs for things like methods or fields visible from
|
|||||||
You usually don't need to have stubs for things like statements or local variables, which are not visible externally.
|
You usually don't need to have stubs for things like statements or local variables, which are not visible externally.
|
||||||
|
|
||||||
### Implementation
|
### Implementation
|
||||||
|
|
||||||
The following steps need to be performed only once for each language that supports stubs:
|
The following steps need to be performed only once for each language that supports stubs:
|
||||||
|
|
||||||
* Change the file element type for your language (the element type that you return from `ParserDefinition.getFileNodeType()`) to a class that extends [`IStubFileElementType`](upsource:///platform/core-impl/src/com/intellij/psi/tree/IStubFileElementType.java).
|
* Change the file element type for your language (the element type that you return from `ParserDefinition.getFileNodeType()`) to a class that extends [`IStubFileElementType`](upsource:///platform/core-impl/src/com/intellij/psi/tree/IStubFileElementType.java).
|
||||||
@ -40,10 +40,15 @@ For each element type that you want to store in the stub tree, you need to perfo
|
|||||||
* Use the class implementing `IStubElementType` as the element type constant when parsing ([example](upsource:///plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesElementTypes.java)).
|
* Use the class implementing `IStubElementType` as the element type constant when parsing ([example](upsource:///plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesElementTypes.java)).
|
||||||
* Make sure all methods in the PSI element interface access the stub data rather than the PSI tree when appropriate ([example: `Property.getKey()` implementation](upsource:///plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/psi/impl/PropertyImpl.java)).
|
* Make sure all methods in the PSI element interface access the stub data rather than the PSI tree when appropriate ([example: `Property.getKey()` implementation](upsource:///plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/psi/impl/PropertyImpl.java)).
|
||||||
|
|
||||||
|
> If you use [Grammar-Kit](https://github.com/JetBrains/Grammar-Kit) to generate your language PSI, see the [Stub indices support](https://github.com/JetBrains/Grammar-Kit/blob/master/HOWTO.md#35-stub-indices-support) section for instructions on integrating your grammar with stubs.
|
||||||
|
>
|
||||||
|
{type="note"}
|
||||||
|
|
||||||
By default, if a PSI element extends `StubBasedPsiElement`, all elements of that type will be stored in the stub tree.
|
By default, if a PSI element extends `StubBasedPsiElement`, all elements of that type will be stored in the stub tree.
|
||||||
If you need more precise control over which elements are stored, override `IStubElementType.shouldCreateStub()` and return `false` for elements that should not be included in the stub tree.
|
If you need more precise control over which elements are stored, override `IStubElementType.shouldCreateStub()` and return `false` for elements that should not be included in the stub tree.
|
||||||
The exclusion is not recursive: if some elements of the element for which you returned false are also stub-based PSI elements, they will be included in the stub tree.
|
The exclusion is not recursive: if some elements of the element for which you returned false are also stub-based PSI elements, they will be included in the stub tree.
|
||||||
|
|
||||||
|
|
||||||
### Serializing Data
|
### Serializing Data
|
||||||
|
|
||||||
For serializing string data, e.g. element names, in stubs, we recommend to use `StubOutputStream.writeName()` and `StubInputStream.readName()` methods.
|
For serializing string data, e.g. element names, in stubs, we recommend to use `StubOutputStream.writeName()` and `StubInputStream.readName()` methods.
|
||||||
@ -81,4 +86,4 @@ To access the data from an index, the following two methods are used:
|
|||||||
|
|
||||||
## Related Forum Discussions
|
## Related Forum Discussions
|
||||||
|
|
||||||
* [Lifecycle of stub creation](https://intellij-support.jetbrains.com/hc/en-us/community/posts/206121959-Lifecycle-of-stub-creation/comments/206143885)
|
* [Lifecycle of stub creation](https://intellij-support.jetbrains.com/hc/en-us/community/posts/206121959-Lifecycle-of-stub-creation/comments/206143885)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user