| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <head> |
| <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2007. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." > |
| <meta content="text/html; charset=ISO-8859-1" |
| http-equiv="content-type"> |
| <link rel="stylesheet" href="../book.css" charset="ISO-8859-1" |
| type="text/css"> |
| <title>Quick Assist</title> |
| <script language="JavaScript" src="PLUGINS_ROOT/org.eclipse.help/livehelp.js"> </script> |
| </head> |
| <body> |
| <h1>Quick Assist</h1> |
| |
| <p>Quick assists perform local code transformations. They are invoked on a selection or a single cursor in the Java editor and |
| use the same shortcut as quick fixes (<b>Ctrl+1</b>), but quick assist are usually hidden when an error is around. |
| (To show them even with errors, select the target before pressing <b>Ctrl+1</b>).<br> |
| <br> |
| A selection of quick assists can be assigned to a direct shortcut. By default, these are:</p><ul> |
| <li>Rename in file: <b>Ctrl+2, R</b></li> |
| <li>Assign to local: <b>Ctrl+2, L</b></li> |
| <li>Assign to field: <b>Ctrl+2, F</b></li> |
| </ul> |
| <p>Assign more shortcuts or change the default shortcuts on the |
| <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.ui.preferencePages.Keys)")'> |
| <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens keys preference page"> |
| <b>General > Keys</b></a> preference page (in the 'Source' category). |
| <br> |
| <br> |
| A quick assist light bulb can be turned on on the |
| <a class="command-link" href='javascript:executeCommand("org.eclipse.ui.window.preferences(preferencePageId=org.eclipse.jdt.ui.preferences.JavaEditorPreferencePage)")'> |
| <img src="PLUGINS_ROOT/org.eclipse.help/command_link.png" alt="Opens Java editor preference page"> |
| <b>Java > Editor</b></a> preference page. |
| <br> |
| </p> |
| <table style="width: 100%; text-align: left;" border="1" cellpadding="5" summary="List of quick assists"> |
| <tbody> |
| <tr> |
| <th style="vertical-align: top;" width="15%">Name</th> |
| <th colspan="3" rowspan="1" |
| style="vertical-align: top; text-align: center;">Code example</th> |
| <th style="vertical-align: top;" width="15%">Invocation location</th> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Inverse if statement</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (x) a(); else b();</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if (!x) b(); else a();</code></td> |
| <td style="vertical-align: top;" width="15%">on 'if' statements with 'else' |
| block</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Inverse boolean expression</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>a && |
| !b </code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>!a || b</code></td> |
| <td style="vertical-align: top;" width="15%">on a boolean expression</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Remove extra parentheses</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if ((a == b) |
| && (c != d) {}</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if (a == b && c != |
| d) {}</code></td> |
| <td style="vertical-align: top;" width="15%">on selected expressions</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Add paranoidal parentheses</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a == b |
| && c != d) {}</code> </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if ((a == b) && (c != d)</code></td> |
| <td style="vertical-align: top;" width="15%">on selected expressions</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Join nested if statements</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) { if |
| (b) {} }</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if (a && b) {}</code></td> |
| <td style="vertical-align: top;" width="15%">on a nested if statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Swap nested if statements</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) { if |
| (b) {} }</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if (b) { if (a) {} }</code></td> |
| <td style="vertical-align: top;" width="15%">on a nested if statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Split if statement with and'ed |
| expression</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a |
| && b) {}</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if (a) { if (b) {} }</code></td> |
| <td style="vertical-align: top;" width="15%">on an and'ed expression in a 'if'</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Split if statement with or'd |
| expression</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a || b) |
| x();</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code> if (a) x(); if (b) x();</code></td> |
| <td style="vertical-align: top;" width="15%">on an or'd expression in a 'if'</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Inverse conditional expression</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>x ? b : c</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>!x ? c : b</code></td> |
| <td style="vertical-align: top;" width="15%">on a conditional expression</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top" width="15%">Pull negation up</td> |
| <td style="vertical-align: top; text-align: right" width="34%"><code>b && c</code></td> |
| <td style="vertical-align: top">></td> |
| <td style="vertical-align: top" width="34%"><code>!(!b || !c)</code></td> |
| <td style="vertical-align: top" width="15%">On a boolean expression</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top" width="15%">Push negation down</td> |
| <td style="vertical-align: top; text-align: right" width="34%">!(<code>b |
| && c)</code></td> |
| <td style="vertical-align: top">></td> |
| <td style="vertical-align: top" width="34%">!<code>b || !c</code></td> |
| <td style="vertical-align: top" width="15%">On a negated boolean expression</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">If-else assignment to |
| conditional expression</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) x= 1; |
| else x= 2;</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>x= a ? 1 : 2;</code></td> |
| <td style="vertical-align: top;" width="15%">on an 'if' statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">If-else return to conditional |
| expression</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) return |
| 1; <br> |
| else return 2;</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>return a ? 1 : 2;</code></td> |
| <td style="vertical-align: top;" width="15%">on an 'if' statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Conditional expression |
| assignment to If-else</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>x= a ? 1 : 2;</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code> if (a) x= 1; else x= 2;</code></td> |
| <td style="vertical-align: top;" width="15%">on a conditional expression</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Conditional expression return to |
| If-else</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>return |
| a ? 1 : 2;</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if (a) return 1; else return 2;</code></td> |
| <td style="vertical-align: top;" width="15%">on a conditional expression</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top" width="15%">Switch to If-else</td> |
| <td style="vertical-align: top; text-align: right" width="34%"><code>switch (kind) {<br>case 1: return -1;<br>case 2: return -2;<br>}</code> |
| </td> |
| <td style="vertical-align: top">></td> |
| <td style="vertical-align: top" width="34%"><code>if (kind == 1) {<br> return |
| -1;<br>} else if (kind == 2) {<br> return -2;<br>}</code> |
| </td> |
| <td style="vertical-align: top" width="15%">on a switch statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Exchange operands</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>a + b</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>b + a</code></td> |
| <td style="vertical-align: top;" width="15%">on an infix operation</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Cast and assign</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (obj |
| instanceof Vector) {<br> |
| }</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code> if (obj instanceof Vector) {<br> |
| Vector vec= (Vector)obj;</code><br> |
| }</td> |
| <td style="vertical-align: top;" width="15%">on a instanceof expression in an 'if' or 'while' statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Pick out string</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>"abcdefgh"</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>"abc" + "de" + "fgh"</code></td> |
| <td style="vertical-align: top;" width="15%">select a part of a string literal</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Split variable</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>int i= 0;</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code> int i; i= 0;</code></td> |
| <td style="vertical-align: top;" width="15%">On a variable with initialization</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Join variable</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>int i; i= 0;</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code> int i= 0</code></td> |
| <td style="vertical-align: top;" width="15%">On a variable without |
| initialization</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Assign to variable</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>foo()</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>X x= foo();</code></td> |
| <td style="vertical-align: top;" width="15%">On an expression statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top" width="15%">Extract to local</td> |
| <td style="vertical-align: top; text-align: right" width="34%"><code>foo(<u>getColor()</u>);</code></td> |
| <td style="vertical-align: top">></td> |
| <td style="vertical-align: top" width="34%"><code>Color color= getColor();<br>foo(color);</code> |
| </td> |
| <td style="vertical-align: top" width="15%">On an expression</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Assign parameter to field</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>public A(int |
| color) {}</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>Color fColor;<br> |
| public A(int color) {<br> |
| fColor= color;<br> |
| }</code></td> |
| <td style="vertical-align: top;" width="15%">On a parameter</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Add finally block</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>try {<br> |
| } catch (Expression e) {<br> |
| }<br> |
| </code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>try {<br> |
| } catch (Expression e) {<br> |
| } finally {}</code></td> |
| <td style="vertical-align: top;" width="15%">On a try/catch statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Add else block</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>if (a) b();</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>if (a) b(); else { }</code></td> |
| <td style="vertical-align: top;" width="15%">On a if statement</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Replace statement with block</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>f (a) b();</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code> if (a) { b(); }</code></td> |
| <td style="vertical-align: top;" width="15%">On a if statement </td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Invert equals</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>a.equals(b)</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>b.equals(a)</code></td> |
| <td style="vertical-align: top;" width="15%">On a invocation of 'equals'</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Array initializer to Array |
| creation</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>int[] |
| i= { 1, 2, 3 }</code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>int[] i= new int[] { 1, 2, 3 }</code></td> |
| <td style="vertical-align: top;" width="15%">On an array initializer</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Convert to 'enhanced for loop' |
| (J2SE 5.0)</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>for (Iterator |
| i= c.iterator();i.hasNext();) {<br> |
| }<br> |
| </code></td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>for (x : c) {<br> |
| }</code></td> |
| <td style="vertical-align: top;" width="15%">On a for loop</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Create method in super class</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code></code> |
| <br> |
| </td> |
| <td style="vertical-align: top;"><br> |
| </td> |
| <td style="vertical-align: top;" width="34%"><code></code><br> |
| </td> |
| <td style="vertical-align: top;" width="15%">On a method declaration</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Unwrap blocks</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>{ a() }</code> |
| </td> |
| <td style="vertical-align: top;">></td> |
| <td style="vertical-align: top;" width="34%"><code>a()</code></td> |
| <td style="vertical-align: top;" width="15%">On blocks, if/while/for |
| statements</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Rename in file</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><br> |
| <code></code> |
| </td> |
| <td style="vertical-align: top;"><br> |
| </td> |
| <td style="vertical-align: top;" width="34%"><code></code><br> |
| </td> |
| <td style="vertical-align: top;" width="15%">On identifiers</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Extract to local variable</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><br> |
| <code>a= b*8;</code> |
| </td> |
| <td style="vertical-align: top;"><br> |
| </td> |
| <td style="vertical-align: top;" width="34%"><code>int x= a*8; a= x;</code><br> |
| </td> |
| <td style="vertical-align: top;" width="15%">On expressions</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Extract to constant</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><br> |
| <code>a= 8;</code> |
| </td> |
| <td style="vertical-align: top;"><br> |
| </td> |
| <td style="vertical-align: top;" width="34%"><code>final static int CONST= 8; a= CONST;</code><br> |
| </td> |
| <td style="vertical-align: top;" width="15%">On expressions</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Inline local variable</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><br> |
| <code>int a= 8, b= a;</code> |
| </td> |
| <td style="vertical-align: top;"><br> |
| </td> |
| <td style="vertical-align: top;" width="34%"><code>int b= 8;</code><br> |
| </td> |
| <td style="vertical-align: top;" width="15%">On local variables</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Convert local variable to field</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><br> |
| <code>void foo() { int a= 8; }</code> |
| </td> |
| <td style="vertical-align: top;"><br> |
| </td> |
| <td style="vertical-align: top;" width="34%"><code>int a= 8; void foo() {}</code><br> |
| </td> |
| <td style="vertical-align: top;" width="15%">On local variables</td> |
| </tr> |
| <tr> |
| <td style="vertical-align: top;" width="15%">Convert anonymous to nested class</td> |
| <td style="vertical-align: top; text-align: right;" width="34%"><br> |
| <code>new Runnable() { };</code> |
| </td> |
| <td style="vertical-align: top;"><br> |
| </td> |
| <td style="vertical-align: top;" width="34%"><code>class RunnableImplementation implements Runnable { }</code><br> |
| </td> |
| <td style="vertical-align: top;" width="15%">On anonymous classes</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <p><img src="../images/ngrelc.png" alt="Related concepts" border="0"></p> |
| <p><a href="concepts-7.htm">Java editor</a><br> |
| <a href="cquickfix.htm">Quick Fix</a></p> |
| |
| <p><img src="../images/ngrelr.png" alt="Related reference" border="0"></p> |
| <p><a href="../reference/ref-2.htm">JDT actions</a></p> |
| </body> |
| </html> |