This is not my work - I am just sharing this programme which some people may find interesting
smali2java is based on smali files generated by apktool v1.5.0 with baksmali v1.3.4. smali2java depends on information such as code line number(.line keyword) and varialbe name(.local keyword) etc. Thus it can furthest reduce orignal java source code. The reduced java code will keep orignal variable names. The code sequence will be the same as orignal java code too. And also for this reason, this tool has limitaion. It only works for those smali files that have line numbers and varialbe name. Some java compiler options can eliminate these information from bytecodes.
Screenshots in spoiler
Note - This is probably only useful just to compare for learning - Its unlikely you will be able to build anything from this
Download - Here
Original Website - Here