Daniil Ovchinnikov 5d32cbcfeb
Symbol API part 1 (#317)
* LAB-21 Symbols, Declarations and References, Completion 2020.3

* LAB-21 Go to Declaration or Usages 2020.3

* fixes (squash with LAB-21 Symbols, Declarations and References, Completion 2020.3)

* fixes (squash with LAB-21 Go to Declaration or Usages 2020.3)

* new PsiCompletableReference location (squash with LAB-21 Symbols, Declarations and References, Completion 2020.3)

* Apply suggestions from code review

Co-authored-by: John Hake <39627202+JohnHake@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: John Hake <39627202+JohnHake@users.noreply.github.com>

* "Own reference", "External reference", "Implicit reference"

* move examples before api links

* IDE -> IntelliJ Platform

* articles

* explicit upsource link

* linebreaks

* element -> symbol

* remove jvm package example

* parent links (squash with LAB-21 Symbols, Declarations and References, Completion 2020.3)

* parent links (squash with LAB-21 Go to Declaration or Usages 2020.3)

* platform -> IntelliJ Platform

* reword symbol navigation a bit

Co-authored-by: John Hake <39627202+JohnHake@users.noreply.github.com>
2020-09-21 17:04:27 +02:00

2.2 KiB

title
Navigation

Warning

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

The Go to Declaration or Usages action is performed in several steps.

Direct Navigation

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.

To provide PsiElement for direct navigation, implement and register DirectNavigationProvider.

Symbol Navigation

If there is no Direct navigation available under the caret, then the IntelliJ Platform proceeds with Symbol navigation. In this step the IntelliJ Platform computes the navigation targets based on target symbols, which it obtains by resolving a reference. If there are several target symbols or several navigation targets defined for a symbol, then the IDE shows the navigation popup to ask the user to choose where to go.

The NavigationTarget is essentially a pair of a Navigatable and a TargetPopupPresentation instances (where to go and what to show in the popup).

To provide navigation targets by a Symbol, either:

Showing Usages

If there are no navigation targets available, then the IntelliJ Platform starts finding usages of the target symbol obtained by resolving a reference or from a declaration.