psi_cookbook.md: update, upsource-ify

This commit is contained in:
Yann Cébron 2021-06-23 15:39:15 +02:00
parent 531b6c6412
commit c208053aec

View File

@ -1,6 +1,6 @@
[//]: # (title: PSI Cookbook) [//]: # (title: PSI Cookbook)
<!-- Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. --> <!-- Copyright 2000-2021 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -->
This page gives recipes for the most common operations for working with the PSI (Program Structure Interface). This page gives recipes for the most common operations for working with the PSI (Program Structure Interface).
Unlike [Developing Custom Language Plugins](custom_language_support.md), it talks about working with the PSI of existing languages (such as Java). Unlike [Developing Custom Language Plugins](custom_language_support.md), it talks about working with the PSI of existing languages (such as Java).
@ -9,55 +9,59 @@ Unlike [Developing Custom Language Plugins](custom_language_support.md), it talk
> >
{type="tip"} {type="tip"}
## General
### How do I find a file if I know its name but don't know the path? ### How do I find a file if I know its name but don't know the path?
`FilenameIndex.getFilesByName()` [`FilenameIndex.getFilesByName()`](upsource:///platform/indexing-api/src/com/intellij/psi/search/FilenameIndex.java)
### How do I find where a particular PSI element is used? ### How do I find where a particular PSI element is used?
`ReferencesSearch.search()` [`ReferencesSearch.search()`](upsource:///platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java)
### How do I rename a PSI element? ### How do I rename a PSI element?
`RefactoringFactory.createRename()` [`RefactoringFactory.createRename()`](upsource:///platform/lang-api/src/com/intellij/refactoring/RefactoringFactory.java)
### How can I cause the PSI for a virtual file to be rebuilt? ### How can I cause the PSI for a virtual file to be rebuilt?
`FileContentUtil.reparseFiles()` [`FileContentUtil.reparseFiles()`](upsource:///platform/lang-api/src/com/intellij/util/FileContentUtil.java)
## Java Specific ## Java Specific
> If your plugin depends on Java functionality and targets 2019.2 or later, please make sure to follow the steps from this [blog post](https://blog.jetbrains.com/platform/2019/06/java-functionality-extracted-as-a-plugin/). > If your plugin depends on Java functionality and targets 2019.2 or later, please make sure to follow the steps from this [blog post](https://blog.jetbrains.com/platform/2019/06/java-functionality-extracted-as-a-plugin/).
> Also consider using [UAST](uast.md) if your plugin supports other JVM languages.
> >
{type="note"} {type="note"}
### How do I find all inheritors of a class? ### How do I find all inheritors of a class?
`ClassInheritorsSearch.search()` [`ClassInheritorsSearch.search()`](upsource:///java/java-indexing-api/src/com/intellij/psi/search/searches/ClassInheritorsSearch.java)
### How do I find a class by qualified name? ### How do I find a class by qualified name?
`JavaPsiFacade.findClass()` [`JavaPsiFacade.findClass()`](upsource:///java/java-psi-api/src/com/intellij/psi/JavaPsiFacade.java)
### How do I find a class by short name? ### How do I find a class by short name?
`PsiShortNamesCache.getInstance().getClassesByName()` [`PsiShortNamesCache.getClassesByName()`](upsource:///java/java-indexing-api/src/com/intellij/psi/search/PsiShortNamesCache.java)
### How do I find a superclass of a Java class? ### How do I find a superclass of a Java class?
`PsiClass.getSuperClass()` [`PsiClass.getSuperClass()`](upsource:///java/java-psi-api/src/com/intellij/psi/PsiClass.java)
### How do I get a reference to the containing package of a Java class? ### How do I get a reference to the containing package of a Java class?
```java ```java
PsiJavaFile javaFile = (PsiJavaFile) psiClass.getContainingFile(); PsiJavaFile javaFile = (PsiJavaFile) psiClass.getContainingFile();
PsiPackage pkg = JavaPsiFacade.getInstance(project).findPackage(javaFile.getPackageName()); PsiPackage psiPackage = JavaPsiFacade.getInstance(project)
.findPackage(javaFile.getPackageName());
``` ```
or or
`com.intellij.psi.util.PsiUtil.getPackageName()` [`PsiUtil.getPackageName()`](upsource:///java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java)
### How do I find the methods overriding a specific method? ### How do I find the methods overriding a specific method?
`OverridingMethodsSearch.search()` [`OverridingMethodsSearch.search()`](upsource:///java/java-indexing-api/src/com/intellij/psi/search/searches/OverridingMethodsSearch.java)