Update: the Luna formatter plugin now lives on GitHub, thanks to Asier Lostalé!
Java code formatter in Eclipse 4.5 has been completely rewritten. There's a lot less of bugs, the behavior is more consistent, and line wrapping is a bit smarter. It also opens way to easier implementation of new improvements in the future.
While most users will probably be happy with the new formatter, for some the changes may be unwelcome. Probably the most controversial change is a more restrictive approach to the "Never join already wrapped lines" option - a lot of line breaks that used to be tolerated by the old formatter, will be now removed if they don't fit the line wrapping settings. Also, some teams just don't want to force everyone to immediately switch to the newest Eclipse, so during the transition it would be problematic if part of the team used different formatter.
If you also find that problems related to changed formatter behavior outweigh the benefits of bug fixes and improvements, you'll be glad to hear that Eclipse Mars has a new extension point for Java formatter. So it's easy to take the code of the old formatter and wrap it in a plugin. I did just that for your convenience, the plugin can be downloaded here. Although I tested it a bit, the plugin is provided "as is" and I take no responsibility for anything that happens because of it. Just unzip the provided jar into the "plugins" directory of your Eclipse installation, restart, and in the Preferences -> Code Style -> Formatter page select Formatter implementation: Old formatter. Happy formatting!
Saturday, June 13, 2015
Subscribe to:
Post Comments (Atom)
69 comments:
Thank you, this works nicely! I almost had to revert to Eclipse Luna.
Hi,
seems it doesn't work on properties, ex :
public interface MyInterface
{
String PROP1 = "prop1";
String PROP2 = "prop2";
}
It doesn't keep old formatting.
+
I've placed the attached jar into my plugins directory but don't see the indicated option to switch to the old format... where should I be looking?
Disregard the previous comment. I had an old folder from a previous install... silly me.
Seems to work with the exception that I also had to manually change the "tab size" setting from 4 to 2 to make it behave as before.
Echoing DerEinDa. Thanks so much. I wanted to use Mars at work and I was going to have to switch back to Luna until a coworker found this post.
Thanks for the workaround (plugin), my coworkers don't have all switched to Eclipse Mars and this change was a big problem to allow Eclipse Mars and Eclipse Luna coexistence.
How do i do that with Eclipse 4.3 Kepler?
Oh my god, you are a godsend. It took me forever to find out what exactly was going on and then to find your plugin. It works flawlessly. No more complaints from my colleagues that my code style is whacky.
Genius! Thanx a lot!
I've extracted the content of jar file into {eclipse-home}/plugins directory and restarted my eclipse. But still the same issue.
On my previous version (Luna) I've created my formatter XML which I'm using in Mars but it is behaving differently.
it is not working.
Awesome!
Works like charm.
It just seems there are still minor differences, which I cannot explain. Anyway, this will enable me to use Mars.
Thank you :)
Not working in OS X 10.10.5 :(
I can't see the Formatter implementation select option.
One important step if you're using the "Eclipse [built-in]" profile, is that the profile itself also differs from Luna. So the plugin isn't quite enough in that case. I just opened my Luna and created a "Eclipse [built-in] Luna" profile which I cloned from the built-in profile. Then I just exported it to Mars. If you already have a custom profile, you're probably exporting anyway, but if you're just using the default, keep this in mind.
My Mars profile is now working exactly like my coworkers' Luna profiles. Thanks for the plugin!
Your suggestion is not working for me.
first of all the code style is under preferences--> Java-->code Style-->Formatter
within that, I have created new profile using Eclipse built in and checked "Never join already wrapped lines" and select Old formatter for "Formatter implementation". applied the change and restarted Eclipse. Still same problem persisting.
Does not work in Eclipse Neon (4.6)
Hello,
thx for your plugin! Works like a charm.
Is it possible for you,to create a update site out of the plugin? We distribute eclipse through a tool called SDC and this needs a updatesite, so that we can add the plugin.
regards
Wow this is really great - saved my week! ("saved my day" would be not honour enough for your great solution!) :-)
Unfortunately this doesn't work with Neo anymore :-(
First of all, thanks a lot for providing the old formatter!
Unfortunately though, it doesn't seem to work with Eclipse 4.6 (Neon).
Any chance you provide a plugin working with neon? Or some pointers how to wrap the old formatter as a 'neon' plugin?
Thanks a lot!
Hey, I've just updated the bundle to make it work with Eclipse Neon - download it again and you should see the jar with version 1.1.0.
Don't forget to remove the old jar if you have it in plugins folder.
If there's any problem, try running Eclipse in clean mode.
The new version 1.1.0 works like a charm with Eclipse Neon. Thanks a lot for providing this!
Hey, I am using Neon, but can't seem to find the tick-box to select the old formatter...
Hey, I have the same issue. Can't find where to select the old formatter.
I am using Eclipse Neon 64-bit. Will the old formatter word for both 32 and 64 bit?
I am using OldJavaFormatter_1.1.0.201606242022.jar. Thanks for your effort. Much appreciated..
Same issue here. Selection to old formatter not available.... Also using Eclipse Neon 64bit.
Using a modified profile cloned from K&R. Would love to use this, if I can only get it selected!!
Mateusz,
Is it maybe possible to look why the selection for the old formatter does not disply?
I am using a cloned & modified formatter profile with Eclipse Neon.
I am using
Version: Neon Release (4.6.0)
Build id: 20160613-1800
OldJavaFormatter_1.1.0.201606242022.jar
and can select it under
Preferences -> Java -> Code Style -> Formatter
There is a dropdown in the middle ...
Hi Omit,
I have the same Eclipse Build as you.
I have copied OldJavaFormatter_1.1.0.201606242022.jar to c:\eclipse\plugins
When I navigate to Window->preferences, I see the following options:
General, C/C++, Changelog, Help, Install/Update, Library Hover, Mylyn, Oomph, Remote Development, Remote Systems, RPM, Run/Debug, Team, Terminal, Tracing
There is no Java selection...
Code Style is under Window->preferences->C/C++->Code Style->Formatter but there is nothing to select...
I am using Java 8 Update 31. I have the same issue on 2 different PC's....
I am not sure is it's an installation issue????
Any help would be greatly appreciated.
Try placing the jar file in the 'dropins' directory instead of the 'plugins' directory. This is what I had to do.
Eclise Neon with OldJavaFormatter 1.1.0
Hi,
I tried that - did not seem to make any difference. I am also not sure if I am looking at the right place for the selection to the old formatter... Can anyone please confirm?
This worked fine in eclipse Mars, but it fails with Neon :(
Here is the error I get:
The save participant 'org.eclipse.jdt.ui.postsavelistener.cleanup' caused an exception: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.impl.CompilerOptions.versionToJdkLevel(Ljava/lang/Object;)J
java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.impl.CompilerOptions.versionToJdkLevel(Ljava/lang/Object;)J
at org.eclipse.jdt.old.formatter.CodeFormatterVisitor.(CodeFormatterVisitor.java:206)
at org.eclipse.jdt.old.formatter.DefaultCodeFormatter.formatCompilationUnit(DefaultCodeFormatter.java:243)
at org.eclipse.jdt.old.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:167)
at org.eclipse.jdt.old.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:150)
at org.eclipse.jdt.internal.corext.util.CodeFormatterUtil.reformat(CodeFormatterUtil.java:288)
at org.eclipse.jdt.internal.corext.util.CodeFormatterUtil.reformat(CodeFormatterUtil.java:351)
at org.eclipse.jdt.internal.corext.fix.CodeFormatFix.createCleanUp(CodeFormatFix.java:69)
at org.eclipse.jdt.internal.ui.fix.CodeFormatCleanUp.createFix(CodeFormatCleanUp.java:61)
at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring.calculateChange(CleanUpRefactoring.java:789)
at org.eclipse.jdt.internal.corext.fix.CleanUpPostSaveListener.saved(CleanUpPostSaveListener.java:387)
at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$5.run(CompilationUnitDocumentProvider.java:1636)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
Hi,
I've managed to workaround that error in Neon with this code https://github.com/alostale/luna-java-formatter/commit/bffac295bc52f9c5d1c9d80fdf42571525085f27
But now the problem is that the format is completely messy :(
Any help/comment is more than welcome.
BTW, I created a github repo for this: https://github.com/alostale/luna-java-formatter
@Anonymous from July 2: looks like you're using Eclipse to work with C/C++ code. This blog post is about Java code formatting and it has nothing to do with C code formatting (completely different tool).
@Asier Lostalé: I've fixed this compilation error in version 1.1.0 - have you tried it? See my comment from June 24.
Thanks @Mateusz Matela it works great also in Neon!
Sorry I didn't see the latest comment.
Would it be possible for you to share the source code of the plugin?
Thank you very much! You rock ;)
(My team has been using your plugin with eclipse 4.5 and we're preparing to upgrade to 4.6 - really happy about your update!)
Looks like there's still a bug in Neon. We have our indentation set to 3 spaces and the OldJavaFormatter always uses 4 no matter what you have the indentation set as.
@d3b5s3r I can change Old Formatter's indention in Neon without problems, you must be doing something wrong or have a general configuration problem. Try in a fresh workspace, check if changing other settings works for you and if the new formatter can see changes in profile, maybe you'll get some clues from these tests.
It's definitely using the old formatter. I think I've found the problem I had the indentation set to 3 spaces, tab size to 4 and the tab policy is spaces only. It's using the tab size and not the indentation size for the indentation. I can workaround it by setting the tab size to 3 as well.
It looks correct in the Profile edit screen but not the preview screen in the section where you select your profile.
Anyone know how use the old formatter on eclipse Neon? I tried to copy the jar file but on preferences I don't find the selector of the formatter
Under Eclipse Neon.2 (4.6.2), I needed to place the plugin in the "dropins" folder instead of the plugins folder to get it to work.
Would be nice to know what you modified to upgrade the version so we can do it for the next eclipse release (Oxygen).
Thank you for your nice work
Did anyone make it work with latest Eclipse Oxygen?
Hi, sorry for the noise: it simply works also in Oxygen.
I just didn't install it correctly...
It worked for Neon, but not for Oxygen. I placed the exact same OldJavaFormatter_1.1.0.201606242022.jar file in the dropins folder with any success. Any ideas?
It simply does not work with Eclipse Oxygen. I put the .jar in the dropins folder and it sees the formatter alright, but id does not perform the actual formatting. Ctrl+Shift+F does nothing! Somebody please help!
It does not work because there is a compilation error in https://github.com/alostale/luna-java-formatter/blob/master/src/org/eclipse/jdt/luna/formatter/CodeFormatterVisitor.java#L1865
I just fixed it locally and might do a pull request later unless Asier fixes it sooner.
Please, do the pull request. I just created the repo in github because there was not any and I wanted to do a contrib, but I'm not the author neither I do maintain it.
I've created a new jar including the new pull request:
https://github.com/alostale/luna-java-formatter/releases/tag/1.1.4
For me previous version was working up to Oxygen.1 but stopped working from Oxygen.1a.
Post a Comment