Jakub Chrzanowski 4e802980f2
Webhelp migration (#347)
* [webhelp] Fixes for TXP00152, TXP00002, test build 27 Jul 22:26

* [webhelp] Fixes for Part #4 TXP00010, EXCEPT decimal numbers in section titles

* [webhelp] Fixes for Part #5 TXP00017

* [webhelp] Fixes for Part #4 TXP00010 - removed numbers from page section titles in "Custom Language Support Tutorial" and "Testing a Custom Language Plugin".

* [webhelp] Removed numbers from page section titles in rest of project *.md files.

* [new webhelp] Build #44 changes

* [new webhelp] Maintenance merge from master

* [new webhelp] Add placeholder file for webhelp import.

* [webhelp] Correct redirects for file name changes

* [webhelp] TOC not needed in webhelp

* [format] {:toc} not needed for webhelp

* add {:disable-links} to ensure demo links are not interpreted as real links.

* Put all badges on the same line to simplify composition.

* formatter.md: fix upsource link

* fix some links

* api_changes_list.md: remove note

* migrate to webhelp - initial

* fix GH edit URL

* remove sdkdocs-template setup in VCS config

* remove recently_updated.md

* restore COC/CONTRIBUTING.md

* api_changes_list.md: remove note

* useful_links.md: IPE

Co-authored-by: JohnHake <john.hake@jetbrains.com>
Co-authored-by: Yann Cébron <yann.cebron@jetbrains.com>
2021-01-14 16:07:39 +01:00

2.2 KiB

This API is available starting from 2020.3 and currently in development and thus in experimental state.

{type="warning"}

A symbol is a semantic element in some model, e.g., language model or framework model. The IntelliJ Platform uses Symbol to represent symbols, and Symbol serves as a link between Platform APIs, such as navigation, finding usages, or renaming. The platform obtains the target symbol from a declaration or by resolving a reference, and then uses it to perform an action. The PsiElement is considered as an element in the source tree (enhanced ASTNode). Symbol decouples semantic actions from PSI.

A Symbol is not required to be backed by a PsiElement, and it is incorrect to try to obtain the PsiElement from a Symbol.
Symbol is not required to be bound to a Project as well, meaning the same instance might be shared between projects.

Examples:

  • Java local variable is a symbol in Java language model, it's backed by a PsiVariable element;
  • Compiled class is a symbol in JVM model, it's backed by JDK library stubs, and it's not bound to any project;
  • Spring Bean is a symbol in Spring framework model, it's defined on-the-fly by framework support (not backed by a PsiElement) and bound to a Project;
  • Database column is a symbol defined by data source (not backed by a PsiElement) and not bound to a Project since DB elements might be shared between projects.

Lifecycle

The Symbol instance is expected to stay valid within a single read action, which means it's safe to pass the instance to different APIs. A Symbol instance should not be referenced between read actions. One should create a pointer via Symbol.createPointer() in the current read action, and then call Pointer.dereference() to obtain a Symbol instance in the subsequent read action.