git-svn-id: https://svn.code.sf.net/p/jode/code/tags/jode_1_1@1317 379699f6-c40d-0410-875b-85095c16579ejode_1_1
parent
edc69e287a
commit
042c35a412
@ -1,13 +0,0 @@ |
|||||||
# The "checkoutlist" file is used to support additional version controlled |
|
||||||
# administrative files in $CVSROOT/CVSROOT, such as template files. |
|
||||||
# |
|
||||||
# The first entry on a line is a filename which will be checked out from |
|
||||||
# the corresponding RCS file in the $CVSROOT/CVSROOT directory. |
|
||||||
# The remainder of the line is an error message to use if the file cannot |
|
||||||
# be checked out. |
|
||||||
# |
|
||||||
# File format: |
|
||||||
# |
|
||||||
# [<whitespace>]<filename><whitespace><error message><end-of-line> |
|
||||||
# |
|
||||||
# comment lines begin with '#' |
|
@ -1,15 +0,0 @@ |
|||||||
# The "commitinfo" file is used to control pre-commit checks. |
|
||||||
# The filter on the right is invoked with the repository and a list |
|
||||||
# of files to check. A non-zero exit of the filter program will |
|
||||||
# cause the commit to be aborted. |
|
||||||
# |
|
||||||
# The first entry on a line is a regular expression which is tested |
|
||||||
# against the directory that the change is being committed to, relative |
|
||||||
# to the $CVSROOT. For the first match that is found, then the remainder |
|
||||||
# of the line is the name of the filter to run. |
|
||||||
# |
|
||||||
# If the repository name does not match any of the regular expressions in this |
|
||||||
# file, the "DEFAULT" line is used, if it is specified. |
|
||||||
# |
|
||||||
# If the name "ALL" appears as a regular expression it is always used |
|
||||||
# in addition to the first matching regex or "DEFAULT". |
|
@ -1,11 +0,0 @@ |
|||||||
# Set this to "no" if pserver shouldn't check system users/passwords |
|
||||||
#SystemAuth=no |
|
||||||
|
|
||||||
# Set `PreservePermissions' to `yes' to save file status information |
|
||||||
# in the repository. |
|
||||||
#PreservePermissions=no |
|
||||||
|
|
||||||
# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top |
|
||||||
# level of the new working directory when using the `cvs checkout' |
|
||||||
# command. |
|
||||||
#TopLevelAdmin=no |
|
@ -1 +0,0 @@ |
|||||||
*.class |
|
@ -1,23 +0,0 @@ |
|||||||
# This file affects handling of files based on their names. |
|
||||||
# |
|
||||||
# The -t/-f options allow one to treat directories of files |
|
||||||
# as a single file, or to transform a file in other ways on |
|
||||||
# its way in and out of CVS. |
|
||||||
# |
|
||||||
# The -m option specifies whether CVS attempts to merge files. |
|
||||||
# |
|
||||||
# The -k option specifies keyword expansion (e.g. -kb for binary). |
|
||||||
# |
|
||||||
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) |
|
||||||
# |
|
||||||
# wildcard [option value][option value]... |
|
||||||
# |
|
||||||
# where option is one of |
|
||||||
# -f from cvs filter value: path to filter |
|
||||||
# -t to cvs filter value: path to filter |
|
||||||
# -m update methodology value: MERGE or COPY |
|
||||||
# -k expansion mode value: b, o, kkv, &c |
|
||||||
# |
|
||||||
# and value is a single-quote delimited value. |
|
||||||
# For example: |
|
||||||
#*.gif -k 'b' |
|
@ -1,21 +0,0 @@ |
|||||||
# The "editinfo" file is used to allow verification of logging |
|
||||||
# information. It works best when a template (as specified in the |
|
||||||
# rcsinfo file) is provided for the logging procedure. Given a |
|
||||||
# template with locations for, a bug-id number, a list of people who |
|
||||||
# reviewed the code before it can be checked in, and an external |
|
||||||
# process to catalog the differences that were code reviewed, the |
|
||||||
# following test can be applied to the code: |
|
||||||
# |
|
||||||
# Making sure that the entered bug-id number is correct. |
|
||||||
# Validating that the code that was reviewed is indeed the code being |
|
||||||
# checked in (using the bug-id number or a seperate review |
|
||||||
# number to identify this particular code set.). |
|
||||||
# |
|
||||||
# If any of the above test failed, then the commit would be aborted. |
|
||||||
# |
|
||||||
# Actions such as mailing a copy of the report to each reviewer are |
|
||||||
# better handled by an entry in the loginfo file. |
|
||||||
# |
|
||||||
# One thing that should be noted is the the ALL keyword is not |
|
||||||
# supported. There can be only one entry that matches a given |
|
||||||
# repository. |
|
@ -1,26 +0,0 @@ |
|||||||
# The "loginfo" file controls where "cvs commit" log information |
|
||||||
# is sent. The first entry on a line is a regular expression which must match |
|
||||||
# the directory that the change is being made to, relative to the |
|
||||||
# $CVSROOT. If a match is found, then the remainder of the line is a filter |
|
||||||
# program that should expect log information on its standard input. |
|
||||||
# |
|
||||||
# If the repository name does not match any of the regular expressions in this |
|
||||||
# file, the "DEFAULT" line is used, if it is specified. |
|
||||||
# |
|
||||||
# If the name ALL appears as a regular expression it is always used |
|
||||||
# in addition to the first matching regex or DEFAULT. |
|
||||||
# |
|
||||||
# You may specify a format string as part of the |
|
||||||
# filter. The string is composed of a `%' followed |
|
||||||
# by a single format character, or followed by a set of format |
|
||||||
# characters surrounded by `{' and `}' as separators. The format |
|
||||||
# characters are: |
|
||||||
# |
|
||||||
# s = file name |
|
||||||
# V = old version number (pre-checkin) |
|
||||||
# v = new version number (post-checkin) |
|
||||||
# |
|
||||||
# For example: |
|
||||||
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog |
|
||||||
# or |
|
||||||
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog |
|
@ -1 +0,0 @@ |
|||||||
jode jode |
|
@ -1,12 +0,0 @@ |
|||||||
# The "notify" file controls where notifications from watches set by |
|
||||||
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is |
|
||||||
# a regular expression which is tested against the directory that the |
|
||||||
# change is being made to, relative to the $CVSROOT. If it matches, |
|
||||||
# then the remainder of the line is a filter program that should contain |
|
||||||
# one occurrence of %s for the user to notify, and information on its |
|
||||||
# standard input. |
|
||||||
# |
|
||||||
# "ALL" or "DEFAULT" can be used in place of the regular expression. |
|
||||||
# |
|
||||||
# For example: |
|
||||||
#ALL mail %s -s "CVS notification" |
|
@ -1,13 +0,0 @@ |
|||||||
# The "rcsinfo" file is used to control templates with which the editor |
|
||||||
# is invoked on commit and import. |
|
||||||
# |
|
||||||
# The first entry on a line is a regular expression which is tested |
|
||||||
# against the directory that the change is being made to, relative to the |
|
||||||
# $CVSROOT. For the first match that is found, then the remainder of the |
|
||||||
# line is the name of the file that contains the template. |
|
||||||
# |
|
||||||
# If the repository name does not match any of the regular expressions in this |
|
||||||
# file, the "DEFAULT" line is used, if it is specified. |
|
||||||
# |
|
||||||
# If the name "ALL" appears as a regular expression it is always used |
|
||||||
# in addition to the first matching regex or "DEFAULT". |
|
@ -1,20 +0,0 @@ |
|||||||
# The "taginfo" file is used to control pre-tag checks. |
|
||||||
# The filter on the right is invoked with the following arguments: |
|
||||||
# |
|
||||||
# $1 -- tagname |
|
||||||
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d |
|
||||||
# $3 -- repository |
|
||||||
# $4-> file revision [file revision ...] |
|
||||||
# |
|
||||||
# A non-zero exit of the filter program will cause the tag to be aborted. |
|
||||||
# |
|
||||||
# The first entry on a line is a regular expression which is tested |
|
||||||
# against the directory that the change is being committed to, relative |
|
||||||
# to the $CVSROOT. For the first match that is found, then the remainder |
|
||||||
# of the line is the name of the filter to run. |
|
||||||
# |
|
||||||
# If the repository name does not match any of the regular expressions in this |
|
||||||
# file, the "DEFAULT" line is used, if it is specified. |
|
||||||
# |
|
||||||
# If the name "ALL" appears as a regular expression it is always used |
|
||||||
# in addition to the first matching regex or "DEFAULT". |
|
@ -1,21 +0,0 @@ |
|||||||
# The "verifymsg" file is used to allow verification of logging |
|
||||||
# information. It works best when a template (as specified in the |
|
||||||
# rcsinfo file) is provided for the logging procedure. Given a |
|
||||||
# template with locations for, a bug-id number, a list of people who |
|
||||||
# reviewed the code before it can be checked in, and an external |
|
||||||
# process to catalog the differences that were code reviewed, the |
|
||||||
# following test can be applied to the code: |
|
||||||
# |
|
||||||
# Making sure that the entered bug-id number is correct. |
|
||||||
# Validating that the code that was reviewed is indeed the code being |
|
||||||
# checked in (using the bug-id number or a seperate review |
|
||||||
# number to identify this particular code set.). |
|
||||||
# |
|
||||||
# If any of the above test failed, then the commit would be aborted. |
|
||||||
# |
|
||||||
# Actions such as mailing a copy of the report to each reviewer are |
|
||||||
# better handled by an entry in the loginfo file. |
|
||||||
# |
|
||||||
# One thing that should be noted is the the ALL keyword is not |
|
||||||
# supported. There can be only one entry that matches a given |
|
||||||
# repository. |
|
@ -0,0 +1,303 @@ |
|||||||
|
2001-05-27 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* configure.in: Set version to 1.1. |
||||||
|
|
||||||
|
* jode/decompiler/Main.java (main): Also use bootclasspath if no |
||||||
|
classpath given. |
||||||
|
* jode/swingui/Main.java (main): Likewise. |
||||||
|
|
||||||
|
* jode/decompiler/MethodAnalyzer.java.in (skipWriting): Don't skip |
||||||
|
empty constructor that have a throws clause. |
||||||
|
|
||||||
|
* configure.in: Determine whether jdk1.1 resp. jdk1.2. Call jcpp |
||||||
|
in config.status. |
||||||
|
|
||||||
|
* jode/expr/Expression.java.in (makeInitializer): Now takes the |
||||||
|
type of the initialization. Changed all callers. |
||||||
|
* jode/expr/ConstantArrayOperator.java (makeInitializer): Check |
||||||
|
that type is our array type, otherwise we can't omit new Array[]. |
||||||
|
|
||||||
|
* jode/decompiler/LocalInfo.java (markFinal): Don't check that |
||||||
|
only one write is present. If two writes are in an then and an |
||||||
|
else branch of an if, the local can still be final. |
||||||
|
|
||||||
|
* jode/type/ArrayType.java (getSubType): Handle array of integer |
||||||
|
types correctly: byte[] is something completely different than |
||||||
|
int[]. |
||||||
|
(getSuperType): Likewise. |
||||||
|
|
||||||
|
* jode/expr/FieldOperator.java.in (getFieldInfo): New function. |
||||||
|
(needsCast): A cast is also needed if the field is private or |
||||||
|
package scope and the current type can't access the field. |
||||||
|
|
||||||
|
* jode/expr/InvokeOperator.java.in (getMethodInfo): New function. |
||||||
|
(needsCast): A cast is also needed if the method is private or |
||||||
|
package scope and the current type can't access the method. |
||||||
|
|
||||||
|
* jode/expr/ArrayStoreOperator.java (dumpExpression): Check if a |
||||||
|
cast of the array expression is needed. |
||||||
|
|
||||||
|
* jode/expr/TransformConstructors.java |
||||||
|
(transformFieldInitializers): Don't allow moving method invocations |
||||||
|
that throw a checked exception. |
||||||
|
|
||||||
|
* jode/bytecode/MethodInfo.java (readAttribute): Read Exceptions |
||||||
|
attribute even when not all attributes should be read. They are |
||||||
|
needed by TransformConstructors, see above. |
||||||
|
|
||||||
|
2001-05-26 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/decompiler/TabbedPrintWriter.java (saveOps): Don't allow |
||||||
|
line breaks in not completed expressions since implicit parentheses |
||||||
|
would destroy the syntax. No need to put line break option on stack. |
||||||
|
(restoreOps): Adapted Stack format. |
||||||
|
|
||||||
|
* jode/decompiler/ClassAnalyzer.java.in (dumpDeclaration): Moved |
||||||
|
Code from dumpSource here. Don't put a line break after closing |
||||||
|
brace. |
||||||
|
(dumpSource): call dumpDeclaration and add a line break. |
||||||
|
(dumpBlock): Moved dropInfo(ATTRIBS) here. |
||||||
|
|
||||||
|
* jode/decompiler/ClassAnalyzer.java.in (STRICTFP): New Constant. |
||||||
|
(isStrictFP): New function. |
||||||
|
(initialize): Set strictfp modifier if a constructor has it set. |
||||||
|
(dumpSource): Handle strictfp modifier. |
||||||
|
|
||||||
|
* jode/decompiler/MethodAnalyzer.java.in (STRICTFP): New Constant. |
||||||
|
(isStrictFP): New function. |
||||||
|
(dumpSource): Handle strictfp modifier. |
||||||
|
|
||||||
|
* jode/jvm/SyntheticAnalyzer.java.in (checkAccess): Check for a |
||||||
|
special putfield access, where the set value is returned. Allow |
||||||
|
the modifier of field/method to be protected and the class to be |
||||||
|
a superclass. |
||||||
|
(checkStaticAccess): Likewise. |
||||||
|
(ACCESSDUPPUTFIELD): New Constant. |
||||||
|
(ACCESSDUPPUTSTATIC): New Constant. |
||||||
|
|
||||||
|
* jode/expr/InvokeOperator.java.in (simplifyAccess): Handle new |
||||||
|
synthetics. |
||||||
|
|
||||||
|
* jode/flow/SpecialBlock.java (removePop): Remove pop also for |
||||||
|
non void store instructions. |
||||||
|
|
||||||
|
* jode/decompiler/MethodAnalyzer.java.in (skipWriting): Also skip |
||||||
|
the new synthetics. |
||||||
|
|
||||||
|
* jode/decompiler/Main.java (main): Call System.exit() after |
||||||
|
everything was compiled. |
||||||
|
|
||||||
|
* jode/flow/TransformExceptionHandlers.java.in (removeJSR): |
||||||
|
Renamed back from removeBadJSR (see patch from 2001-02-04). The |
||||||
|
checkAndRemove* functions mustn't change the successors while they |
||||||
|
iterate over them. Instead of removing good jsr they mark them as |
||||||
|
good and removeJSR will finally remove them. |
||||||
|
(checkAndRemoveJSR): See above. |
||||||
|
(checkAndRemoveMonitorExit): See above. |
||||||
|
|
||||||
|
* jode/flow/JsrBlock.java (good): New variable, see above. |
||||||
|
(setGood): New method. |
||||||
|
(isGood): New method. |
||||||
|
|
||||||
|
2001-05-08 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/jvm/CodeVerifier.java.in (doVerify): Don't check for |
||||||
|
uninitialized objects in local or stack slots on backwards jump or |
||||||
|
exception blocks. Sun's jdk also doesn't check it, and I never |
||||||
|
understood why it is necessary. But see JVM Spec 4.9.4. |
||||||
|
|
||||||
|
2001-05-02 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/obfuscator/modules/ConstantAnalyzer.java.in (handleOpcode): |
||||||
|
Added divide by zero checks for opc_irem and opc_lrem. |
||||||
|
|
||||||
|
2001-04-11 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/type/ClassInterfacesType.java (keywords): Reworked keyword |
||||||
|
list. |
||||||
|
|
||||||
|
* jode/decompiler/OuterValues.java (implicitOuterClass): New field. |
||||||
|
(isImplicitOuterClass): new Method. |
||||||
|
(setImplicitOuterClass): new Method. |
||||||
|
|
||||||
|
* jode/flow/TransformConstructors.java (checkAnonymousConstructor): |
||||||
|
Check for implicitOuterClass, a new javac 1.3 construct. |
||||||
|
|
||||||
|
* jode/expr/FieldOperator.java.in (dumpSource): Removed this |
||||||
|
simplification nonesense. Now Outer.this is never printed as |
||||||
|
this. |
||||||
|
|
||||||
|
* jode/expr/InvokeOperator.java.in (dumpSource): Removed this |
||||||
|
simplification nonesense. Now Outer.this is never printed as |
||||||
|
this. |
||||||
|
Handle implicitOuterClass. |
||||||
|
|
||||||
|
2001-04-10 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/decompiler/Main.java (usage): Reworked usage message. |
||||||
|
|
||||||
|
2001-04-09 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/bytecode/SearchPath.java: Bug fixes from Joe Bronkema: |
||||||
|
(exists): Don't replace '/' with fileSeparator in original |
||||||
|
filename; make a copy instead. |
||||||
|
(getFile): likewise. |
||||||
|
(isDirectory): likewise. |
||||||
|
(listFiles): Reset fileNr when a new directory is read. |
||||||
|
|
||||||
|
2001-02-28 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* acinclude.m4 (JODE_CHECK_CLASS): Changed "test -e" to "-f" since |
||||||
|
-e is not supported on all architectures (Solaris) and -f is more |
||||||
|
correct anyway. |
||||||
|
Reported by Erik Modén. |
||||||
|
|
||||||
|
2001-02-27 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/swingui/Main.java.in (AreaWriter): Convert all kinds of |
||||||
|
line breaks (CR+LF, CR, LF) to a LF character, which a JTextArea |
||||||
|
understands. |
||||||
|
|
||||||
|
2001-02-08 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/expr/StoreInstruction.java (dumpExpression): Java doesn't |
||||||
|
allow parenthesis around left hand side, so use NO_PAREN and don't |
||||||
|
call lhs.dumpExpression() with priority. |
||||||
|
* jode/expr/PrePostFixOperator.java (dumpExpression): likewise. |
||||||
|
* jode/expr/IIncOperator.java (dumpExpression): likewise. |
||||||
|
* jode/flow/TransformConstructors.java (jikesAnonInner): Removed, |
||||||
|
since it wasn't used: This information is stored in OuterValues |
||||||
|
now. |
||||||
|
* jode/decompiler/LocalInfo.java (isConstant): Always return true |
||||||
|
so that inner classes that access final locals work, even if we |
||||||
|
can't decide that the local can be final. |
||||||
|
|
||||||
|
2001-02-05 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/expr/InvokeOperator.java.in (Environment.invokeMethod): |
||||||
|
Fixed the call to ClassInfo.forName: it expects a class name, while |
||||||
|
ref.getClazz() gives a type signature. |
||||||
|
* jode/flow/TransformExceptionHandlers.java.in: |
||||||
|
(checkAndRemoveJSR): Only invoke removeBadJSR, if there are |
||||||
|
successors left. |
||||||
|
(checkAndRemoveMonitorExit): likewise. |
||||||
|
|
||||||
|
2001-02-04 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/expr/IfThenElseOperator.java (simplify): Allow in the class$ |
||||||
|
simplification the then and else part to be swapped. |
||||||
|
* jode/bytecode/ClassInfo.java.in (read): Accept class version |
||||||
|
1.3. |
||||||
|
* jode/type/ClassInterfacesType.java (keywords): Added the package |
||||||
|
and import keywords. |
||||||
|
* jode/flow/TransformExceptionHandlers.java.in: |
||||||
|
(getPredecessor): New function. |
||||||
|
(getMonitorExitSlot): New function. |
||||||
|
(skipFinExitChain): New function. |
||||||
|
(removeJSR): Replaced by ... |
||||||
|
(removeBadJSR): ... this. |
||||||
|
(checkAndRemoveJSR): Use the new functions. Much simpler and |
||||||
|
handles nested synchronized blocks. It now traces the whole JSR |
||||||
|
and monitorexit chain before a jump to the first entry via |
||||||
|
skipFinExitChain, then checks and remove the first JSR |
||||||
|
resp. monitorexit. JSR jumps are simply ignored now. |
||||||
|
(checkAndRemoveMonitorExit): likewise. |
||||||
|
* jode/flow/StructuredBlock.java.in (prependBlock): New function. |
||||||
|
* jode/flow/CatchBlock.java.in (makeDeclaration): Generate name |
||||||
|
of dummyLocal, since nobody else will generate it. |
||||||
|
|
||||||
|
2001-02-03 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/bytecode/BytecodeInfo.java.in (read): Remove bogus |
||||||
|
exceptionHandlers, whose catchers just throw the exception again. |
||||||
|
This kind of entries are inserted by an obfuscator and would break |
||||||
|
JODE. |
||||||
|
* jode/util/UnifyHash.java.in (iterateHashCode): Call cleanUp, |
||||||
|
to clean unneeded references. |
||||||
|
* jode/flow/TransformConstructors.java (transformOneField): |
||||||
|
Changed to private. Take field number as parameter. Check that |
||||||
|
expression doesn't contain a FieldOperator for a later field of |
||||||
|
the same class or a PutFieldOperator. Changed all callers. |
||||||
|
|
||||||
|
2001-02-01 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/jvm/CodeVerifier.java.in (Type.mergeType): If array elem |
||||||
|
types can't be merged, return tObject as common super type. |
||||||
|
* jode/type/ArrayType.java (getGeneralizedType): If array elem |
||||||
|
type can't be intersected, return tObject as common super type. |
||||||
|
* jode/flow/TransformExceptionHandlers.java.in: Merged patch from |
||||||
|
the 1.2 tree to support javac 1.3 synchronized blocks. Doesn't |
||||||
|
handle nested synchronized blocks yet. |
||||||
|
* jode/expr/Expression.java.in (dumpExpression): Show runtime |
||||||
|
exception when it occurs. |
||||||
|
|
||||||
|
2001-01-31 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/expr/Expression.java.in (updateParentTypes): Call setType, |
||||||
|
instead of merging the types. Other childs want to know about the |
||||||
|
type change as well. |
||||||
|
* jode/decompiler/LocalInfo.java (combineWith): Reorganized a bit, |
||||||
|
but no changes. |
||||||
|
* jode/expr/InvokeOperator.java.in (dumpExpression): Always print |
||||||
|
the ThisOperator if a field is from a parent class of an outer |
||||||
|
class is used. And always qualify the this operator if not |
||||||
|
innermost. |
||||||
|
|
||||||
|
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/jvm/SyntheticAnalyzer.java.in (checkConstructorAccess): |
||||||
|
Allow the special unifyParam to be the last parameter. |
||||||
|
|
||||||
|
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/decompiler/TabbedPrintWriter.java: Better gnu style handling: |
||||||
|
(openBraceClass) (closeBraceClass) |
||||||
|
(openBraceNoIndent) (closeBraceNoIndent): new functions. |
||||||
|
(closeBraceNoSpace): Removed. |
||||||
|
* jode/decompiler/Options.java (GNU_SPACING): new constant. |
||||||
|
(GNU_STYLE): changed to include GNU_SPACING. |
||||||
|
* jode/decompiler/ClassAnalyzer.java.in (dumpSource): Use |
||||||
|
open/closeBraceClass. |
||||||
|
* jode/decompiler/MethodAnalyzer.java.in (dumpSource): Use |
||||||
|
open/closeBraceNoIndent. Insert a space for GNU_SPACING. |
||||||
|
* jode/decompiler/InvokeOperator.java.in (dumpExpression): Insert |
||||||
|
a space for GNU_SPACING, use open/closeBraceClass for inner |
||||||
|
classes. |
||||||
|
* jode/decompiler/UnaryOperator.java (dumpExpression): Insert |
||||||
|
a space for GNU_SPACING. |
||||||
|
|
||||||
|
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
Added pascal style from Rolf Howarth <rolf@squarebox.co.uk> |
||||||
|
* jode/decompiler/Options.java (PASCAL_STYLE): new constant. |
||||||
|
(BRACE_FLUSH_LEFT): dito. |
||||||
|
* jode/decompiler/Decompiler.java (setOption): detect pascal option. |
||||||
|
* jode/decompiler/Main.java (main): dito. |
||||||
|
* jode/decompiler/TabbedPrintWriter.java (openBrace, |
||||||
|
openBraceContinue, closeBrace, closeBraceNoSpace, |
||||||
|
closeBraceContinue): handle flush left. |
||||||
|
|
||||||
|
2001-01-30 Jochen Hoenicke <jochen@gnu.org> |
||||||
|
|
||||||
|
* jode/type/NullType.java (intersection): Removed, since the |
||||||
|
version in ReferenceType is more correct. Before |
||||||
|
tNull.isOfType(tRange(X,tNull)) returned false, which lead to |
||||||
|
incorrect behaviour in InvokeOperator.needsCast. |
||||||
|
* jode/decompiler/FieldAnalyzer.java.in (dumpSource): Removed the |
||||||
|
"= null" hack for final fields; it was not correct, since the |
||||||
|
field could be initialized in a constructor. |
||||||
|
* jode/decompiler/TabbedPrintWriter.java (BreakPoint.endOp): |
||||||
|
Simplified the code, copy options always from child. |
||||||
|
* jode/jvm/SyntheticAnalyzer.java.in (unifyParam): new field. |
||||||
|
(checkConstructorAccess): Allow the special Parameter, whose |
||||||
|
purpose is to distinguish the wrapper from the real constructor |
||||||
|
and give him a "$" in the type signature, to appear at every |
||||||
|
position. It doesn't appear at position 1 for inner classes. |
||||||
|
Store the position in unifyParam. |
||||||
|
* jode/expr/InvokeOperator.java (isGetClass): Allow the method to |
||||||
|
be declared inside an outer class: We simply check if we can get |
||||||
|
the method analyzer. |
||||||
|
(simplify): handle unifyParam. |
||||||
|
* jode/expr/PopOperator.java (getBreakPenalty): return penalty of |
||||||
|
inner expression. (dumpExpression): Call dumpExpression of |
||||||
|
subexpression immediately without priority. |
@ -1,5 +1,5 @@ |
|||||||
## Input file for automake to generate the Makefile.in used by configure
|
## Input file for automake to generate the Makefile.in used by configure
|
||||||
|
|
||||||
SUBDIRS = jode bin doc test
|
SUBDIRS = bin doc jode test
|
||||||
|
|
||||||
EXTRA_DIST = TODO
|
EXTRA_DIST = jcpp
|
||||||
|
@ -0,0 +1,5 @@ |
|||||||
|
Joe Bronkema <joseph.d.bronkema at lmco.com> |
||||||
|
Rolf Howarth <rolf at squarebox.co.uk> for pascal indentaton style. |
||||||
|
Erik Modén <Erik.Moden at emw.ericsson.se> |
||||||
|
Martin Schmitz <m.schmitz at e-sign.com> for finding many bugs in the obfuscator. |
||||||
|
zzzeek <classic at io.com> |
@ -1,2 +1,3 @@ |
|||||||
Makefile |
Makefile |
||||||
Makefile.in |
Makefile.in |
||||||
|
*.html |
||||||
|
@ -1,14 +1,43 @@ |
|||||||
## Input file for automake to generate the Makefile.in used by configure
|
## Input file for automake to generate the Makefile.in used by configure
|
||||||
|
|
||||||
EXTRA_DIST = \
|
PHP_FILES = \
|
||||||
applet.html \ |
applet.php \ |
||||||
download.html.in \ |
bluesky.php \ |
||||||
history.html \ |
download.php \ |
||||||
jode.html \ |
faq.php \ |
||||||
license.html \ |
feedback.php \ |
||||||
links.html \ |
history.php \ |
||||||
usage.html \ |
index.php \ |
||||||
|
license.php \ |
||||||
|
links.php \ |
||||||
|
usage.php |
||||||
|
|
||||||
|
HTML_FILES = $(PHP_FILES:%.php=$(srcdir)/%.html)
|
||||||
|
noinst_DATA = $(HTML_FILES)
|
||||||
|
|
||||||
|
EXTRA_DIST = $(PHP_FILES) $(notdir $(HTML_FILES)) \
|
||||||
|
a-logo.gif \ |
||||||
myproject.jos \ |
myproject.jos \ |
||||||
dasm_to_java.perl \ |
dasm_to_java.perl \ |
||||||
gimp/jode-logo.xcf \ |
gimp/jode-logo.xcf \ |
||||||
jode-logo.gif |
jode-logo.gif |
||||||
|
|
||||||
|
.PHONY: public_html_symlink |
||||||
|
|
||||||
|
# The following rules require that you have an apache with php on
|
||||||
|
# localhost with standard user public_html directories and
|
||||||
|
# FollowSymLink enabled.
|
||||||
|
|
||||||
|
PUBLIC_HTML=$(HOME)/public_html
|
||||||
|
JODE_PHP_DIR=jode_php
|
||||||
|
|
||||||
|
public_html_symlink: |
||||||
|
rm -f $(PUBLIC_HTML)/$(JODE_PHP_DIR)
|
||||||
|
@RELDIR=`pwd | sed s!^$(HOME)!..!`; \
|
||||||
|
ln -sf $$RELDIR/$(srcdir) $(PUBLIC_HTML)/$(JODE_PHP_DIR); \
|
||||||
|
echo Created symlink to $$RELDIR/$(srcdir).
|
||||||
|
|
||||||
|
footer.inc: public_html_symlink |
||||||
|
|
||||||
|
$(srcdir)/%.html: %.php footer.inc header.inc menu.inc |
||||||
|
lynx -source http://localhost/~$(LOGNAME)/$(JODE_PHP_DIR)/$(notdir $<)?extension=.html > $@
|
||||||
|
After Width: | Height: | Size: 894 B |
@ -0,0 +1,66 @@ |
|||||||
|
<?php require("header.inc"); ?>
|
||||||
|
|
||||||
|
<h1>FAQ - Frequently Asked Questions</h1> |
||||||
|
|
||||||
|
This is a list of some questions that pop up from time to time. |
||||||
|
|
||||||
|
<h2>Decompiler issues</h2> |
||||||
|
|
||||||
|
<h3>The decompiler crashes with a VerifyException, what can I do?</h3> |
||||||
|
|
||||||
|
<p>The class isn't verifiable, probably because there is not enough |
||||||
|
information about used classes. See the question about the |
||||||
|
classpath.</p> |
||||||
|
|
||||||
|
<p>This could also be caused by malicious bytecode, or because there |
||||||
|
is a bug in Jode's verifier.</p> |
||||||
|
|
||||||
|
<h3>What should be included in the classpath?</h3> |
||||||
|
|
||||||
|
<p>Jode needs to know the full class hierarchie to guess the types. |
||||||
|
This includes not only the classes in the program, but also the |
||||||
|
libraries used by the java program, even the Java runtime library. |
||||||
|
You should set the classpath to include all these classes.</p> |
||||||
|
|
||||||
|
<p>If you don't specify the classpath on the command line, Jode uses |
||||||
|
the same as your Java Virtual Machine.</p> |
||||||
|
|
||||||
|
<p>As last resort, if Jode can't find a class in the classpath it uses |
||||||
|
reflection to ask the Virtual Machine. This works quite well, but |
||||||
|
loading classes can have side effects, e.g. when AWT classes are |
||||||
|
loaded, an AWT thread is created, even though Jode doesn't need |
||||||
|
it.</p> |
||||||
|
|
||||||
|
<h2>Obfuscator issues</h2> |
||||||
|
|
||||||
|
<h3>What should be included in the classpath?</h3> |
||||||
|
|
||||||
|
<p>The program, all libraries, the Java runtime library. Don't omit a |
||||||
|
library even when you don't want to obfuscate it.</p> |
||||||
|
|
||||||
|
<h3>What should I preserve</h3> |
||||||
|
|
||||||
|
<p>The most common mistake is to preserve a class. In most cases this |
||||||
|
is not what you want. This only makes sure the class won't be |
||||||
|
renamed, it doesn't prevent it from being stripped. Instead you |
||||||
|
should preserve methods and constructors. The constructor is just a |
||||||
|
method with the special name <tt><init&rt;</tt>. </p> |
||||||
|
|
||||||
|
<p> Another common mistake is to omit the type |
||||||
|
signature, e.g. to preserve <tt>Class.main</tt> instead of |
||||||
|
<tt>Class.main.([Ljava/lang/String;)V</tt>. That doesn't work. If |
||||||
|
you don't want to care about the format of the type signature use a |
||||||
|
wildcard as in <tt>Class.main.*</tt>. </p> |
||||||
|
|
||||||
|
<h3>What is a type signature</h3> |
||||||
|
|
||||||
|
<p>The type signature is a machine readable representation of a java |
||||||
|
type that is used all over in java bytecode. The JDK ships a command |
||||||
|
named <tt>javap</tt>. With <tt>java -s</tt> you can lists the fields |
||||||
|
and methods of a class with their type signatures.</p> |
||||||
|
|
||||||
|
<p> If you are interested in the format of type signatures read the |
||||||
|
Java Virtual Machine Specification, Chapter 4.3 Descriptors</p> |
||||||
|
|
||||||
|
<?php require("footer.inc"); ?> |
||||||
|
|
@ -0,0 +1,14 @@ |
|||||||
|
<?php require("header.inc"); ?>
|
||||||
|
|
||||||
|
<h1>Feedback</h1> |
||||||
|
|
||||||
|
<p>You can report bugs to the <?php sflink("bugs/")?>bug forum</a>. </p>
|
||||||
|
|
||||||
|
<p>You can contact me by email via <a |
||||||
|
href="http://sourceforge.net/sendmessage.php?touser=18252">hoenicke at |
||||||
|
users.sourceforge.net</a>. Please mention <i>jode</i> in the |
||||||
|
subject.</p> |
||||||
|
|
||||||
|
<p>There is a mailing list. Check <a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">this page</a> for subscription informations.</p> |
||||||
|
|
||||||
|
<?php require("footer.inc"); ?>
|
@ -1,15 +1,16 @@ |
|||||||
<?php require("header.inc"); ?> |
<?php require("header.inc"); ?> |
||||||
|
<h1>License</h1> |
||||||
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify |
<p>This program is free software; you can redistribute it and/or modify |
||||||
it under the terms of the <a |
it under the terms of the <a |
||||||
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
||||||
License</a> as published by the Free Software Foundation; either |
License</a> as published by the Free Software Foundation; either |
||||||
version 2 of the License, or (at your option) any later version.<br><br> |
version 2 of the License, or (at your option) any later version.</p> |
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
<p>This program is distributed in the hope that it will be useful, |
||||||
but <b>without any warranty</b>; without even the implied warranty of |
but <b>without any warranty</b>; without even the implied warranty of |
||||||
<b>merchantability</b> or <b>fitness for a particular purpose</b>. See the |
<b>merchantability</b> or <b>fitness for a particular purpose</b>. See the |
||||||
GNU General Public License for more details. |
GNU General Public License for more details.</p> |
||||||
|
|
||||||
<?php require("footer.inc"); ?> |
<?php require("footer.inc"); ?> |
||||||
|
@ -1,115 +1,47 @@ |
|||||||
<?php |
<?php |
||||||
$menu = array( |
$menu = |
||||||
"Jode", |
array("<B>Home</B>" , "selflink", "index", |
||||||
array("<B>Home</B>" , "selflink", "jode", |
|
||||||
"Project page" , "sflink", "project/", |
"Project page" , "sflink", "project/", |
||||||
"-", "-", "-", |
|
||||||
"Applet" , "selflink", "applet", |
"Applet" , "selflink", "applet", |
||||||
"Download" , "selflink", "download", |
"Download" , "selflink", "download", |
||||||
|
"FAQ" , "selflink", "faq", |
||||||
|
"Feedback" , "selflink", "feedback", |
||||||
"Documentation", "selflink", "usage", |
"Documentation", "selflink", "usage", |
||||||
"License" , "selflink", "license", |
"License" , "selflink", "license", |
||||||
"History" , "selflink", "history", |
"History" , "selflink", "history", |
||||||
"Links" , "selflink", "links", |
"Links" , "selflink", "links", |
||||||
"Blue Sky" , "selflink", "bluesky"), |
"Blue Sky" , "selflink", "bluesky"); |
||||||
"Feedback", |
?> |
||||||
array("Bug Tracking" , "sflink", "bugs/", |
|
||||||
"Public Forums" , "sflink", "forum/", |
|
||||||
"Mailing List" , "link", |
|
||||||
"http://lists.sourceforge.net/mailman/listinfo/jode-users", |
|
||||||
"Private Mail" , "link", |
|
||||||
"http://sourceforge.net/sendmessage.php?touser=18252"), |
|
||||||
"Download", |
|
||||||
array("FTP server", "link", "ftp://jode.sourceforge.net/pub/jode/", |
|
||||||
"Source releases", "sflink", "project/filelist.php")); |
|
||||||
|
|
||||||
$images = array( |
|
||||||
"Powered by ", "http://sourceforge.net/sflogo.php?group_id=3790&type=1", |
|
||||||
"SourceForge", "http://sourceforge.net", |
|
||||||
"Best viewed with ", "a-logo.gif", |
|
||||||
"Any Browser", "http://www.anybrowser.org/campaign/"); |
|
||||||
|
|
||||||
if (eregi("^Lynx", $HTTP_USER_AGENT)) { |
|
||||||
|
|
||||||
|
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||||
|
<tr><td class="nav"> |
||||||
|
<?php |
||||||
reset($menu); |
reset($menu); |
||||||
while (list($dummy, $header) = each($menu)) { |
$self = ereg_replace("^.*/", "", $PHP_SELF); |
||||||
list($dummy, $subitems) = each($menu); |
while (list($dummy, $name) = each($menu)) { |
||||||
|
list($dummy, $type) = each($menu); |
||||||
echo "<b>$header:</b>\n"; |
list($dummy, $link) = each($menu); |
||||||
reset($subitems); |
$name = ereg_replace(" ", " ", $name); |
||||||
while (list($dummy, $name) = each($subitems)) { |
|
||||||
list($dummy, $type) = each($subitems); |
|
||||||
list($dummy, $link) = each($subitems); |
|
||||||
if ($type == "selflink") { |
if ($type == "selflink") { |
||||||
|
if ($self == "$link.$extension") { |
||||||
|
echo "$name"; |
||||||
|
} else { |
||||||
selflink($link); |
selflink($link); |
||||||
} else if ($type == "sflink") { |
|
||||||
sflink($link); |
|
||||||
} else if ($type == "-") { |
|
||||||
echo "<br>\n"; |
|
||||||
continue; |
|
||||||
} else if ($type == "link") { |
|
||||||
echo "<a href=\"$link\">"; |
|
||||||
} |
|
||||||
$name = ereg_replace(" ", " ", $name); |
|
||||||
echo "$name</a>"; |
echo "$name</a>"; |
||||||
if (current($subitems)) { |
|
||||||
echo " |\n"; |
|
||||||
} |
|
||||||
} |
} |
||||||
echo "<br>\n\n"; |
|
||||||
} |
|
||||||
echo "<right>\n"; |
|
||||||
reset($images); |
|
||||||
while (list($dummy, $label) = each($images)) { |
|
||||||
list($dummy, $src) = each($images); |
|
||||||
list($dummy, $alt) = each($images); |
|
||||||
list($dummy, $link) = each($images); |
|
||||||
echo "$label<a href=\"$link\"><img src=\"$src\" border=0"; |
|
||||||
echo " width=88 height=31 alt=\"$alt\"></a>\n"; |
|
||||||
} |
|
||||||
echo "</right>\n"; |
|
||||||
} else { |
|
||||||
echo "<table cellspacing=0 cellpadding=3 width=100%"; |
|
||||||
echo " border=0 bgcolor=eeeef8>\n"; |
|
||||||
|
|
||||||
reset($menu); |
|
||||||
while (list($dummy, $header) = each($menu)) { |
|
||||||
list($dummy, $subitems) = each($menu); |
|
||||||
echo "<tr bgcolor=\"7272cc\">\n<td align=\"center\">"; |
|
||||||
echo "<font color=\"ffffff\"><b>$header</b></font></td></tr>\n"; |
|
||||||
echo "<tr><td align=\"right\">\n"; |
|
||||||
reset($subitems); |
|
||||||
while (list($dummy, $name) = each($subitems)) { |
|
||||||
list($dummy, $type) = each($subitems); |
|
||||||
list($dummy, $link) = each($subitems); |
|
||||||
if ($type == "selflink") { |
|
||||||
selflink($link); |
|
||||||
} else if ($type == "sflink") { |
} else if ($type == "sflink") { |
||||||
sflink($link); |
sflink($link); |
||||||
|
echo "$name</a>"; |
||||||
} else if ($type == "-") { |
} else if ($type == "-") { |
||||||
echo "<br>\n"; |
echo "<br>\n"; |
||||||
continue; |
continue; |
||||||
} else if ($type == "link") { |
} else if ($type == "link") { |
||||||
echo "<a href=\"$link\">"; |
echo "<a href=\"$link\">$name</a>"; |
||||||
} |
} |
||||||
$name = ereg_replace(" ", " ", $name); |
if (current($menu)) { |
||||||
echo "$name</a>"; |
echo " |\n"; |
||||||
if (current($subitems)) { |
|
||||||
echo "<br>\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
echo "</td></tr>\n"; |
|
||||||
echo "<tr bgcolor=\"ffffff\"><td align=\"center\">"; |
|
||||||
|
|
||||||
reset($images); |
|
||||||
while (list($dummy, $label) = each($images)) { |
|
||||||
list($dummy, $src) = each($images); |
|
||||||
list($dummy, $alt) = each($images); |
|
||||||
list($dummy, $link) = each($images); |
|
||||||
echo "<br>$label<br>\n"; |
|
||||||
echo "<a href=\"$link\"><img src=\"$src\" border=0"; |
|
||||||
echo " width=88 height=31 alt=\"$alt\"></a><br>\n"; |
|
||||||
} |
} |
||||||
echo "</td></tr></table>\n"; |
|
||||||
} |
} |
||||||
?> |
?> |
||||||
|
</td></tr> |
||||||
|
</table><br> |
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue