Adam graduated from the University of Warsaw, receiving a Master's Degree in Computer Science. From 2005 till 2008 he was a software engineer at JBoss. There, he has been involved in various projects, like, JBoss Labs, JBoss.ORG portal and the JBoss.ORG feeds system; He has also created the Envers project, which later became a core module of Hibernate. For the last year he has been working as a senior software engineer at Level N Consulting, where he developed a large "cloud"-based application using JEE, Seam and other Java and JBoss technologies. Currently he is one of the co-founders of SoftwareMill, a company specializing in delivering customized software solutions ("Nonstandard software as a standard"). Privately, he is working on Envers and several small projects around static analysis (using JSR 308 - Typestate Annotations/ Checkers Framework and FindBugs), about which you can read on his blog. He is also interested in new JVM-based languages, especially with functional elements (like Scala) and frameworks built using them (like Lift). When not working, he enjoys hiking in the mountains (summer), skiing (winter) and playing tennis. You can find out more on his website: http://www.warski.org
Static analysis using JSR308 annotations
These days annotations in Java programs can be found almost everywhere - sometimes there are more annotations in a class than "regular" code. In this presentation I will show a way to increase that number even more.
The main topic of the presentation will be the JSR308 specification and the accompanying static analysis Checkers framework. I will first explain what are type annotations, show what are the new places where these annotations could be positioned, and how they can be defined. Later I will introduce the Checkers framework, which leverages JSR308 annotations to implement pluggable type-checking, helping programmers to detect errors early, at the compilation stage. The presentation will include an overview of exisiting checkers, included in the distribution, as well as a demo of some of the checkers in action. An example of such a checker verifies proper usage of @NotNull annotations. Finally, I will demo Typestate Checker, a checker built on the Checkers framework which I have developed. The checker is useful for specifying state transitions of objects and verifying that only objects in proper states are used in proper places. Examples here are an iterator, which can only be used as long as hasNext() returns true, or an input stream, which cannot be used after being closed.
JSR308 is scheduled to be included in Java7, which should be out by the end of 2010, so this will also be a preview of one of the features in the upcoming Java version. However, it is possible to use the power of the new annotations now, using Java 5 or Java 6; I will show how in the presentation (very little effort is required).
Home page of JSR308 and the Checkers framework: http://types.cs.washington.edu/jsr308/ Typestate checker: http://www.warski.org/typestate.html Maven2 JSR308 plugin: http://www.warski.org/checkersplugin.html