SourceAgainTM Web Version Documentation


When this option is invoked, all inner scopes will be braced, even if the scope is only one statement in length.


When SourceAgain is invoked with this option, it will not strip import prefixes from types and variables. For instance, SourceAgain normally removes the java.lang prefix whenever encountered. However, this may cause conflicts with other classes. For example, if you have a mypackage.Object class, stripping the java.lang prefix from java.lang.Object would be incorrect.

-full cn

This option forces full qualification of the class named cn. When an entire package is not being decompiled at once, name conflicts may go unnoticed. For example, java.lang.Object must be fully qualified when used within a package which defines its own Object, i.e. mypackage.Object. Instead of using -fullname to fully qualify all names, this option can be used to selectively qualify those few names which may be ambiguous.


This option forces all integral constants used in assignments to be printed in hexadecimal. SourceAgain uses a heuristic to determine when to print a constant in hex; -hexassign allows all assignments to fall into the hex category.


Use this option to let SourceAgain make up names for almost all elements of the class file, including method names, field names, and variable names. WARNING: Because this option will rename elements of your Java standard libraries, this will almost certainly produce Java code that will not be exactly equivalent to the original. This option should only be used for documentation purposes.


Some class files may have field names that are "fishy", i.e., they contain non printable characters. While it is perfectly legal to have unicode field names, this can look a bit confusing on output. By default, SourceAgain does not use fishy names. It instead renames those symbols. Use the -fishy command if you would like to see the original names.


Some class files may have bogus entries in the local variable name tables, which cause SourceAgain to produce illegal code. This is possible because the Java VM makes no use of the variable name tables; they are purely for debugging. Therefore, a class file is free to insert anything into the local variable name table, including strings that do not represent legal Java identifiers. Use -ilocal to ignore the local variable name tables, and let SourceAgain create variable names on its own.


Some obfuscators rename only private field and method names. When decompling bytecode with obfuscated private members, use this option.


This option will cause all local variables to be given default initializers: null for objects, and zero otherwise.


This option will convert all generated names to lowercase.


SourceAgain decompiles and applies a post processing heuristic which converts while loops that "look like" for loops into for loops. Sometimes, this may not be desired. Use the -nofor option to leave these loops as while loops.


By default, SourceAgain uses the InnerClasses attribute to decompile classes at their correct inner scopes. When this option is used, all inner classes will be treated as outer classes. This option is most useful when determining how inner classes are implemented by a particular compiler. This option may produce source that is not recompilable because of private access violations.


This option will cause the generated code to adhere strictly to some language features that were added in the 1.1 specification of Java. Use this option if your class files were created under a 1.0.2 compliant compiler.

-tabwidth n

By default, SourceAgain prints four spaces for each indentation level. To specify a different number of spaces, use this option. Specifying a tab width of zero emits the tab character instead.


By default SourceAgain declares all local variables at their inner most scope. Use this option to declare all local variables at the top level scope.

Further contact and product information is available on Ahpah's web site at If you would prefer to speak to an Ahpah employee directly, contact us at (650) 960-2472.

SourceAgain and the Ahpah name are trademarks of Ahpah Software, Inc. All other trademarks are the registered property of their respective owners.

SourceAgain Documentation © 2004 Ahpah Software, Inc.