blob: fb832be1a93548d4231be71504c6b4d4f9c41d22 [file] [log] [blame]
<!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 &gt; 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 &gt; 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;">&gt;</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 &amp;&amp;
!b </code></td>
<td style="vertical-align: top;">&gt;</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)
&amp;&amp; (c != d)&nbsp; {}</code></td>
<td style="vertical-align: top;">&gt;</td>
<td style="vertical-align: top;" width="34%"><code>if (a == b &amp;&amp; c !=
d)&nbsp; {}</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
&amp;&amp; c != d)&nbsp; {}</code> </td>
<td style="vertical-align: top;">&gt;</td>
<td style="vertical-align: top;" width="34%"><code>if ((a == b) &amp;&amp; (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;">&gt;</td>
<td style="vertical-align: top;" width="34%"><code>if (a &amp;&amp; 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;">&gt;</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
&amp;&amp; b) {}</code></td>
<td style="vertical-align: top;">&gt;</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;">&gt;</td>
<td style="vertical-align: top;" width="34%"><code> if (a) x();&nbsp; 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;">&gt;</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 &amp;&amp; c</code></td>
<td style="vertical-align: top">&gt;</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
&amp;&amp; c)</code></td>
<td style="vertical-align: top">&gt;</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;">&gt;</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;">&gt;</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;">&gt;</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&nbsp;
a ? 1 : 2;</code></td>
<td style="vertical-align: top;">&gt;</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">&gt;</td>
<td style="vertical-align: top" width="34%"><code>if (kind == 1) {<br>&nbsp;&nbsp;return
-1;<br>} else if (kind == 2) {<br>&nbsp;&nbsp;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;">&gt;</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;">&gt;</td>
<td style="vertical-align: top;" width="34%"><code> if (obj instanceof Vector) {<br>
&nbsp;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;">&gt;</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;">&gt;</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;">&gt;</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;">&gt;</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">&gt;</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;">&gt;</td>
<td style="vertical-align: top;" width="34%"><code>Color fColor;<br>
public A(int color) {<br>
&nbsp;&nbsp;&nbsp; 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;">&gt;</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;">&gt;</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;">&gt;</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;">&gt;</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=&nbsp; { 1, 2, 3 }</code></td>
<td style="vertical-align: top;">&gt;</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;">&gt;</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;">&gt;</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>