intellij-sdk-code-samples/basics/psi_cookbook.html
2016-01-14 19:38:06 -08:00

155 lines
8.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>PSI Cookbook / IntelliJ Platform SDK DevGuide</title>
<link rel="stylesheet" href="/intellij/sdk/docs/app/css/styles.min.css">
<!-- non-retina iPad pre iOS 7 -->
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-72x72.png" sizes="72x72">
<!-- retina iPhone pre iOS 7 -->
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-114x114.png" sizes="114x114">
<!-- retina iPad pre iOS 7 -->
<link rel="apple-touch-icon" href="/intellij/sdk/docs/apple-touch-icon-144x144.png" sizes="144x144">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/intellij/sdk/docs/apple-touch-icon-precomposed.png">
<!-- normal favicon -->
<link rel="shortcut icon" type="image/x-icon" href="/intellij/sdk/docs/favicon.ico">
<link rel="icon" type="image/png" href="/intellij/sdk/docs/favicon.png">
<link rel="stylesheet" href="/intellij/sdk/docs/styles/styles.css"></head>
<body data-id="basics/psi_cookbook">
<div class="wrapper">
<section class="panel _nav">
<header class="panel__header">
<div class="container">
<form class="search-box">
<label for="search-box__input" class="search-box__label">
<input type="text" class="search-box__input" id="search-box__input" placeholder="Search IntelliJ Platform SDK DevGuide">
</label>
<div class="search-box__clear" title="Clear"></div>
</form>
</div>
</header>
<nav class="panel__content">
<div class="container _nav">
<menu class="nav-tree"></menu>
</div>
<div class="container _footer panel__footer">
<p><a href="https://youtrack.jetbrains.com/issues/IJSDK">Send feedback</a></p>
<p>&copy; 2000&ndash;2016 <a href="//www.jetbrains.com">JetBrains</a> s.r.o.<br>
All rights reserved.</p>
</div>
</nav>
</section>
<main class="panel _main" role="main">
<header class="panel__header">
<div class="container">
<h3>IntelliJ Platform SDK DevGuide</h3>
<div class="shortcuts-switcher"><label for="switch-shortcuts">Keymap:</label><select id="switch-shortcuts" class="select _shortcuts" height="1">
<option data-group="primary" value="default" selected>Default</option>
<option data-group="primary" value="default_for_gnome">GNOME</option>
<option data-group="primary" value="default_for_kde">KDE</option>
<option data-group="primary" value="default_for_xwin">XWindow</option>
<option data-group="primary" value="emacs">Emacs</option>
<option data-group="primary" value="jbuilder">JBuilder</option>
<option data-group="primary" value="visual_studio">Visual Studio</option>
<option data-group="primary" value="netbeans_6.5">NetBeans 6.5</option>
<option data-group="primary" value="eclipse">Eclipse</option>
<option data-group="secondary" value="mac_os_x_10.5_">OS X 10.5+</option>
<option data-group="secondary" value="mac_os_x">OS X</option>
<option data-group="secondary" value="eclipse_mac_os_x">OS X Eclipse</option></select>
</div>
<div class="panel-trigger"></div>
</div>
</header>
<section class="panel__content">
<div class="container">
<article class="article" data-shortcut-switcher="false">
<h1>PSI Cookbook</h1>
<p>This page gives a list of recipes for the most common operations for working with the PSI (Program Structure Interface). Unlike <a href="/intellij/sdk/docs/reference_guide/custom_language_support.html"><span>Developing Custom Language Plugins</span></a>, it talks about working with the PSI of existing languages (such as Java).</p>
<a name="how-do-i-find-a-file-if-i-know-its-name-but-dont-know-the-path" class="elem-anchor"></a>
<h2>How do I find a file if I know its name but dont know the path?<a href="#how-do-i-find-a-file-if-i-know-its-name-but-dont-know-the-path" class="anchor-link"><span></span></a></h2>
<p><code class="code highlight language-text">FilenameIndex.getFilesByName()</code></p>
<a name="how-do-i-find-where-a-particular-psi-element-is-used" class="elem-anchor"></a>
<h2>How do I find where a particular PSI element is used?<a href="#how-do-i-find-where-a-particular-psi-element-is-used" class="anchor-link"><span></span></a></h2>
<p><code class="code highlight language-text">ReferencesSearch.search()</code></p>
<a name="how-do-i-rename-a-psi-element" class="elem-anchor"></a>
<h2>How do I rename a PSI element?<a href="#how-do-i-rename-a-psi-element" class="anchor-link"><span></span></a></h2>
<p><code class="code highlight language-text">RefactoringFactory.createRename()</code></p>
<a name="how-can-i-cause-the-psi-for-a-virtual-file-to-be-rebuilt" class="elem-anchor"></a>
<h2>How can I cause the PSI for a virtual file to be rebuilt?<a href="#how-can-i-cause-the-psi-for-a-virtual-file-to-be-rebuilt" class="anchor-link"><span></span></a></h2>
<p><code class="code highlight language-text">FileContentUtil.reparseFiles()</code></p>
<a name="java-specific" class="elem-anchor"></a>
<h2>Java Specific<a href="#java-specific" class="anchor-link"><span></span></a></h2>
<a name="how-do-i-find-all-inheritors-of-a-class" class="elem-anchor"></a>
<h3>How do I find all inheritors of a class?<a href="#how-do-i-find-all-inheritors-of-a-class" class="anchor-link"><span></span></a></h3>
<p><code class="code highlight language-text">ClassInheritorsSearch.search()</code></p>
<a name="how-do-i-find-a-class-by-qualified-name" class="elem-anchor"></a>
<h3>How do I find a class by qualified name?<a href="#how-do-i-find-a-class-by-qualified-name" class="anchor-link"><span></span></a></h3>
<p><code class="code highlight language-text">JavaPsiFacade.findClass()</code></p>
<a name="how-do-i-find-a-class-by-short-name" class="elem-anchor"></a>
<h3>How do I find a class by short name?<a href="#how-do-i-find-a-class-by-short-name" class="anchor-link"><span></span></a></h3>
<p><code class="code highlight language-text">PsiShortNamesCache.getInstance().getClassesByName()</code></p>
<a name="how-do-i-find-a-superclass-of-a-java-class" class="elem-anchor"></a>
<h3>How do I find a superclass of a Java class?<a href="#how-do-i-find-a-superclass-of-a-java-class" class="anchor-link"><span></span></a></h3>
<p><code class="code highlight language-text">PsiClass.getSuperClass()</code></p>
<a name="how-do-i-get-a-reference-to-the-containing-package-of-a-java-class" class="elem-anchor"></a>
<h3>How do I get a reference to the containing package of a Java class?<a href="#how-do-i-get-a-reference-to-the-containing-package-of-a-java-class" class="anchor-link"><span></span></a></h3>
<pre><code class="code-block__wrapper code-block _highlighted lang_java"><span class="n">PsiJavaFile</span> <span class="n">javaFile</span> <span class="o">=</span> <span class="o">(</span><span class="n">PsiJavaFile</span><span class="o">)</span> <span class="n">psiClass</span><span class="o">.</span><span class="na">getContaningFile</span><span class="o">();</span>
<span class="n">PsiPackage</span> <span class="n">pkg</span> <span class="o">=</span> <span class="n">JavaPsiFacade</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">project</span><span class="o">).</span><span class="na">findPackage</span><span class="o">(</span><span class="n">javaFile</span><span class="o">.</span><span class="na">getPackageName</span><span class="o">());</span>
</code></pre>
<a name="how-do-i-find-the-methods-overriding-a-specific-method" class="elem-anchor"></a>
<h3>How do I find the methods overriding a specific method?<a href="#how-do-i-find-the-methods-overriding-a-specific-method" class="anchor-link"><span></span></a></h3>
<p><code class="code highlight language-text">OverridingMethodsSearch.search()</code></p>
<div class="last-modified">
Last modified: 23 November 2015
</div>
</article>
<section class="disqus">
<div id="disqus_thread"></div>
</section>
</div>
</section>
</main>
</div>
<script data-main="/intellij/sdk/docs/app/js/main.build" data-baseurl="/intellij/sdk/docs/" src="/intellij/sdk/docs/app/js/vendor/requirejs/require.js"></script>
</body>
</html>