mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-30 10:17:50 +08:00
psi_references.md: minor edits
This commit is contained in:
parent
b834bf59a8
commit
02ff23cb6e
@ -49,7 +49,7 @@ File f = new File("foo.txt");
|
||||
|
||||
Here, "foo.txt" has no special meaning from the point of view of the Java syntax - it's just a string literal.
|
||||
However, opening this example in IntelliJ IDEA and having a file called "foo.txt" in the same directory, one can <shortcut>Ctrl/Cmd+Click</shortcut> on "foo.txt" and navigate to the file.
|
||||
This works because the IDE recognizes the semantics of `new File(...)` and _contributes a reference_ into the string literal passed as a parameter to the method.
|
||||
This works because the IDE recognizes the semantics of `new File(...)` and contributes a reference into the string literal passed as a parameter to the method.
|
||||
|
||||
Typically, references can be contributed to elements that don't have their own references, such as string literals and comments.
|
||||
References are also often contributed to non-code files, such as XML or JSON.
|
||||
@ -60,7 +60,7 @@ For example, your plugin can contribute references to Java code, even though the
|
||||
Implement [`PsiReferenceContributor`](%gh-ic%/platform/core-api/src/com/intellij/psi/PsiReferenceContributor.java) registered in `com.intellij.psi.referenceContributor` extension point.
|
||||
|
||||
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](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()`.
|
||||
|
||||
See also [Reference Contributor tutorial](reference_contributor.md).
|
||||
|
||||
@ -72,7 +72,7 @@ However, there are cases when the situation is different.
|
||||
The first case is *soft references*.
|
||||
Consider the `new File("foo.txt")` example above.
|
||||
If the IDE can't find the file "foo.txt", it doesn't mean that an error needs to be highlighted - maybe the file is only available at runtime.
|
||||
Such references return `true` from the `PsiReference.isSoft()` method.
|
||||
Such references return `true` from the `PsiReference.isSoft()` method, which can then be used in inspection/annotator to skip highlighting them completely or use a lower severity.
|
||||
|
||||
The second case is *polyvariant references*.
|
||||
Consider the case of a JavaScript program.
|
||||
@ -84,14 +84,14 @@ For resolving a `PsiPolyVariantReference`, you call its `multiResolve()` method.
|
||||
The call returns an array of [`ResolveResult`](%gh-ic%/platform/core-api/src/com/intellij/psi/ResolveResult.java) objects.
|
||||
Each of the objects identifies a PSI element and also specifies whether the result is valid.
|
||||
For example, suppose you have multiple Java method overloads and a call with arguments not matching any of the overloads.
|
||||
In that case, you will get back `ResolveResult` objects for all of the overloads, and `isValidResult()` returns `false` for all of them.
|
||||
In that case, you will get back `ResolveResult` objects for all the overloads, and `isValidResult()` returns `false` for all of them.
|
||||
|
||||
## Searching for References
|
||||
|
||||
As you already know, resolving a reference means going from usage to the corresponding declaration.
|
||||
To perform the navigation in the opposite direction - from a declaration to its usages - perform a **references search**.
|
||||
Resolving a reference means going from usage to the corresponding declaration.
|
||||
To perform the navigation in the opposite direction - from a declaration to its usages - perform a _references search_.
|
||||
|
||||
To perform a search using [`ReferencesSearch`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java), specify the *element* to search for, and optionally other parameters such as the scope in which the reference needs to be searched.
|
||||
To perform a search using [`ReferencesSearch`](%gh-ic%/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java), specify the element to search for, and optionally other parameters such as the scope in which the reference needs to be searched.
|
||||
The created [`Query`](%gh-ic%/platform/core-api/src/com/intellij/util/Query.java) allows obtaining all results at once or iterating over the results one by one.
|
||||
The latter allows stopping processing as soon as the first (matching) result has been found.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user