I am new to Eclipse which I use primarily for Java. I have previously used IntelliJ Idea in which it is possible to select a variable which extends Iteratable (Collection, List etc) and have it produce a correct foreach loop.
I know Eclipse does something similar with the foreach template, where it guesses which variable to iterate over, but I can't get it to the same thing with a selected variable. But what if the variable is not in the current scope and what if Eclipse guesses wrong?
So what I am trying to do is being able to select a variable (or function which returns a variable) which implements Iterator and have it return:
Selection:
functionWhichReturnsList() (which returns List<TypeOfItemsInList>)
Result:
for (TypeOfItemsInList item : functionWhichReturnsList()) {
${cursor}
}
Any ideas?
I typically create code like this by following these steps:
Call the function and use Ctrl-1 to create a local variable holding the return value:
List<TypeOfItemsInList> list = functionWhichReturnsList()
Type fore[Ctrl-space] to insert the for loop (since eclipse usually chooses the closest iterable when constructing the loop):
List<TypeOfItemsInList> list = functionWhichReturnsList()
for (TypeOfItemsInList item : list) {
}
Inline the local variable by putting the cursor on the list variable and typing Alt+Shift+I:
for (TypeOfItemsInList item : functionWhichReturnsList()) {
}
It's not optimal, but it works.
Update 2:
In Eclipse 4.4 What's New in Luna (JDT) a QuickFix was added for this issue. This can be also used for arrays, collections and maps (key sets and values).
Update 1
I recently found an eclipse plugin that provides postfix code completion (https://github.com/trylimits/Eclipse-Postfix-Code-Completion). This is how it works for the foreach loop:
Beside, the plugin provides more helpful competitions :)
For Eclipse before 4.4:
I'm also having the same issue but I wasn't able to find a solution. So, for the moment I perform following steps to get the desired loop.
fore[Ctrl-space] and select the foreach template, I get the following:
for (iterable_type iterable_element : iterable) {
}
then I perform a double click on iterable
and replace it with the method:
for (iterable_type iterable_element : functionWhichReturnsList()) {
}
on the next step just click on functionWhichReturnsList()
and hit Ctrl-1. Eclipse will suggest to change the type iterable_element
to TypeOfItemsInList
. This is want you get at the end:
for (TypeOfItemsInList iterable_element : functionWhichReturnsList()) {
}
Now, you just need to find a proper name for iterable_element
. Just double click on it and start typing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With