add javac option
refactor classes, generics, names and tests.