Over a million developers have joined DZone.

Meet a NetBeans Contributor: Benno Markiewicz

DZone's Guide to

Meet a NetBeans Contributor: Benno Markiewicz

· Java Zone ·
Free Resource

Download Microservices for Java Developers: A hands-on introduction to frameworks and containers. Brought to you in partnership with Red Hat.

Benno Markiewicz studied computer science in Leipzig, Germany, and still lives and works there. Software development has been his hobby since his school days, starting in 1997 with BASIC, x86-assembler, Pascal/Delphi, C#, and Java. Since 2007, software development is also his profession, via his post-graduate degree. 

He's developed web-based software for switch-gears and natural gas traders, mostly based on a stack consisting of Hibernate, Spring, JSF, GWT, and Java SE 6. And within the next months he will join the development of a big b2b e-procurement platform.

Benno, nice to meet you. Aside from everything else you're doing, you contribute patches to NetBeans IDE. How did that come about?

Last year I attended a Java EE 6 Best Practice training with NetBeans Dream Team member Adam Bien (http://www.adam-bien.com). Next to the surprise of how lean and lightweight development with Java EE 6 can be, I was impressed with NetBeans IDE 7.2, which Adam used in the course. Everything for starting Java EE 6 is in NetBeans IDE 7.2 and everything works out of the box. A real application server, quick fixes, and a lot of tooling. So I wanted to give NetBeans IDE a try, as I am tired of Eclipse and with its Maven integration issues too.

I started to use NetBeans IDE with some Java EE 6 project samples. First, I switched to the Eclipse keymap, since I was originally an Eclipse user, and tweaked the keymap for my own purposes, while adding some code templates, changing some colors, and so on. While working, I missed some features I am very used to from Eclipse:

  • I missed the path of the current file in the title bar.
  • I could not use a fully qualified class name in the "Go to Type" dialog.
  • I could not copy the fully qualified name of a class for documenting changes into bug trackers.
  • I could not copy the path of a file.
  • There were no save actions.
These features are standard in other IDEs and should be easy to implement too, I thought. So, I looked at the items above and found them in the NetBeans bug tracker and there were many votes for these missing features, though there were no solutions yet. "It is only plain Java with Swing and some additional APIs," I thought (which turned out to true), and so I started to try it myself, as an exercise.

What resources did you use to get started creating your contributions?

I read tutorials at the NetBeans Platform Learning Trail, at Geertjan's blog, and I read books (such as "NetBeans Platform 7" by Heiko Böck and "Rich Client Programming - Plugging into the NetBeans Platform" by Boudreau/Tulach/Wielenga) to get used to the basic principles of the NetBeans Platform, such as Lookup, module system, FileObject, DataObject, Nodes, and Actions. You need to know that NetBeans IDE is based on the NetBeans Platform and therefore this basic understanding is important.

Then I tried to reproduce the tutorials and used the wizards in the IDE to create actions and option panels and investigated how registration annotations are mapped into layer file entries, which is where you plug your contributions into NetBeans IDE.

And then the real work began! Which features did you start working on? 

Well, I created some external plugins, such as:

As you can see above, all these plugins are now officially available in the NetBeans Plugin Portal. I also tried to support save actions via another external plugin, but this will be obsolete with the advent of NetBeans IDE 7.3, because save actions will then be supported out of the box.

Have a look at the freely available source-code of these projects and you will see there is no magic code at all.

I have found that the more you work with and code for NetBeans IDE, the more features you want and the more bugs you become aware of. Most of the time the things that you want are simple things, though they would improve productivity significantly.

However, there are also features and issues which cannot be solved by providing external plugins, since sometimes they need to be implemented within the IDE's source code, right?

Right. In these cases, I reported the missing features and issues into the NetBeans bug tracker and now I consider those issues as my big "if there is time you could implement this" list.

And some issues were so simple, and the priority so low, that I doubted whether they would ever get fixed by the NetBeans engineers. Suspecting that complaining wouldn't speed things up, I tried to fix them myself. First, I had to check out the sources (which is documented in the NetBeans Wiki). Then I built the whole IDE via Ant. The build time is about 10 minutes on my computer, which is for the full IDE, including Java, Java EE, C++, and PHP. Wow!

How do you go about fixing bugs in NetBeans IDE?

My bug fixing approach is the following top-to-bottom-approach. Imagine you want to fix a typo somewhere in the IDE.

  1. Do a file-based search for the typo in the checked out sources.
  2. If found, open the project within the IDE, and fix it.
  3. Try out your fix by running/debugging the previously built IDE.
  4. Create a unit test if necessary.
  5. Create a patch from your fix and attach the patch to the bugzilla issue. Done.

Another previously detected approach is to identify the correct module by using the Visual Debugger. I also use JRebel to speed up the development cycle of NBM modules and of IDE bug fixing. It is not officially supported by the Zero Turnaround guys, but it works! I blogged about it here.

I must also note that while developing for NetBeans IDE, I learned a lot about how NetBeans IDE works, why certain features behave the way they do, and how to extend this or that.

How has the interaction with the NetBeans engineers been?

The interaction with the professional NetBeans engineers has been mostly done via issue comments. But there have also been a few interactions via e-mail. For example, with Tomas Zezula, who I'd like to thank for committing my patches! Or with Jiří Kovalský, thanks for letting the "Show Path in Title" plugin be the featured plugin for two weeks in the Plugin Portal. The NetBeans guys have a lot to do, see the growing list of issues at https://netbeans.org/bugzilla/ (not only bugs also many RFE), but they take the time to review and comment on issues. Each time they were friendly and helpful. They also appreciate patch contributions and are *very* thankful, especially for patches with unit tests.

But the patch contribution process has to be improved because as a contributor, i.e., the person who sends in patches, I want to know about the current state of the patch. I want the patch to be reviewed and committed if it is OK. But how can an issue with an attached patch be distinguished from an issue without a patch? Every day, many issues come in and some patch attached issues seem to go unnoticed. Currently, I have to wait, write e-mails to nbdev@netbeans.org, and hope that a NetBeans engineer stumbles across the issue. This process could be improved.

You've worked on quite some issues. Can you provide a complete list? 

There are also some items pending: http://netbeans.org/bugzilla/buglist.cgi?quicksearch=summary%3A%22Patch%20for%3A%22%20commenter%3Amarkiewb&list_id=94663

What will you work on next? I.e., after NetBeans IDE 7.3 comes out, what are the next patches you'd like to contribute?

I'd like to improve the version control summary view, in addition to other issues. The current state in NetBeans IDE isn't very user-friendly IMHO. I really like the way IntelliJ IDEA handles it. So, I am currently working on http://netbeans.org/bugzilla/show_bug.cgi?id=218850 for the first improvement. The next step would be http://netbeans.org/bugzilla/show_bug.cgi?id=218852.

And I will provide patches for the issues I found or my own RFEs. I hope that the issues I propose patches for are also useful for other NetBeans IDE users. It is a question of eating your own dog food!

Thanks for taking the interview, Benno. And I hope this will inspire others to scratch their own itches by contributing small patches in the way that you have been doing.  

Download Building Reactive Microservices in Java: Asynchronous and Event-Based Application Design. Brought to you in partnership with Red Hat


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}