| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- NewPage --> |
| <html lang="en"> |
| <head> |
| <!-- Generated by javadoc (1.8.0_181) on Fri Sep 14 11:38:30 BST 2018 --> |
| <title>Overview (Refactoring API)</title> |
| <meta name="date" content="2018-09-14"> |
| <link rel="stylesheet" type="text/css" href="javadoc.css" title="Style"> |
| <script type="text/javascript" src="script.js"></script> |
| </head> |
| <body> |
| <script type="text/javascript"><!-- |
| try { |
| if (location.href.indexOf('is-external=true') == -1) { |
| parent.document.title="Overview (Refactoring API)"; |
| } |
| } |
| catch(err) { |
| } |
| //--> |
| </script> |
| <noscript> |
| <div>JavaScript is disabled on your browser.</div> |
| </noscript> |
| <!-- ========= START OF TOP NAVBAR ======= --> |
| <div class="topNav"><a name="navbar.top"> |
| <!-- --> |
| </a> |
| <div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div> |
| <a name="navbar.top.firstrow"> |
| <!-- --> |
| </a> |
| <ul class="navList" title="Navigation"> |
| <li class="navBarCell1Rev">Overview</li> |
| <li>Package</li> |
| <li>Class</li> |
| <li>Use</li> |
| <li><a href="overview-tree.html">Tree</a></li> |
| <li><a href="deprecated-list.html">Deprecated</a></li> |
| <li><a href="index-files/index-1.html">Index</a></li> |
| <li><a href="help-doc.html">Help</a></li> |
| </ul> |
| <div class="aboutLanguage">org.netbeans.modules.refactoring.api 1.49.1 1</div> |
| </div> |
| <div class="subNav"> |
| <ul class="navList"> |
| <li>Prev</li> |
| <li>Next</li> |
| </ul> |
| <ul class="navList"> |
| <li><a href="index.html?overview-summary.html" target="_top">Frames</a></li> |
| <li><a href="overview-summary.html" target="_top">No Frames</a></li> |
| </ul> |
| <ul class="navList" id="allclasses_navbar_top"> |
| <li><a href="allclasses-noframe.html">All Classes</a></li> |
| </ul> |
| <div> |
| <script type="text/javascript"><!-- |
| allClassesLink = document.getElementById("allclasses_navbar_top"); |
| if(window==top) { |
| allClassesLink.style.display = "block"; |
| } |
| else { |
| allClassesLink.style.display = "none"; |
| } |
| //--> |
| </script> |
| </div> |
| <a name="skip.navbar.top"> |
| <!-- --> |
| </a></div> |
| <!-- ========= END OF TOP NAVBAR ========= --> |
| <div class="header"> |
| <h1 class="title">Refactoring API<br/><span style='font-style:normal; font-size:medium; font-weight:normal; background-color:#ddcc80;'><a href='http://wiki.netbeans.org/API_Stability#Devel' target='_blank'>Under Development</a></span></h1> |
| </div> |
| <div class="header"> |
| <div class="subTitle"> |
| <div class="block"> |
| The Refactoring API module provides UI and API framework for easy and uniform implementation of refactoring features.</div> |
| </div> |
| <p>See: <a href="#overview.description">Description</a></p> |
| </div> |
| <div class="contentContainer"> |
| <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Refactoring API table, listing packages, and an explanation"> |
| <caption><span>Refactoring API</span><span class="tabEnd"> </span></caption> |
| <tr> |
| <th class="colFirst" scope="col">Package</th> |
| <th class="colLast" scope="col">Description</th> |
| </tr> |
| <tbody> |
| <tr class="altColor"> |
| <td class="colFirst"><a href="org/netbeans/modules/refactoring/api/package-summary.html">org.netbeans.modules.refactoring.api</a></td> |
| <td class="colLast"> </td> |
| </tr> |
| <tr class="rowColor"> |
| <td class="colFirst"><a href="org/netbeans/modules/refactoring/api/ui/package-summary.html">org.netbeans.modules.refactoring.api.ui</a></td> |
| <td class="colLast"> </td> |
| </tr> |
| <tr class="altColor"> |
| <td class="colFirst"><a href="org/netbeans/modules/refactoring/spi/package-summary.html">org.netbeans.modules.refactoring.spi</a></td> |
| <td class="colLast"> </td> |
| </tr> |
| <tr class="rowColor"> |
| <td class="colFirst"><a href="org/netbeans/modules/refactoring/spi/ui/package-summary.html">org.netbeans.modules.refactoring.spi.ui</a></td> |
| <td class="colLast"> </td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <div class="contentContainer"><a name="overview.description"> |
| <!-- --> |
| </a> |
| <div class="block"><p> |
| The Refactoring API module provides UI and API framework for easy and uniform implementation of refactoring features. |
| |
| The Refactoring module provides: |
| <ul> |
| |
| <li>API, which allows clients to invoke refactorings programmatically.</li> |
| |
| <li>Plug-in SPI that allows other clients to participate in existing refactorings. E.g. Java Refactoring module implements refactoring features for java files, |
| while J2EE module adds refactoring capability for deployment descriptors</li> |
| |
| <li>API for definition of new Refactorings and pluging them into Refactoring framework</li> |
| |
| </ul> |
| |
| </p> |
| <h3>What is New (see <a href="apichanges.html">all changes</a>)?</h3> |
| <ul> |
| |
| |
| <!--Search for dates that are later or equal to 1997-09-01 in |
| .--> |
| <!--Checking date 2015-6-27 with count of newer 0--><!--year ok--> |
| <li>Jun 27 '15 <a href="apichanges.html#ScopeProblem">Let ScopeProvider report a Problem.</a> |
| <p> |
| |
| <p> |
| When a ScopeProvider should be displayed, it returns true from the |
| initialize method, but it will not work or work as expected the |
| ScopeProvider can return a Problem. Added the method |
| getProblem() to ScopeProvider and getScopeProvider() to ScopePanel. |
| </p> |
| |
| </p> |
| </li> |
| <!--Checking date 2015-6-27 with count of newer 0--><!--year ok--> |
| <li>Jun 27 '15 <a href="apichanges.html#ScopeDependencies">Add property to include dependencies in Scope.</a> |
| <p> |
| |
| <p> |
| Added the property dependencies in class Scope to include dependencies of the specified scope, like libraries, used by WhereUsedQuery. |
| </p> |
| |
| </p> |
| </li> |
| <!--Checking date 2013-6-10 with count of newer 2--><!--year ok--> |
| <li>Jun 10 '13 <a href="apichanges.html#FilterSetSelected">Introduce a way to update a filter's selected state after creation.</a> |
| <p> |
| |
| <p> |
| Added the method setSelected, to introduce a way to update a filter's selected state after creation. |
| </p> |
| |
| </p> |
| </li> |
| <!--Checking date 2012-11-27 with count of newer 3--><!--year ok--> |
| <li>Nov 27 '12 <a href="apichanges.html#TransactionProgress">RefactoringCommit implements the interface ProgressProvider.</a> |
| <p> |
| |
| <p> |
| RefactoringCommit now implements the interface ProgressProvider |
| to notify the progress of the commit. |
| </p> |
| |
| </p> |
| </li> |
| <!--Checking date 2012-8-31 with count of newer 4--><!--year ok--> |
| <li>Aug 31 '12 <a href="apichanges.html#ServerSideQueries">Added support for Scope Providers and ExpandableTreeElements.</a> |
| <p> |
| |
| <p> |
| Added an ExpandableTreeElement and a declarative way to add new scopes. |
| </p> |
| |
| </p> |
| </li> |
| <!--Checking date 2012-8-8 with count of newer 5--><!--Skipped as the amount of changes is too big--> |
| <!--Checking date 2012-7-4 with count of newer 6--><!--Skipped as the amount of changes is too big--> |
| <!--Checking date 2012-4-11 with count of newer 7--><!--Skipped as the amount of changes is too big--> |
| <!--Checking date 2011-12-21 with count of newer 8--><!--Skipped as the amount of changes is too big--> |
| <!--Checking date 2011-6-30 with count of newer 9--><!--Skipped as the amount of changes is too big--> |
| <!--Checking date 2011-3-20 with count of newer 10--><!--Skipped as the amount of changes is too big--> |
| <!--Checking date 2007-9-4 with count of newer 11--><!--Skipped as the amount of changes is too big--> |
| </ul> |
| <h3>Use Cases</h3> |
| <answer id="arch-usecases"> |
| Refactoring module provides API for refactorings. The idea is that at least the most elementary set of refactorings should be |
| available via an API, so that the refactorings could be invoked programmatically. This is particulary useful when creating more |
| complex refactorings. These can then be composed from the primitive refactorings accessible via an API using delegation. As an example we can use |
| a simple rename refactoring. When renaming a class in a J2SE environment, simple rename refactoring (which renames all occurrences of |
| the class) is sufficient. However in a J2EE environment, renaming a class may require renaming of other classes to preserve the functionality |
| of the application (e.g. synchrinized renaming a home and remote interface for an EJB). This could be achieved by creating a more complex rename |
| refactoring composed of two simple rename refactorings (one for each class to be renamed). |
| <p></p> |
| When analyzing flow of various refactorings, we have found out that the steps in the flow are very common for all |
| refactorings. The flow is as follows: |
| <ul> |
| |
| <li>User selects an object (or set of objects) and chooses to invoke a particular refactoring on it.</li> |
| |
| <li>Refactoring pre-conditions are checked - whether a given refactoring can be invoked on a given object (or set of objects) or not. User needs to be |
| presented with errors (if any). The errors can be fatal or non-fatal. If an error is fatal, it means the refactoring cannot be performed, if it is not |
| fatal, user should be notified of the problem but still be able to proceed with the refactoring.</li> |
| |
| <li>User sets parameters of the refactoring - each refactoring has some input parameters (e.g. new name for an element in case of Rename refactoring). |
| These parameters need to be set by the client.</li> |
| |
| <li>Entered values of refactoring parameters are checked - errors (if any) are presented to the user.</li> |
| |
| <li>Refactoring collects all changes that need to be performed and presents them to the user.</li> |
| |
| <li>User can choose to not perform a particular set of proposed changes.</li> |
| |
| <li>Refactoring is performed - all the changes confirmed by user are made to the source code.</li> |
| |
| </ul> |
| To make the implementation of various refactorings consistent, the refactoring module provides an API and UI framework that allows these refactorings to be plugged in. This |
| framework enforces the above flow. Using this framework (set of SPI and API) the refactoring implementor can focus purely on the things specific to that particular refactoring |
| (specific pre-conditions checks, parameters checks, implementation of changes, etc.) and leave the |
| functionality that is common for all refactorings (implementation of the flow) up to the framework. |
| <p></p> |
| It is quite common that some modules need to be able to affect the behavior of a refactoring. There are 4 typical use-cases when this is desirable: |
| <ol> |
| |
| <li>A module wants to implement refactoring features for their own elements. For instance Java Refactoring module wants to implement Refactoring for Java elements.</li> |
| |
| <li>A module wants to participate in existing refactoring. E.g. refactoring of java files requires refactoring of non-java files in J2EE area. When a code is refactored, these non-java files need to be refactored too. |
| We can mention JSP files or deployment descriptors as an example.</li> |
| |
| <li>A module introduces some hidden relationships between several elements. E.g. a single logical EJB consists of several physical classes. When one of these classes are refactored, |
| the other classes need to be refactored as well.</li> |
| |
| <li>A module generates some derived code into the guarded blocks. In such case it is desirable that the provider of the guarded block refactors the guarded code, since |
| the refactoring module itself has no knowledge of where the guarded code comes from.</li> |
| |
| </ol> |
| The refactoring module provides hooks for other modules - an SPI that allows other modules to participate in refactorings. The modules can participate on all refactoring |
| phases from "preCheck" (checking preconditions), through "checkParameters" (checking validity of refactoring parameters) to "prepare" (collecting changes). |
| Use-cases number 1), 2) and 3) are covered by the same SPI (interfaces RefactoringPluginFactory and RefactoringPlugin). The forth use-case (guarded blocks) are covered by |
| a separate set of interfaces, since for this use-case the module does not need to participate in all refactoring phases. The refactoring framework itself automatically detects |
| that a given change points to a code in guarded blocks and requests all registered guarded block providers to handle that situation. |
| <p></p> |
| The rest of this section provides simple orientational examples of API/SPI usage. |
| <p></p> |
| |
| <b>Refactoring API</b> can be used for programmatical invocation of refactorings and for pluging ui for these refactorings in. |
| <p> |
| <i><b>Refactoring API Example:</b></i> |
| </p> |
| |
| <i>Intention:</i> Programatically rename java file<code>com/company/Test.java</code> to <code>com/company/RenamedTest.java</code> and update references. |
| <pre xml:space="preserve"> |
| |
| FileObject fo = ...com/company/Test.java... |
| RefactoringSession renameSession = RefactoringSession.create("Rename Class"); |
| refactoring = new RenameRefactoring(fo); |
| Problem pre = refactoring.preCheck(); |
| if (pre!=null && pre.isFatal()) { |
| //fatal problem in precheck |
| return; |
| } |
| refactoring.setNewName("RenamedTest"); |
| Problem p = refactoring.prepare(renameSession); |
| |
| if (p!=null && p.isFatal()) { |
| //fatal problem in precheck |
| return; |
| } |
| |
| renameSession.doRefactoring(true /* saveAll */); |
| </pre> |
| |
| |
| <p> |
| |
| <b>Refactoring SPI</b> permit other modules to plug into existing refactorings and allow them to participate. |
| Client of SPI must implement factory class <code>RefactoringPluginFactory</code> and register this class into Lookup. |
| </p> |
| |
| <i><b>Refactoring SPI Example 1:</b></i> |
| |
| <p> |
| |
| <i>Intention:</i> Create a plugin for RenameRefactoring, which will participate in existing refactoring (let say in java refactoring) |
| and renames references in XML files. |
| </p> |
| |
| <pre xml:space="preserve"> |
| //implementation of factory class |
| public class J2EERefactoringFactory implements RefactoringPluginFactory { |
| |
| public RefactoringPlugin createInstance(AbstractRefactoring refactoring) { |
| |
| if (refactoring instanceof RenameRefactoring) { |
| //return our custom instance for RenameRefactoring |
| if (wantToParticipate(refactoring.getRefactoredObject()) |
| return new J2EERenameRefactoringPlugin((RenameRefactoring) refactoring); |
| } |
| |
| if (refactoring instanceof ... { |
| ... |
| } |
| |
| return null; |
| } |
| |
| } |
| </pre> |
| |
| It is necessary to register <code>J2EERefactoringFactory</code> in the lookup: |
| <pre xml:space="preserve"> |
| META-INF/services/org.netbeans.modules.refactoring.spi.RefactoringPluginFactory |
| </pre> |
| |
| <p> |
| and implement RefactoringPlugin interface: |
| </p> |
| |
| |
| <pre xml:space="preserve"> |
| //implementation of RefactoringPlugin |
| public class J2EERenameRefactoringPlugin implements RefactoringPlugin { |
| |
| private RenameRefactoring refactoring; |
| |
| public J2EERenameRefactoringPlugin(RenameRefactoring refactoring) { |
| this.refactoring = refactoring; |
| } |
| |
| public Problem preCheck() { |
| ... |
| } |
| |
| public Problem checkParameters() { |
| ... |
| } |
| |
| public Problem fastCheckParameters() { |
| ... |
| } |
| |
| public void cancelRequest() { |
| ... |
| } |
| |
| public Problem prepare(RefactoringElementsBag refactoringElements) { |
| RenameRefactoring renameRefactor = ((RenameRefactoring)refactoring); |
| Object element = renameRefactor.getRefactoredObject(); |
| if (...) { |
| ... |
| //lets add our RefactoringElements for usages found in XML files |
| refactoringElements.add(refactoring, new XMLRenameRefactoringElement()); |
| } |
| return null; |
| } |
| |
| public class XMLRenameRefactoringElement implements RefactoringElementImplementation { |
| |
| public void performChange() { |
| //do change |
| } |
| } |
| </pre> |
| |
| |
| <i><b>Refactoring SPI Example 2:</b></i> |
| <i>Intention:</i> Create a module, which will add Rename... to html files |
| First you must create your ActionsImplementationProvider: |
| <pre xml:space="preserve"> |
| public class MyProvider extends ActionsImplementationProvider { |
| |
| public boolean canRename(Lookup lookup) { |
| Node[] nodes = lookup.lookupAll(Node.class); |
| if (..one node selected and the node belongs to html...) |
| return true; |
| else |
| return fals; |
| } |
| |
| public void doRename(Lookup selectedNodes) { |
| Node[] nodes = lookup.lookupAll(Node.class); |
| final FileObject fo = getFileFromNode(nodes[0]); |
| return new Runnable() { |
| public void run() { |
| UI.openRefactoringUI(new RenameRefactoringUI(fo); |
| } |
| } |
| } |
| } |
| </pre> |
| And of course your own RefactoringPlugin and RefactoringPluginFactory see |
| <i><b>Refactoring SPI Example 1</b></i> and |
| <i><b>Refactoring SPI Example 2</b></i> |
| |
| <br> |
| |
| <i><b>Refactoring SPI Example 3</b></i> |
| Module wants to implement it's own refactoring preview tree: |
| |
| Register your own TreeElementFactoryImplementation into META-INF/services |
| if you want to build your own RefactoringPreview tree. |
| |
| For instance Java Refactoring understand Java - specific objects e.g. |
| Projects, Groups, Methods etc. |
| |
| <pre xml:space="preserve"> |
| public TreeElement getTreeElement(Object o) { |
| . |
| . |
| if (o instanceof SourceGroup) { |
| return new SourceGroupTreeElement((SourceGroup)o); |
| } else if (o instanceof SomethingFromJava) { |
| return new SomethingFromJavaTreeElement((SomethingFromJava) o); |
| } |
| </pre> |
| TreeElement is then displayed in refactoring preview panel. |
| |
| <br> |
| |
| <br> |
| |
| <br>Other usecases are docummented in javadoc. |
| <ul> |
| |
| <li>Module wants to add common Refactoring Action into popup. <br> |
| See <a href="org/netbeans/modules/refactoring/api/ui/RefactoringActionsFactory.html" shape="rect">RefactoringActionsFactory</a> |
| |
| </li> |
| |
| <li> |
| http://wiki.netbeans.org/wiki/view/RefactoringFAQ |
| </li> |
| |
| </ul> |
| |
| |
| </answer> |
| <h3>Exported Interfaces</h3> |
| |
| This table lists all of the module exported APIs |
| with |
| defined stability classifications. It is generated |
| based on answers to questions about the architecture |
| of the module. <a href="architecture-summary.html">Read them all</a>... |
| |
| |
| <a name="group-java"> |
| <h5>Group of java interfaces</h5> |
| </a> |
| <table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%"> |
| <tr> |
| <td> |
| <table border="0" cellpadding="3" cellspacing="1" width="100%"> |
| <tr class="tablersh"> |
| <td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td> |
| </tr> |
| <tr class="tabler"> |
| <td>RefactoringAPI</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="java-RefactoringAPI"></a></td> |
| </tr> |
| <tr class="tabler"> |
| <td>RefactoringSPI</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="java-RefactoringSPI"></a></td> |
| </tr> |
| </table> |
| </td> |
| </tr> |
| </table> |
| <p></p> |
| <a name="group-property"> |
| <h5>Group of property interfaces</h5> |
| </a> |
| <table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%"> |
| <tr> |
| <td> |
| <table border="0" cellpadding="3" cellspacing="1" width="100%"> |
| <tr class="tablersh"> |
| <td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td> |
| </tr> |
| </table> |
| </td> |
| </tr> |
| </table> |
| <p></p> |
| <a name="group-lookup"> |
| <h5>Group of lookup interfaces</h5> |
| </a> |
| <table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%"> |
| <tr> |
| <td> |
| <table border="0" cellpadding="3" cellspacing="1" width="100%"> |
| <tr class="tablersh"> |
| <td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td> |
| </tr> |
| <tr class="tabler"> |
| <td>org.netbeans.modules.refactoring.spi.RefactoringPluginFactory</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="lookup-org.netbeans.modules.refactoring.spi.RefactoringPluginFactory"></a></td> |
| </tr> |
| <tr class="tabler"> |
| <td>org.netbeans.modules.refactoring.spi.GuardedBlockHandlerFactory</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="lookup-org.netbeans.modules.refactoring.spi.GuardedBlockHandlerFactory"></a></td> |
| </tr> |
| <tr class="tabler"> |
| <td>org.netbeans.modules.refactoring.spi.ReadOnlyFilesHandler</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="lookup-org.netbeans.modules.refactoring.spi.ReadOnlyFilesHandler"></a></td> |
| </tr> |
| <tr class="tabler"> |
| <td>org.netbeans.modules.refactoring.spi.ui.ActionsImplementationProvider</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="lookup-org.netbeans.modules.refactoring.spi.ui.ActionsImplementationProvider"></a></td> |
| </tr> |
| <tr class="tabler"> |
| <td>org.netbeans.modules.refactoring.spi.ui.TreeElementFactoryImplementation</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Devel">Under Development</a></td><td><a name="lookup-org.netbeans.modules.refactoring.spi.ui.TreeElementFactoryImplementation"></a></td> |
| </tr> |
| </table> |
| </td> |
| </tr> |
| </table> |
| <p></p> |
| <a name="group-layer"> |
| <h5>Group of layer interfaces</h5> |
| </a> |
| <table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%"> |
| <tr> |
| <td> |
| <table border="0" cellpadding="3" cellspacing="1" width="100%"> |
| <tr class="tablersh"> |
| <td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td> |
| </tr> |
| </table> |
| </td> |
| </tr> |
| </table> |
| <p></p> |
| <h3>Implementation Details</h3> |
| <h5>Where are the sources for the module?</h5> |
| |
| <p> |
| <p> |
| The sources for the module are in the |
| <a href="http://hg.netbeans.org/" shape="rect">NetBeans Mercurial repositories</a>. |
| </p> |
| </p> |
| |
| <h5>What do other modules need to do to declare a dependency on this one, in addition to or instead of a plain module dependency?</h5> |
| Nothing. |
| <p> |
| Read more about the implementation in the <a href="architecture-summary.html">answers to |
| architecture questions</a>. |
| </p></div> |
| </div> |
| <!-- ======= START OF BOTTOM NAVBAR ====== --> |
| <div class="bottomNav"><a name="navbar.bottom"> |
| <!-- --> |
| </a> |
| <div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div> |
| <a name="navbar.bottom.firstrow"> |
| <!-- --> |
| </a> |
| <ul class="navList" title="Navigation"> |
| <li class="navBarCell1Rev">Overview</li> |
| <li>Package</li> |
| <li>Class</li> |
| <li>Use</li> |
| <li><a href="overview-tree.html">Tree</a></li> |
| <li><a href="deprecated-list.html">Deprecated</a></li> |
| <li><a href="index-files/index-1.html">Index</a></li> |
| <li><a href="help-doc.html">Help</a></li> |
| </ul> |
| <div class="aboutLanguage">org.netbeans.modules.refactoring.api 1.49.1 1</div> |
| </div> |
| <div class="subNav"> |
| <ul class="navList"> |
| <li>Prev</li> |
| <li>Next</li> |
| </ul> |
| <ul class="navList"> |
| <li><a href="index.html?overview-summary.html" target="_top">Frames</a></li> |
| <li><a href="overview-summary.html" target="_top">No Frames</a></li> |
| </ul> |
| <ul class="navList" id="allclasses_navbar_bottom"> |
| <li><a href="allclasses-noframe.html">All Classes</a></li> |
| </ul> |
| <div> |
| <script type="text/javascript"><!-- |
| allClassesLink = document.getElementById("allclasses_navbar_bottom"); |
| if(window==top) { |
| allClassesLink.style.display = "block"; |
| } |
| else { |
| allClassesLink.style.display = "none"; |
| } |
| //--> |
| </script> |
| </div> |
| <a name="skip.navbar.bottom"> |
| <!-- --> |
| </a></div> |
| <!-- ======== END OF BOTTOM NAVBAR ======= --> |
| <p class="legalCopy"><small><span class="footnote">Built on September 14 2018. | Copyright © 2017-2018 Apache Software Foundation. All Rights Reserved.</span></small></p> |
| </body> |
| </html> |