开发者

"Surround with"-template in Eclipse: foreach

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 vari开发者_C百科able 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).

"Surround with"-template in Eclipse: foreach

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:

"Surround with"-template in Eclipse: foreach

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.


As far as I know Eclipse does not support that in the way you describe.

If Eclipse does not find the right variable you can use the tabulator key to iterate through the placeholders in the foreach template. At the iterable point eclipse will show you a list of iterables you can choose from.


You probably cannot do that in eclipse, but type for and hit Ctrl-Space twice you will see the code templates menu pop up. Then you could select functionWhichReturnsList() in proper place and eclipse will do the rest.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜