My simple Java decompiler is up and running, as seen below.

It is now able to display field names, and displays the fully qualified type name as well. The field names are obtained and reconstructed from the constant pool table.

In the Java Language Specification, Java SE 7 Edition, I find that there is no documentation on import statements, so I believe that the import statement is constructed by the compiler on a first come, first listed basis. What that means is that in order to reconstruct the imports statements, I would need to figure out how to extract it out from the class itself. This requires further investigation.

The other issue I have is that all names are currently fully qualified. Reducing the fully qualified names is easy. All I have to do is construct two tables, one with long name (ie, the fully qualified name), mapping to a short name, and the other one with a short name, mapping to a long name. Why two tables? I believe that after reducing the long name to the short name, I need to perform a lookup, just in case that there's a collision of short names. If a collision exists, then I would need to use the long name, instead of the short name.

It seems that writing a Java decompiler is quite a challenging task!