Pages

Monday, August 29, 2011

What’s Cool In IntelliJIDEA. Part III: External Tools

Previous posts about IntelliJ
What’s Cool In IntelliJIDEA. Part I
What’s Cool In IntelliJIDEA. Part II: Live Templates


Although there is almost any kind of functionality available in IntelliJIDEA, either as a base functionality or via plugins, there's still a fraction of probability involved that you might want to do something that goes beyond the power of the IDE. For such rare cases you might want to take a look at External Tools in IntelliJ.

Just recently I've encountered such a case myself - I wanted to use an utility from JDK, but in a more flexible way than just switching to command line and navigating to the correct location. My idea was that I should just press an arbitrary shortcut and get the result. So I decided to give External Tools a try.

The utility I use a lot when studying Java is javap - the java class file disassembler. This is due I study the bytecode sometimes. And although there's ASM plugin available for IntelliJ that basically can provide me the result I needed, I still prefer to read the raw javap output.

To setup javap in Intellij as an External Tool go to Settings >> External Tools and press Add... . You can then define the location of the tool, the working directory, and the parameters.


The nice part of it is that IntelliJ provides some basic macros in order to dynamically resolve the parameters for the tool. So for javap it was enough to set $FileClass$ for the parameter, and $OutputPath$ as the working directory. And that's it - the tool is now ready for use.


You can also define a "group" which is then used to group the external tools in the popup menu. I use "jdk" as a group name for javap so here's what it looks after:


So that's cool but you might have noticed that it is not that comfortable to use - have to right-click the file, navigate to "jdk" group, expand it, and only then can execute javap. Well, shortcuts to the rescue! Browse to Settings >> Keymap, and there you can define any sortcut for the tool. The nice part of it is that IntelliJ detects if you select a conflicting shortcut and notifies you.


One more tweak left to do. Once I press the shortcut that I've assigned to javap, the result of decompilation is printed out to the IDE console, which is just below the source code. But it would be more convenient to see it side by side. For that, it is possible to drag-and-drop the Run window to the side panel in IntelliJ so the result can be observed right next to the source I'm currently working with.


The only thing that is probably missing is the syntax highlight for the javap output, but that is probably too much to wish.



8 comments:

Javin Paul said...
This comment has been removed by a blog administrator.
asolntsev said...

Прикольна!
А как ещё это можно использовать? Всё-таки javap большинству из нас обычно не надо.

Anton Arhipov said...

@asolntsev

да впринципе любую команду/программу/утилиту, которая может делать чтото, чего IntelliJ не делает. Например сгенериговать keystore, скопировать чтото на FTP, запустить ping. Ну вобщем - сколько у тебя фантазии хватит :)

С другой стороны - не могу сказать что в таких вещах есть уж большая нужда. Разумнее всего это делать именно для какого то класса или артефакта в проекте. Т.е. для javap это довольно подходящий сценарий.

markee174 said...

It would be great if the article linked to part 1 and 2 in your series.

Anton Arhipov said...

@markee174 good point, thx!

Denis Zhdanov said...

You can also combine the such tools to the quick lists - http://denis-zhdanov.blogspot.com/2011/04/idea-candy-custom-context-menu.html

Anton Arhipov said...

@Denis, thx! that's a cool one!

Mostafa said...

It was amazing! Thanks a lot!

Disqus for Code Impossible