| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
| <html lang="en"> | |
| <head> | |
| <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2009. 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" type="text/javascript"> </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 present on the same line, press <b>Ctrl+1</b> a second time.<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="2" 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 statement</td> | |
| </tr> | |
| <tr> | |
| <td style="vertical-align: top;" width="15%">Add missing case statements on enums</td> | |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>switch (e){<br>}</code></td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>switch (e){<br> case E1: break;<br>case E2: break;<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%">Convert string concatination to StringBuilder (J2SE 5.0) or StringBuffer</td> | |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>"Hello " + name</code></td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>StringBuilder builder= new StringBuilder();<br>builder.append("Hello ");<br>builder.append(name);</code></td> | |
| <td style="vertical-align: top;" width="15%">select a string literal</td> | |
| </tr> | |
| <tr> | |
| <td style="vertical-align: top;" width="15%">Convert string concatination to MessageFormat</td> | |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>"Hello " + name</code></td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>MessageFormat.format("Hello {0}", name);</code></td> | |
| <td style="vertical-align: top;" width="15%">select 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> | |
| } | |
| </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 1.5)</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%"><br></td> | |
| <td style="vertical-align: top;"><br></td> | |
| <td style="vertical-align: top;" width="34%"><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></td> | |
| <td style="vertical-align: top;"><br> | |
| </td> | |
| <td style="vertical-align: top;" width="34%"><br> | |
| </td> | |
| <td style="vertical-align: top;" width="15%">On identifiers</td> | |
| </tr> | |
| <tr> | |
| <td style="vertical-align: top;" width="15%">Rename in workspace</td> | |
| <td style="vertical-align: top; text-align: right;" width="34%"><br></td> | |
| <td style="vertical-align: top;"><br> | |
| </td> | |
| <td style="vertical-align: top;" width="34%"><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%"> | |
| <code>a= b*8;</code> | |
| </td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>int x= a*8;<br>a= x;</code> | |
| </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%"> | |
| <code>a= 8;</code> | |
| </td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>final static int CONST= 8;<br>a= CONST;</code> | |
| </td> | |
| <td style="vertical-align: top;" width="15%">On expressions</td> | |
| </tr> | |
| <tr> | |
| <td style="vertical-align: top;" width="15%">Extract method</td> | |
| <td style="vertical-align: top; text-align: right;" width="34%"> | |
| <code>int x= p * 5;</code> | |
| </td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>int x= getFoo(p);</code> | |
| </td> | |
| <td style="vertical-align: top;" width="15%">On expressions and statements</td> | |
| </tr> | |
| <tr> | |
| <td style="vertical-align: top;" width="15%">Inline local variable</td> | |
| <td style="vertical-align: top; text-align: right;" width="34%"> | |
| <code>int a= 8, b= a;</code> | |
| </td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>int b= 8;</code> | |
| </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%"> | |
| <code>void foo() { int a= 8; }</code> | |
| </td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>int a= 8; void foo() {}</code> | |
| </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%"> | |
| <code>new Runnable() { };</code> | |
| </td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>class RunnableImplementation implements Runnable { }</code> | |
| </td> | |
| <td style="vertical-align: top;" width="15%">On anonymous classes</td> | |
| </tr> | |
| <tr> | |
| <td style="vertical-align: top;" width="15%">Replace with getter and setter (Encapsulate Field)</td> | |
| <td style="vertical-align: top; text-align: right;" width="34%"><code>p.x;</code> | |
| </td> | |
| <td style="vertical-align: top;">></td> | |
| <td style="vertical-align: top;" width="34%"><code>p.getX();</code> | |
| </td> | |
| <td style="vertical-align: top;" width="15%">On fields</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <p><img src="../images/ngrelc.png" alt="Related concepts" border="0"></p> | |
| <p> | |
| <a href="../concepts/concept-java-editor.htm">Java Editor</a><br> | |
| <a href="../concepts/concept-quickfix-assist.htm">Quick Fix and Quick Assist</a> | |
| </p> | |
| <p><img src="../images/ngrelr.png" alt="Related reference" border="0"></p> | |
| <p> | |
| <a href="ref-java-editor-quickfix.htm">Quick Fix</a><br> | |
| <a href="../reference/ref-jdt-actions.htm">JDT actions</a> | |
| </p> | |
| </body> | |
| </html> |