From e2d0f5d9c38561d67f23754c00addb4a3547efb2 Mon Sep 17 00:00:00 2001 From: Stiver Date: Tue, 4 Mar 2014 15:13:11 +0100 Subject: [PATCH] initial commit --- .classpath | 8 + .project | 17 + .settings/org.eclipse.core.resources.prefs | 3 + .settings/org.eclipse.jdt.core.prefs | 11 + bin/.gitignore | 6 + build.xml | 131 ++ dist/docs/license_en.txt | 51 + dist/docs/lizenz_de.txt | 62 + dist/docs/readme.txt | 86 ++ dist/full/fernflower.jar | Bin 0 -> 648087 bytes dist/obfuscated/fernflower.jar | Bin 0 -> 258058 bytes lib/ncss/ccl.jar | Bin 0 -> 368919 bytes lib/ncss/javacc.jar | Bin 0 -> 274294 bytes lib/ncss/javancss.jar | Bin 0 -> 333715 bytes lib/proguard.jar | Bin 0 -> 558941 bytes lib/proguard_4_11.jar | Bin 0 -> 772617 bytes lib/timer/hrtlib.dll | Bin 0 -> 36864 bytes lib/timer/timer.jar | Bin 0 -> 6231 bytes src/de/fernflower/code/CodeConstants.java | 347 +++++ src/de/fernflower/code/ConstantsUtil.java | 510 ++++++ src/de/fernflower/code/ConstantsUtilOld.java | 442 ++++++ src/de/fernflower/code/ExceptionHandler.java | 62 + src/de/fernflower/code/ExceptionTable.java | 57 + .../code/FullInstructionSequence.java | 38 + src/de/fernflower/code/IfInstruction.java | 36 + src/de/fernflower/code/Instruction.java | 123 ++ .../fernflower/code/InstructionSequence.java | 219 +++ src/de/fernflower/code/JumpInstruction.java | 41 + .../code/SimpleInstructionSequence.java | 39 + src/de/fernflower/code/SwitchInstruction.java | 93 ++ src/de/fernflower/code/cfg/BasicBlock.java | 265 ++++ .../fernflower/code/cfg/ControlFlowGraph.java | 887 +++++++++++ .../code/cfg/ExceptionRangeCFG.java | 128 ++ .../fernflower/code/instructions/AALOAD.java | 7 + .../fernflower/code/instructions/AASTORE.java | 7 + .../code/instructions/ACONST_NULL.java | 7 + .../fernflower/code/instructions/ALOAD.java | 43 + .../code/instructions/ANEWARRAY.java | 19 + .../fernflower/code/instructions/ARETURN.java | 7 + .../code/instructions/ARRAYLENGTH.java | 7 + .../fernflower/code/instructions/ASTORE.java | 42 + .../fernflower/code/instructions/ATHROW.java | 7 + .../fernflower/code/instructions/BALOAD.java | 7 + .../fernflower/code/instructions/BASTORE.java | 7 + .../fernflower/code/instructions/BIPUSH.java | 30 + .../fernflower/code/instructions/CALOAD.java | 7 + .../fernflower/code/instructions/CASTORE.java | 7 + .../code/instructions/CHECKCAST.java | 20 + src/de/fernflower/code/instructions/D2F.java | 7 + src/de/fernflower/code/instructions/D2I.java | 7 + src/de/fernflower/code/instructions/D2L.java | 7 + src/de/fernflower/code/instructions/DADD.java | 7 + .../fernflower/code/instructions/DALOAD.java | 7 + .../fernflower/code/instructions/DASTORE.java | 7 + .../fernflower/code/instructions/DCMPG.java | 7 + .../fernflower/code/instructions/DCMPL.java | 7 + .../code/instructions/DCONST_0.java | 7 + .../code/instructions/DCONST_1.java | 7 + src/de/fernflower/code/instructions/DDIV.java | 7 + .../fernflower/code/instructions/DLOAD.java | 42 + src/de/fernflower/code/instructions/DMUL.java | 7 + src/de/fernflower/code/instructions/DNEG.java | 7 + src/de/fernflower/code/instructions/DREM.java | 7 + .../fernflower/code/instructions/DRETURN.java | 7 + .../fernflower/code/instructions/DSTORE.java | 41 + src/de/fernflower/code/instructions/DSUB.java | 7 + src/de/fernflower/code/instructions/DUP.java | 7 + src/de/fernflower/code/instructions/DUP2.java | 7 + .../fernflower/code/instructions/DUP2_X1.java | 7 + .../fernflower/code/instructions/DUP2_X2.java | 7 + .../fernflower/code/instructions/DUP_X1.java | 7 + .../fernflower/code/instructions/DUP_X2.java | 7 + src/de/fernflower/code/instructions/F2D.java | 7 + src/de/fernflower/code/instructions/F2I.java | 7 + src/de/fernflower/code/instructions/F2L.java | 7 + src/de/fernflower/code/instructions/FADD.java | 7 + .../fernflower/code/instructions/FALOAD.java | 7 + .../fernflower/code/instructions/FASTORE.java | 7 + .../fernflower/code/instructions/FCMPG.java | 7 + .../fernflower/code/instructions/FCMPL.java | 7 + .../code/instructions/FCONST_0.java | 7 + .../code/instructions/FCONST_1.java | 7 + .../code/instructions/FCONST_2.java | 7 + src/de/fernflower/code/instructions/FDIV.java | 7 + .../fernflower/code/instructions/FLOAD.java | 42 + src/de/fernflower/code/instructions/FMUL.java | 7 + src/de/fernflower/code/instructions/FNEG.java | 7 + src/de/fernflower/code/instructions/FREM.java | 7 + .../fernflower/code/instructions/FRETURN.java | 7 + .../fernflower/code/instructions/FSTORE.java | 41 + src/de/fernflower/code/instructions/FSUB.java | 7 + .../code/instructions/GETFIELD.java | 18 + .../code/instructions/GETSTATIC.java | 19 + src/de/fernflower/code/instructions/GOTO.java | 30 + .../fernflower/code/instructions/GOTO_W.java | 19 + src/de/fernflower/code/instructions/I2B.java | 7 + src/de/fernflower/code/instructions/I2C.java | 7 + src/de/fernflower/code/instructions/I2D.java | 7 + src/de/fernflower/code/instructions/I2F.java | 7 + src/de/fernflower/code/instructions/I2L.java | 7 + src/de/fernflower/code/instructions/I2S.java | 7 + src/de/fernflower/code/instructions/IADD.java | 7 + .../fernflower/code/instructions/IALOAD.java | 7 + src/de/fernflower/code/instructions/IAND.java | 7 + .../fernflower/code/instructions/IASTORE.java | 7 + src/de/fernflower/code/instructions/IDIV.java | 7 + src/de/fernflower/code/instructions/IFEQ.java | 19 + src/de/fernflower/code/instructions/IFGE.java | 19 + src/de/fernflower/code/instructions/IFGT.java | 19 + src/de/fernflower/code/instructions/IFLE.java | 19 + src/de/fernflower/code/instructions/IFLT.java | 19 + src/de/fernflower/code/instructions/IFNE.java | 19 + .../code/instructions/IFNONNULL.java | 19 + .../fernflower/code/instructions/IFNULL.java | 19 + .../code/instructions/IF_ACMPEQ.java | 20 + .../code/instructions/IF_ACMPNE.java | 19 + .../code/instructions/IF_ICMPEQ.java | 19 + .../code/instructions/IF_ICMPGE.java | 19 + .../code/instructions/IF_ICMPGT.java | 19 + .../code/instructions/IF_ICMPLE.java | 19 + .../code/instructions/IF_ICMPLT.java | 19 + .../code/instructions/IF_ICMPNE.java | 19 + src/de/fernflower/code/instructions/IINC.java | 28 + .../fernflower/code/instructions/ILOAD.java | 38 + src/de/fernflower/code/instructions/IMUL.java | 7 + src/de/fernflower/code/instructions/INEG.java | 7 + .../code/instructions/INSTANCEOF.java | 19 + .../code/instructions/INVOKEINTERFACE.java | 21 + .../code/instructions/INVOKESPECIAL.java | 19 + .../code/instructions/INVOKESTATIC.java | 19 + .../code/instructions/INVOKEVIRTUAL.java | 19 + src/de/fernflower/code/instructions/IOR.java | 7 + src/de/fernflower/code/instructions/IREM.java | 7 + .../fernflower/code/instructions/IRETURN.java | 7 + src/de/fernflower/code/instructions/ISHL.java | 7 + src/de/fernflower/code/instructions/ISHR.java | 7 + .../fernflower/code/instructions/ISTORE.java | 38 + src/de/fernflower/code/instructions/ISUB.java | 7 + .../fernflower/code/instructions/IUSHR.java | 7 + src/de/fernflower/code/instructions/IXOR.java | 7 + src/de/fernflower/code/instructions/JSR.java | 30 + .../fernflower/code/instructions/JSR_W.java | 19 + src/de/fernflower/code/instructions/L2D.java | 7 + src/de/fernflower/code/instructions/L2F.java | 7 + src/de/fernflower/code/instructions/L2I.java | 7 + src/de/fernflower/code/instructions/LADD.java | 7 + .../fernflower/code/instructions/LALOAD.java | 7 + src/de/fernflower/code/instructions/LAND.java | 7 + .../fernflower/code/instructions/LASTORE.java | 7 + src/de/fernflower/code/instructions/LCMP.java | 7 + .../code/instructions/LCONST_0.java | 7 + .../code/instructions/LCONST_1.java | 7 + src/de/fernflower/code/instructions/LDC.java | 19 + .../fernflower/code/instructions/LDC2_W.java | 19 + .../fernflower/code/instructions/LDC_W.java | 19 + src/de/fernflower/code/instructions/LDIV.java | 7 + .../fernflower/code/instructions/LLOAD.java | 38 + src/de/fernflower/code/instructions/LMUL.java | 7 + src/de/fernflower/code/instructions/LNEG.java | 7 + .../code/instructions/LOOKUPSWITCH.java | 28 + src/de/fernflower/code/instructions/LOR.java | 7 + src/de/fernflower/code/instructions/LREM.java | 7 + .../fernflower/code/instructions/LRETURN.java | 7 + src/de/fernflower/code/instructions/LSHL.java | 7 + src/de/fernflower/code/instructions/LSHR.java | 7 + .../fernflower/code/instructions/LSTORE.java | 38 + src/de/fernflower/code/instructions/LSUB.java | 7 + .../fernflower/code/instructions/LUSHR.java | 7 + src/de/fernflower/code/instructions/LXOR.java | 7 + .../code/instructions/MONITORENTER.java | 7 + .../code/instructions/MONITOREXIT.java | 7 + .../code/instructions/MULTIANEWARRAY.java | 20 + src/de/fernflower/code/instructions/NEW.java | 19 + .../code/instructions/NEWARRAY.java | 19 + src/de/fernflower/code/instructions/NOP.java | 7 + src/de/fernflower/code/instructions/POP.java | 7 + src/de/fernflower/code/instructions/POP2.java | 7 + .../code/instructions/PUTFIELD.java | 19 + .../code/instructions/PUTSTATIC.java | 19 + src/de/fernflower/code/instructions/RET.java | 26 + .../fernflower/code/instructions/RETURN.java | 7 + .../fernflower/code/instructions/SALOAD.java | 7 + .../fernflower/code/instructions/SASTORE.java | 7 + .../fernflower/code/instructions/SIPUSH.java | 19 + src/de/fernflower/code/instructions/SWAP.java | 7 + .../code/instructions/TABLESWITCH.java | 29 + .../code/instructions/XXXUNUSEDXXX.java | 7 + .../code/interpreter/InstructionImpact.java | 465 ++++++ src/de/fernflower/code/interpreter/Util.java | 265 ++++ .../code/optinstructions/ALOAD.java | 56 + .../code/optinstructions/ANEWARRAY.java | 33 + .../code/optinstructions/ASTORE.java | 56 + .../code/optinstructions/BIPUSH.java | 44 + .../code/optinstructions/CHECKCAST.java | 34 + .../code/optinstructions/DLOAD.java | 56 + .../code/optinstructions/DSTORE.java | 55 + .../code/optinstructions/FLOAD.java | 56 + .../code/optinstructions/FSTORE.java | 55 + .../code/optinstructions/GETFIELD.java | 32 + .../code/optinstructions/GETSTATIC.java | 33 + .../fernflower/code/optinstructions/GOTO.java | 44 + .../code/optinstructions/GOTO_W.java | 33 + .../fernflower/code/optinstructions/IINC.java | 42 + .../code/optinstructions/ILOAD.java | 52 + .../code/optinstructions/INSTANCEOF.java | 33 + .../code/optinstructions/INVOKEINTERFACE.java | 35 + .../code/optinstructions/INVOKESPECIAL.java | 33 + .../code/optinstructions/INVOKESTATIC.java | 33 + .../code/optinstructions/INVOKEVIRTUAL.java | 33 + .../code/optinstructions/ISTORE.java | 52 + .../fernflower/code/optinstructions/JSR.java | 44 + .../code/optinstructions/JSR_W.java | 33 + .../fernflower/code/optinstructions/LDC.java | 33 + .../code/optinstructions/LDC2_W.java | 33 + .../code/optinstructions/LDC_W.java | 33 + .../code/optinstructions/LLOAD.java | 52 + .../code/optinstructions/LOOKUPSWITCH.java | 42 + .../code/optinstructions/LSTORE.java | 52 + .../code/optinstructions/MULTIANEWARRAY.java | 34 + .../fernflower/code/optinstructions/NEW.java | 33 + .../code/optinstructions/NEWARRAY.java | 33 + .../code/optinstructions/PUTFIELD.java | 33 + .../code/optinstructions/PUTSTATIC.java | 33 + .../fernflower/code/optinstructions/RET.java | 40 + .../code/optinstructions/SIPUSH.java | 33 + .../code/optinstructions/TABLESWITCH.java | 43 + src/de/fernflower/main/AssertProcessor.java | 321 ++++ .../main/ClassReference14Processor.java | 306 ++++ src/de/fernflower/main/ClassWriter.java | 928 +++++++++++ src/de/fernflower/main/ClassesProcessor.java | 378 +++++ src/de/fernflower/main/DecompilerContext.java | 192 +++ src/de/fernflower/main/EnumProcessor.java | 158 ++ src/de/fernflower/main/Fernflower.java | 108 ++ .../fernflower/main/InitializerProcessor.java | 314 ++++ .../main/collectors/CounterContainer.java | 37 + .../main/collectors/ImportCollector.java | 155 ++ .../main/collectors/VarNamesCollector.java | 50 + .../main/decompiler/ConsoleDecompiler.java | 323 ++++ .../main/decompiler/EclipseDecompiler.java | 44 + .../main/decompiler/WebDecompiler.java | 78 + .../decompiler/helper/PrintStreamLogger.java | 86 ++ .../main/extern/IBytecodeProvider.java | 23 + .../main/extern/IDecompilatSaver.java | 39 + .../main/extern/IFernflowerLogger.java | 59 + .../main/extern/IFernflowerPreferences.java | 55 + .../main/extern/IIdentifierRenamer.java | 20 + src/de/fernflower/main/rels/ClassWrapper.java | 223 +++ .../main/rels/MethodProcessorThread.java | 275 ++++ .../fernflower/main/rels/MethodWrapper.java | 62 + .../main/rels/NestedClassProcessor.java | 913 +++++++++++ .../main/rels/NestedMemberAccess.java | 449 ++++++ .../modules/code/DeadCodeHelper.java | 438 ++++++ .../modules/decompiler/ClearStructHelper.java | 41 + .../decompiler/ConcatenationHelper.java | 213 +++ .../modules/decompiler/DecHelper.java | 217 +++ .../modules/decompiler/DomHelper.java | 721 +++++++++ .../decompiler/EliminateLoopsHelper.java | 214 +++ .../modules/decompiler/ExitHelper.java | 348 +++++ .../modules/decompiler/ExprProcessor.java | 853 ++++++++++ .../modules/decompiler/ExprentStack.java | 46 + .../modules/decompiler/FinallyProcessor.java | 1032 +++++++++++++ .../modules/decompiler/IdeaNotNullHelper.java | 311 ++++ .../modules/decompiler/IfHelper.java | 731 +++++++++ .../decompiler/InlineSingleBlockHelper.java | 223 +++ .../modules/decompiler/LabelHelper.java | 521 +++++++ .../modules/decompiler/LoopExtractHelper.java | 209 +++ .../modules/decompiler/LowBreakHelper.java | 207 +++ .../modules/decompiler/MergeHelper.java | 416 +++++ .../modules/decompiler/PPandMMHelper.java | 153 ++ .../decompiler/PrimitiveExprsList.java | 47 + .../decompiler/SecondaryFunctionsHelper.java | 428 +++++ .../modules/decompiler/SequenceHelper.java | 326 ++++ .../decompiler/SimplifyExprentsHelper.java | 818 ++++++++++ .../decompiler/StackVarsProcessor.java | 697 +++++++++ .../modules/decompiler/StatEdge.java | 103 ++ .../decompiler/StrongConnectivityHelper.java | 204 +++ .../decompiler/decompose/DominatorEngine.java | 127 ++ .../DominatorTreeExceptionFilter.java | 188 +++ .../FastExtendedPostdominanceHelper.java | 362 +++++ .../decompose/GenericDominatorEngine.java | 150 ++ .../modules/decompiler/decompose/IGraph.java | 26 + .../decompiler/decompose/IGraphNode.java | 23 + .../deobfuscator/ExceptionDeobfuscator.java | 324 ++++ .../IrreducibleCFGDeobfuscator.java | 238 +++ .../decompiler/exps/AnnotationExprent.java | 111 ++ .../modules/decompiler/exps/ArrayExprent.java | 125 ++ .../decompiler/exps/AssertExprent.java | 51 + .../decompiler/exps/AssignmentExprent.java | 195 +++ .../modules/decompiler/exps/ConstExprent.java | 345 +++++ .../modules/decompiler/exps/ExitExprent.java | 150 ++ .../modules/decompiler/exps/Exprent.java | 134 ++ .../modules/decompiler/exps/FieldExprent.java | 197 +++ .../decompiler/exps/FunctionExprent.java | 586 +++++++ .../modules/decompiler/exps/IfExprent.java | 148 ++ .../decompiler/exps/InvocationExprent.java | 448 ++++++ .../decompiler/exps/MonitorExprent.java | 83 + .../modules/decompiler/exps/NewExprent.java | 474 ++++++ .../decompiler/exps/SwitchExprent.java | 106 ++ .../modules/decompiler/exps/VarExprent.java | 200 +++ .../decompiler/sforms/DirectGraph.java | 136 ++ .../modules/decompiler/sforms/DirectNode.java | 68 + .../sforms/FlattenStatementsHelper.java | 556 +++++++ .../sforms/SSAConstructorSparseEx.java | 509 ++++++ .../sforms/SSAUConstructorSparseEx.java | 820 ++++++++++ .../decompiler/stats/BasicBlockStatement.java | 95 ++ .../decompiler/stats/CatchAllStatement.java | 233 +++ .../decompiler/stats/CatchStatement.java | 206 +++ .../modules/decompiler/stats/DoStatement.java | 221 +++ .../decompiler/stats/GeneralStatement.java | 75 + .../modules/decompiler/stats/IfStatement.java | 404 +++++ .../decompiler/stats/RootStatement.java | 49 + .../decompiler/stats/SequenceStatement.java | 144 ++ .../modules/decompiler/stats/Statement.java | 871 +++++++++++ .../decompiler/stats/SwitchStatement.java | 359 +++++ .../stats/SynchronizedStatement.java | 154 ++ .../decompiler/vars/CheckTypesResult.java | 57 + .../decompiler/vars/VarDefinitionHelper.java | 358 +++++ .../modules/decompiler/vars/VarProcessor.java | 135 ++ .../decompiler/vars/VarTypeProcessor.java | 273 ++++ .../decompiler/vars/VarVersionEdge.java | 56 + .../decompiler/vars/VarVersionNode.java | 80 + .../decompiler/vars/VarVersionPaar.java | 67 + .../decompiler/vars/VarVersionsGraph.java | 172 +++ .../decompiler/vars/VarVersionsProcessor.java | 332 ++++ .../modules/renamer/ClassWrapperNode.java | 41 + .../modules/renamer/ConverterHelper.java | 127 ++ .../modules/renamer/IdentifierConverter.java | 447 ++++++ .../modules/renamer/PoolInterceptor.java | 36 + src/de/fernflower/struct/ContextUnit.java | 210 +++ src/de/fernflower/struct/IDecompiledData.java | 23 + src/de/fernflower/struct/ISaveClass.java | 30 + src/de/fernflower/struct/StructClass.java | 321 ++++ src/de/fernflower/struct/StructContext.java | 211 +++ src/de/fernflower/struct/StructField.java | 109 ++ src/de/fernflower/struct/StructMethod.java | 547 +++++++ .../attr/StructAnnDefaultAttribute.java | 40 + .../attr/StructAnnotationAttribute.java | 170 ++ .../StructAnnotationParameterAttribute.java | 57 + .../attr/StructConstantValueAttribute.java | 34 + .../attr/StructEnclosingMethodAttribute.java | 57 + .../attr/StructExceptionsAttribute.java | 78 + .../struct/attr/StructGeneralAttribute.java | 134 ++ .../attr/StructGenericSignatureAttribute.java | 34 + .../attr/StructInnerClassesAttribute.java | 73 + .../StructLocalVariableTableAttribute.java | 47 + .../struct/consts/ConstantPool.java | 327 ++++ .../struct/consts/LinkConstant.java | 156 ++ .../struct/consts/PooledConstant.java | 116 ++ .../struct/consts/PrimitiveConstant.java | 129 ++ .../struct/consts/VariableTypeEnum.java | 47 + src/de/fernflower/struct/gen/DataPoint.java | 98 ++ .../struct/gen/FieldDescriptor.java | 61 + .../struct/gen/MethodDescriptor.java | 110 ++ src/de/fernflower/struct/gen/VarType.java | 395 +++++ .../gen/generics/GenericClassDescriptor.java | 30 + .../gen/generics/GenericFieldDescriptor.java | 21 + .../struct/gen/generics/GenericMain.java | 229 +++ .../gen/generics/GenericMethodDescriptor.java | 32 + .../struct/gen/generics/GenericType.java | 270 ++++ src/de/fernflower/struct/lazy/LazyLoader.java | 186 +++ .../fernflower/util/DataInputFullStream.java | 50 + .../fernflower/util/FastFixedSetFactory.java | 365 +++++ src/de/fernflower/util/FastSetFactory.java | 488 ++++++ .../fernflower/util/FastSparseSetFactory.java | 551 +++++++ src/de/fernflower/util/InterpreterUtil.java | 150 ++ src/de/fernflower/util/ListStack.java | 101 ++ src/de/fernflower/util/SFormsFastMap.java | 232 +++ .../fernflower/util/SFormsFastMapDirect.java | 411 +++++ src/de/fernflower/util/SFormsFastMapOld.java | 270 ++++ src/de/fernflower/util/VBStyleCollection.java | 204 +++ src/test/BradTest.java | 57 + src/test/FernflowerTest.java | 417 +++++ src/test/JetTest.java | 40 + src/test/JunitTest.java | 95 ++ src/test/SumUpClasses.java | 81 + .../TestAnnotationsEclipse$MyAnnotation.class | Bin 0 -> 402 bytes .../TestAnnotationsEclipse$TestInner.class | Bin 0 -> 938 bytes src/test/TestAnnotationsEclipse.class | Bin 0 -> 415 bytes src/test/TestAnnotationsEclipse.java | 42 + src/test/TestInput.java | 54 + src/test/TestRapc.java | 38 + src/test/TestRuntime1_4_2_03.java | 38 + src/test/TestSelf.java | 36 + src/test/TestValidateXml.java | 69 + src/test/TestYWorks.java | 38 + src/test/VladDebug.java | 67 + src/test/input/TestEclipse7.java | 59 + src/test/input/TestJavac7.class | Bin 0 -> 2397 bytes src/test/input/TestJavac7.java | 59 + src/test/input/TestJavac8.class | Bin 0 -> 1330 bytes src/test/input/TestJavac8.java | 58 + src/test/input/TestLoop.java | 20 + src/test/misc/ExtTest.java | 81 + src/test/misc/GenericTest.java | 65 + src/test/misc/ITest.java | 9 + src/test/misc/MainClass.java | 115 ++ src/test/misc/MiscTest.java | 83 + src/test/misc/MultipleClassTest.java | 33 + .../misc/ObfuscatedExceptionDetector.java | 55 + src/test/misc/ParentFieldTest.java | 19 + src/test/misc/SuperTest.java | 27 + src/test/misc/ann/RequestForEnhancement.java | 22 + src/test/misc/en/AutocastTest.java | 17 + src/test/misc/en/FastSetTest.java | 60 + src/test/misc/en/FinallyTest.java | 22 + src/test/misc/en/Foo.java | 52 + src/test/misc/en/InnerTest$1.java | 22 + src/test/misc/en/InnerTest.java | 13 + src/test/misc/en/InnerTestOld.java | 20 + src/test/misc/en/IrredTest.java | 1373 +++++++++++++++++ src/test/misc/en/ListInsertTest.java | 34 + src/test/misc/en/Operation.java | 51 + src/test/misc/en/SwitchInTest.java | 19 + src/test/misc/en/TestOperation.java | 31 + src/test/output/TestEclipse7.java | 15 + src/test/output/TestJavac7.java | 129 ++ src/test/output/TestJavac8.java | 104 ++ src/test/util/DotExporter.java | 183 +++ src/test/util/MemoryMonitor.java | 25 + src/test/util/Timer.java | 31 + src/test/util/ZipStripper.java | 71 + timer/HRTimerResolution.java | 68 + timer/SystemTimerResolution.java | 31 + timer/com/vladium/utils/timing/ITimer.java | 54 + .../vladium/utils/timing/ITimerConstants.java | 31 + .../vladium/utils/timing/JavaSystemTimer.java | 74 + .../vladium/utils/timing/TimerFactory.java | 74 + .../native/com_vladium_utils_timing_HRTimer.c | 71 + .../native/com_vladium_utils_timing_HRTimer.h | 22 + 429 files changed, 46558 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 bin/.gitignore create mode 100644 build.xml create mode 100644 dist/docs/license_en.txt create mode 100644 dist/docs/lizenz_de.txt create mode 100644 dist/docs/readme.txt create mode 100644 dist/full/fernflower.jar create mode 100644 dist/obfuscated/fernflower.jar create mode 100644 lib/ncss/ccl.jar create mode 100644 lib/ncss/javacc.jar create mode 100644 lib/ncss/javancss.jar create mode 100644 lib/proguard.jar create mode 100644 lib/proguard_4_11.jar create mode 100644 lib/timer/hrtlib.dll create mode 100644 lib/timer/timer.jar create mode 100644 src/de/fernflower/code/CodeConstants.java create mode 100644 src/de/fernflower/code/ConstantsUtil.java create mode 100644 src/de/fernflower/code/ConstantsUtilOld.java create mode 100644 src/de/fernflower/code/ExceptionHandler.java create mode 100644 src/de/fernflower/code/ExceptionTable.java create mode 100644 src/de/fernflower/code/FullInstructionSequence.java create mode 100644 src/de/fernflower/code/IfInstruction.java create mode 100644 src/de/fernflower/code/Instruction.java create mode 100644 src/de/fernflower/code/InstructionSequence.java create mode 100644 src/de/fernflower/code/JumpInstruction.java create mode 100644 src/de/fernflower/code/SimpleInstructionSequence.java create mode 100644 src/de/fernflower/code/SwitchInstruction.java create mode 100644 src/de/fernflower/code/cfg/BasicBlock.java create mode 100644 src/de/fernflower/code/cfg/ControlFlowGraph.java create mode 100644 src/de/fernflower/code/cfg/ExceptionRangeCFG.java create mode 100644 src/de/fernflower/code/instructions/AALOAD.java create mode 100644 src/de/fernflower/code/instructions/AASTORE.java create mode 100644 src/de/fernflower/code/instructions/ACONST_NULL.java create mode 100644 src/de/fernflower/code/instructions/ALOAD.java create mode 100644 src/de/fernflower/code/instructions/ANEWARRAY.java create mode 100644 src/de/fernflower/code/instructions/ARETURN.java create mode 100644 src/de/fernflower/code/instructions/ARRAYLENGTH.java create mode 100644 src/de/fernflower/code/instructions/ASTORE.java create mode 100644 src/de/fernflower/code/instructions/ATHROW.java create mode 100644 src/de/fernflower/code/instructions/BALOAD.java create mode 100644 src/de/fernflower/code/instructions/BASTORE.java create mode 100644 src/de/fernflower/code/instructions/BIPUSH.java create mode 100644 src/de/fernflower/code/instructions/CALOAD.java create mode 100644 src/de/fernflower/code/instructions/CASTORE.java create mode 100644 src/de/fernflower/code/instructions/CHECKCAST.java create mode 100644 src/de/fernflower/code/instructions/D2F.java create mode 100644 src/de/fernflower/code/instructions/D2I.java create mode 100644 src/de/fernflower/code/instructions/D2L.java create mode 100644 src/de/fernflower/code/instructions/DADD.java create mode 100644 src/de/fernflower/code/instructions/DALOAD.java create mode 100644 src/de/fernflower/code/instructions/DASTORE.java create mode 100644 src/de/fernflower/code/instructions/DCMPG.java create mode 100644 src/de/fernflower/code/instructions/DCMPL.java create mode 100644 src/de/fernflower/code/instructions/DCONST_0.java create mode 100644 src/de/fernflower/code/instructions/DCONST_1.java create mode 100644 src/de/fernflower/code/instructions/DDIV.java create mode 100644 src/de/fernflower/code/instructions/DLOAD.java create mode 100644 src/de/fernflower/code/instructions/DMUL.java create mode 100644 src/de/fernflower/code/instructions/DNEG.java create mode 100644 src/de/fernflower/code/instructions/DREM.java create mode 100644 src/de/fernflower/code/instructions/DRETURN.java create mode 100644 src/de/fernflower/code/instructions/DSTORE.java create mode 100644 src/de/fernflower/code/instructions/DSUB.java create mode 100644 src/de/fernflower/code/instructions/DUP.java create mode 100644 src/de/fernflower/code/instructions/DUP2.java create mode 100644 src/de/fernflower/code/instructions/DUP2_X1.java create mode 100644 src/de/fernflower/code/instructions/DUP2_X2.java create mode 100644 src/de/fernflower/code/instructions/DUP_X1.java create mode 100644 src/de/fernflower/code/instructions/DUP_X2.java create mode 100644 src/de/fernflower/code/instructions/F2D.java create mode 100644 src/de/fernflower/code/instructions/F2I.java create mode 100644 src/de/fernflower/code/instructions/F2L.java create mode 100644 src/de/fernflower/code/instructions/FADD.java create mode 100644 src/de/fernflower/code/instructions/FALOAD.java create mode 100644 src/de/fernflower/code/instructions/FASTORE.java create mode 100644 src/de/fernflower/code/instructions/FCMPG.java create mode 100644 src/de/fernflower/code/instructions/FCMPL.java create mode 100644 src/de/fernflower/code/instructions/FCONST_0.java create mode 100644 src/de/fernflower/code/instructions/FCONST_1.java create mode 100644 src/de/fernflower/code/instructions/FCONST_2.java create mode 100644 src/de/fernflower/code/instructions/FDIV.java create mode 100644 src/de/fernflower/code/instructions/FLOAD.java create mode 100644 src/de/fernflower/code/instructions/FMUL.java create mode 100644 src/de/fernflower/code/instructions/FNEG.java create mode 100644 src/de/fernflower/code/instructions/FREM.java create mode 100644 src/de/fernflower/code/instructions/FRETURN.java create mode 100644 src/de/fernflower/code/instructions/FSTORE.java create mode 100644 src/de/fernflower/code/instructions/FSUB.java create mode 100644 src/de/fernflower/code/instructions/GETFIELD.java create mode 100644 src/de/fernflower/code/instructions/GETSTATIC.java create mode 100644 src/de/fernflower/code/instructions/GOTO.java create mode 100644 src/de/fernflower/code/instructions/GOTO_W.java create mode 100644 src/de/fernflower/code/instructions/I2B.java create mode 100644 src/de/fernflower/code/instructions/I2C.java create mode 100644 src/de/fernflower/code/instructions/I2D.java create mode 100644 src/de/fernflower/code/instructions/I2F.java create mode 100644 src/de/fernflower/code/instructions/I2L.java create mode 100644 src/de/fernflower/code/instructions/I2S.java create mode 100644 src/de/fernflower/code/instructions/IADD.java create mode 100644 src/de/fernflower/code/instructions/IALOAD.java create mode 100644 src/de/fernflower/code/instructions/IAND.java create mode 100644 src/de/fernflower/code/instructions/IASTORE.java create mode 100644 src/de/fernflower/code/instructions/IDIV.java create mode 100644 src/de/fernflower/code/instructions/IFEQ.java create mode 100644 src/de/fernflower/code/instructions/IFGE.java create mode 100644 src/de/fernflower/code/instructions/IFGT.java create mode 100644 src/de/fernflower/code/instructions/IFLE.java create mode 100644 src/de/fernflower/code/instructions/IFLT.java create mode 100644 src/de/fernflower/code/instructions/IFNE.java create mode 100644 src/de/fernflower/code/instructions/IFNONNULL.java create mode 100644 src/de/fernflower/code/instructions/IFNULL.java create mode 100644 src/de/fernflower/code/instructions/IF_ACMPEQ.java create mode 100644 src/de/fernflower/code/instructions/IF_ACMPNE.java create mode 100644 src/de/fernflower/code/instructions/IF_ICMPEQ.java create mode 100644 src/de/fernflower/code/instructions/IF_ICMPGE.java create mode 100644 src/de/fernflower/code/instructions/IF_ICMPGT.java create mode 100644 src/de/fernflower/code/instructions/IF_ICMPLE.java create mode 100644 src/de/fernflower/code/instructions/IF_ICMPLT.java create mode 100644 src/de/fernflower/code/instructions/IF_ICMPNE.java create mode 100644 src/de/fernflower/code/instructions/IINC.java create mode 100644 src/de/fernflower/code/instructions/ILOAD.java create mode 100644 src/de/fernflower/code/instructions/IMUL.java create mode 100644 src/de/fernflower/code/instructions/INEG.java create mode 100644 src/de/fernflower/code/instructions/INSTANCEOF.java create mode 100644 src/de/fernflower/code/instructions/INVOKEINTERFACE.java create mode 100644 src/de/fernflower/code/instructions/INVOKESPECIAL.java create mode 100644 src/de/fernflower/code/instructions/INVOKESTATIC.java create mode 100644 src/de/fernflower/code/instructions/INVOKEVIRTUAL.java create mode 100644 src/de/fernflower/code/instructions/IOR.java create mode 100644 src/de/fernflower/code/instructions/IREM.java create mode 100644 src/de/fernflower/code/instructions/IRETURN.java create mode 100644 src/de/fernflower/code/instructions/ISHL.java create mode 100644 src/de/fernflower/code/instructions/ISHR.java create mode 100644 src/de/fernflower/code/instructions/ISTORE.java create mode 100644 src/de/fernflower/code/instructions/ISUB.java create mode 100644 src/de/fernflower/code/instructions/IUSHR.java create mode 100644 src/de/fernflower/code/instructions/IXOR.java create mode 100644 src/de/fernflower/code/instructions/JSR.java create mode 100644 src/de/fernflower/code/instructions/JSR_W.java create mode 100644 src/de/fernflower/code/instructions/L2D.java create mode 100644 src/de/fernflower/code/instructions/L2F.java create mode 100644 src/de/fernflower/code/instructions/L2I.java create mode 100644 src/de/fernflower/code/instructions/LADD.java create mode 100644 src/de/fernflower/code/instructions/LALOAD.java create mode 100644 src/de/fernflower/code/instructions/LAND.java create mode 100644 src/de/fernflower/code/instructions/LASTORE.java create mode 100644 src/de/fernflower/code/instructions/LCMP.java create mode 100644 src/de/fernflower/code/instructions/LCONST_0.java create mode 100644 src/de/fernflower/code/instructions/LCONST_1.java create mode 100644 src/de/fernflower/code/instructions/LDC.java create mode 100644 src/de/fernflower/code/instructions/LDC2_W.java create mode 100644 src/de/fernflower/code/instructions/LDC_W.java create mode 100644 src/de/fernflower/code/instructions/LDIV.java create mode 100644 src/de/fernflower/code/instructions/LLOAD.java create mode 100644 src/de/fernflower/code/instructions/LMUL.java create mode 100644 src/de/fernflower/code/instructions/LNEG.java create mode 100644 src/de/fernflower/code/instructions/LOOKUPSWITCH.java create mode 100644 src/de/fernflower/code/instructions/LOR.java create mode 100644 src/de/fernflower/code/instructions/LREM.java create mode 100644 src/de/fernflower/code/instructions/LRETURN.java create mode 100644 src/de/fernflower/code/instructions/LSHL.java create mode 100644 src/de/fernflower/code/instructions/LSHR.java create mode 100644 src/de/fernflower/code/instructions/LSTORE.java create mode 100644 src/de/fernflower/code/instructions/LSUB.java create mode 100644 src/de/fernflower/code/instructions/LUSHR.java create mode 100644 src/de/fernflower/code/instructions/LXOR.java create mode 100644 src/de/fernflower/code/instructions/MONITORENTER.java create mode 100644 src/de/fernflower/code/instructions/MONITOREXIT.java create mode 100644 src/de/fernflower/code/instructions/MULTIANEWARRAY.java create mode 100644 src/de/fernflower/code/instructions/NEW.java create mode 100644 src/de/fernflower/code/instructions/NEWARRAY.java create mode 100644 src/de/fernflower/code/instructions/NOP.java create mode 100644 src/de/fernflower/code/instructions/POP.java create mode 100644 src/de/fernflower/code/instructions/POP2.java create mode 100644 src/de/fernflower/code/instructions/PUTFIELD.java create mode 100644 src/de/fernflower/code/instructions/PUTSTATIC.java create mode 100644 src/de/fernflower/code/instructions/RET.java create mode 100644 src/de/fernflower/code/instructions/RETURN.java create mode 100644 src/de/fernflower/code/instructions/SALOAD.java create mode 100644 src/de/fernflower/code/instructions/SASTORE.java create mode 100644 src/de/fernflower/code/instructions/SIPUSH.java create mode 100644 src/de/fernflower/code/instructions/SWAP.java create mode 100644 src/de/fernflower/code/instructions/TABLESWITCH.java create mode 100644 src/de/fernflower/code/instructions/XXXUNUSEDXXX.java create mode 100644 src/de/fernflower/code/interpreter/InstructionImpact.java create mode 100644 src/de/fernflower/code/interpreter/Util.java create mode 100644 src/de/fernflower/code/optinstructions/ALOAD.java create mode 100644 src/de/fernflower/code/optinstructions/ANEWARRAY.java create mode 100644 src/de/fernflower/code/optinstructions/ASTORE.java create mode 100644 src/de/fernflower/code/optinstructions/BIPUSH.java create mode 100644 src/de/fernflower/code/optinstructions/CHECKCAST.java create mode 100644 src/de/fernflower/code/optinstructions/DLOAD.java create mode 100644 src/de/fernflower/code/optinstructions/DSTORE.java create mode 100644 src/de/fernflower/code/optinstructions/FLOAD.java create mode 100644 src/de/fernflower/code/optinstructions/FSTORE.java create mode 100644 src/de/fernflower/code/optinstructions/GETFIELD.java create mode 100644 src/de/fernflower/code/optinstructions/GETSTATIC.java create mode 100644 src/de/fernflower/code/optinstructions/GOTO.java create mode 100644 src/de/fernflower/code/optinstructions/GOTO_W.java create mode 100644 src/de/fernflower/code/optinstructions/IINC.java create mode 100644 src/de/fernflower/code/optinstructions/ILOAD.java create mode 100644 src/de/fernflower/code/optinstructions/INSTANCEOF.java create mode 100644 src/de/fernflower/code/optinstructions/INVOKEINTERFACE.java create mode 100644 src/de/fernflower/code/optinstructions/INVOKESPECIAL.java create mode 100644 src/de/fernflower/code/optinstructions/INVOKESTATIC.java create mode 100644 src/de/fernflower/code/optinstructions/INVOKEVIRTUAL.java create mode 100644 src/de/fernflower/code/optinstructions/ISTORE.java create mode 100644 src/de/fernflower/code/optinstructions/JSR.java create mode 100644 src/de/fernflower/code/optinstructions/JSR_W.java create mode 100644 src/de/fernflower/code/optinstructions/LDC.java create mode 100644 src/de/fernflower/code/optinstructions/LDC2_W.java create mode 100644 src/de/fernflower/code/optinstructions/LDC_W.java create mode 100644 src/de/fernflower/code/optinstructions/LLOAD.java create mode 100644 src/de/fernflower/code/optinstructions/LOOKUPSWITCH.java create mode 100644 src/de/fernflower/code/optinstructions/LSTORE.java create mode 100644 src/de/fernflower/code/optinstructions/MULTIANEWARRAY.java create mode 100644 src/de/fernflower/code/optinstructions/NEW.java create mode 100644 src/de/fernflower/code/optinstructions/NEWARRAY.java create mode 100644 src/de/fernflower/code/optinstructions/PUTFIELD.java create mode 100644 src/de/fernflower/code/optinstructions/PUTSTATIC.java create mode 100644 src/de/fernflower/code/optinstructions/RET.java create mode 100644 src/de/fernflower/code/optinstructions/SIPUSH.java create mode 100644 src/de/fernflower/code/optinstructions/TABLESWITCH.java create mode 100644 src/de/fernflower/main/AssertProcessor.java create mode 100644 src/de/fernflower/main/ClassReference14Processor.java create mode 100644 src/de/fernflower/main/ClassWriter.java create mode 100644 src/de/fernflower/main/ClassesProcessor.java create mode 100644 src/de/fernflower/main/DecompilerContext.java create mode 100644 src/de/fernflower/main/EnumProcessor.java create mode 100644 src/de/fernflower/main/Fernflower.java create mode 100644 src/de/fernflower/main/InitializerProcessor.java create mode 100644 src/de/fernflower/main/collectors/CounterContainer.java create mode 100644 src/de/fernflower/main/collectors/ImportCollector.java create mode 100644 src/de/fernflower/main/collectors/VarNamesCollector.java create mode 100644 src/de/fernflower/main/decompiler/ConsoleDecompiler.java create mode 100644 src/de/fernflower/main/decompiler/EclipseDecompiler.java create mode 100644 src/de/fernflower/main/decompiler/WebDecompiler.java create mode 100644 src/de/fernflower/main/decompiler/helper/PrintStreamLogger.java create mode 100644 src/de/fernflower/main/extern/IBytecodeProvider.java create mode 100644 src/de/fernflower/main/extern/IDecompilatSaver.java create mode 100644 src/de/fernflower/main/extern/IFernflowerLogger.java create mode 100644 src/de/fernflower/main/extern/IFernflowerPreferences.java create mode 100644 src/de/fernflower/main/extern/IIdentifierRenamer.java create mode 100644 src/de/fernflower/main/rels/ClassWrapper.java create mode 100644 src/de/fernflower/main/rels/MethodProcessorThread.java create mode 100644 src/de/fernflower/main/rels/MethodWrapper.java create mode 100644 src/de/fernflower/main/rels/NestedClassProcessor.java create mode 100644 src/de/fernflower/main/rels/NestedMemberAccess.java create mode 100644 src/de/fernflower/modules/code/DeadCodeHelper.java create mode 100644 src/de/fernflower/modules/decompiler/ClearStructHelper.java create mode 100644 src/de/fernflower/modules/decompiler/ConcatenationHelper.java create mode 100644 src/de/fernflower/modules/decompiler/DecHelper.java create mode 100644 src/de/fernflower/modules/decompiler/DomHelper.java create mode 100644 src/de/fernflower/modules/decompiler/EliminateLoopsHelper.java create mode 100644 src/de/fernflower/modules/decompiler/ExitHelper.java create mode 100644 src/de/fernflower/modules/decompiler/ExprProcessor.java create mode 100644 src/de/fernflower/modules/decompiler/ExprentStack.java create mode 100644 src/de/fernflower/modules/decompiler/FinallyProcessor.java create mode 100644 src/de/fernflower/modules/decompiler/IdeaNotNullHelper.java create mode 100644 src/de/fernflower/modules/decompiler/IfHelper.java create mode 100644 src/de/fernflower/modules/decompiler/InlineSingleBlockHelper.java create mode 100644 src/de/fernflower/modules/decompiler/LabelHelper.java create mode 100644 src/de/fernflower/modules/decompiler/LoopExtractHelper.java create mode 100644 src/de/fernflower/modules/decompiler/LowBreakHelper.java create mode 100644 src/de/fernflower/modules/decompiler/MergeHelper.java create mode 100644 src/de/fernflower/modules/decompiler/PPandMMHelper.java create mode 100644 src/de/fernflower/modules/decompiler/PrimitiveExprsList.java create mode 100644 src/de/fernflower/modules/decompiler/SecondaryFunctionsHelper.java create mode 100644 src/de/fernflower/modules/decompiler/SequenceHelper.java create mode 100644 src/de/fernflower/modules/decompiler/SimplifyExprentsHelper.java create mode 100644 src/de/fernflower/modules/decompiler/StackVarsProcessor.java create mode 100644 src/de/fernflower/modules/decompiler/StatEdge.java create mode 100644 src/de/fernflower/modules/decompiler/StrongConnectivityHelper.java create mode 100644 src/de/fernflower/modules/decompiler/decompose/DominatorEngine.java create mode 100644 src/de/fernflower/modules/decompiler/decompose/DominatorTreeExceptionFilter.java create mode 100644 src/de/fernflower/modules/decompiler/decompose/FastExtendedPostdominanceHelper.java create mode 100644 src/de/fernflower/modules/decompiler/decompose/GenericDominatorEngine.java create mode 100644 src/de/fernflower/modules/decompiler/decompose/IGraph.java create mode 100644 src/de/fernflower/modules/decompiler/decompose/IGraphNode.java create mode 100644 src/de/fernflower/modules/decompiler/deobfuscator/ExceptionDeobfuscator.java create mode 100644 src/de/fernflower/modules/decompiler/deobfuscator/IrreducibleCFGDeobfuscator.java create mode 100644 src/de/fernflower/modules/decompiler/exps/AnnotationExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/ArrayExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/AssertExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/AssignmentExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/ConstExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/ExitExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/Exprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/FieldExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/FunctionExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/IfExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/InvocationExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/MonitorExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/NewExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/SwitchExprent.java create mode 100644 src/de/fernflower/modules/decompiler/exps/VarExprent.java create mode 100644 src/de/fernflower/modules/decompiler/sforms/DirectGraph.java create mode 100644 src/de/fernflower/modules/decompiler/sforms/DirectNode.java create mode 100644 src/de/fernflower/modules/decompiler/sforms/FlattenStatementsHelper.java create mode 100644 src/de/fernflower/modules/decompiler/sforms/SSAConstructorSparseEx.java create mode 100644 src/de/fernflower/modules/decompiler/sforms/SSAUConstructorSparseEx.java create mode 100644 src/de/fernflower/modules/decompiler/stats/BasicBlockStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/CatchAllStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/CatchStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/DoStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/GeneralStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/IfStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/RootStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/SequenceStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/Statement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/SwitchStatement.java create mode 100644 src/de/fernflower/modules/decompiler/stats/SynchronizedStatement.java create mode 100644 src/de/fernflower/modules/decompiler/vars/CheckTypesResult.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarDefinitionHelper.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarProcessor.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarTypeProcessor.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarVersionEdge.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarVersionNode.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarVersionPaar.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarVersionsGraph.java create mode 100644 src/de/fernflower/modules/decompiler/vars/VarVersionsProcessor.java create mode 100644 src/de/fernflower/modules/renamer/ClassWrapperNode.java create mode 100644 src/de/fernflower/modules/renamer/ConverterHelper.java create mode 100644 src/de/fernflower/modules/renamer/IdentifierConverter.java create mode 100644 src/de/fernflower/modules/renamer/PoolInterceptor.java create mode 100644 src/de/fernflower/struct/ContextUnit.java create mode 100644 src/de/fernflower/struct/IDecompiledData.java create mode 100644 src/de/fernflower/struct/ISaveClass.java create mode 100644 src/de/fernflower/struct/StructClass.java create mode 100644 src/de/fernflower/struct/StructContext.java create mode 100644 src/de/fernflower/struct/StructField.java create mode 100644 src/de/fernflower/struct/StructMethod.java create mode 100644 src/de/fernflower/struct/attr/StructAnnDefaultAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructAnnotationAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructAnnotationParameterAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructConstantValueAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructEnclosingMethodAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructExceptionsAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructGeneralAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructGenericSignatureAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructInnerClassesAttribute.java create mode 100644 src/de/fernflower/struct/attr/StructLocalVariableTableAttribute.java create mode 100644 src/de/fernflower/struct/consts/ConstantPool.java create mode 100644 src/de/fernflower/struct/consts/LinkConstant.java create mode 100644 src/de/fernflower/struct/consts/PooledConstant.java create mode 100644 src/de/fernflower/struct/consts/PrimitiveConstant.java create mode 100644 src/de/fernflower/struct/consts/VariableTypeEnum.java create mode 100644 src/de/fernflower/struct/gen/DataPoint.java create mode 100644 src/de/fernflower/struct/gen/FieldDescriptor.java create mode 100644 src/de/fernflower/struct/gen/MethodDescriptor.java create mode 100644 src/de/fernflower/struct/gen/VarType.java create mode 100644 src/de/fernflower/struct/gen/generics/GenericClassDescriptor.java create mode 100644 src/de/fernflower/struct/gen/generics/GenericFieldDescriptor.java create mode 100644 src/de/fernflower/struct/gen/generics/GenericMain.java create mode 100644 src/de/fernflower/struct/gen/generics/GenericMethodDescriptor.java create mode 100644 src/de/fernflower/struct/gen/generics/GenericType.java create mode 100644 src/de/fernflower/struct/lazy/LazyLoader.java create mode 100644 src/de/fernflower/util/DataInputFullStream.java create mode 100644 src/de/fernflower/util/FastFixedSetFactory.java create mode 100644 src/de/fernflower/util/FastSetFactory.java create mode 100644 src/de/fernflower/util/FastSparseSetFactory.java create mode 100644 src/de/fernflower/util/InterpreterUtil.java create mode 100644 src/de/fernflower/util/ListStack.java create mode 100644 src/de/fernflower/util/SFormsFastMap.java create mode 100644 src/de/fernflower/util/SFormsFastMapDirect.java create mode 100644 src/de/fernflower/util/SFormsFastMapOld.java create mode 100644 src/de/fernflower/util/VBStyleCollection.java create mode 100644 src/test/BradTest.java create mode 100644 src/test/FernflowerTest.java create mode 100644 src/test/JetTest.java create mode 100644 src/test/JunitTest.java create mode 100644 src/test/SumUpClasses.java create mode 100644 src/test/TestAnnotationsEclipse$MyAnnotation.class create mode 100644 src/test/TestAnnotationsEclipse$TestInner.class create mode 100644 src/test/TestAnnotationsEclipse.class create mode 100644 src/test/TestAnnotationsEclipse.java create mode 100644 src/test/TestInput.java create mode 100644 src/test/TestRapc.java create mode 100644 src/test/TestRuntime1_4_2_03.java create mode 100644 src/test/TestSelf.java create mode 100644 src/test/TestValidateXml.java create mode 100644 src/test/TestYWorks.java create mode 100644 src/test/VladDebug.java create mode 100644 src/test/input/TestEclipse7.java create mode 100644 src/test/input/TestJavac7.class create mode 100644 src/test/input/TestJavac7.java create mode 100644 src/test/input/TestJavac8.class create mode 100644 src/test/input/TestJavac8.java create mode 100644 src/test/input/TestLoop.java create mode 100644 src/test/misc/ExtTest.java create mode 100644 src/test/misc/GenericTest.java create mode 100644 src/test/misc/ITest.java create mode 100644 src/test/misc/MainClass.java create mode 100644 src/test/misc/MiscTest.java create mode 100644 src/test/misc/MultipleClassTest.java create mode 100644 src/test/misc/ObfuscatedExceptionDetector.java create mode 100644 src/test/misc/ParentFieldTest.java create mode 100644 src/test/misc/SuperTest.java create mode 100644 src/test/misc/ann/RequestForEnhancement.java create mode 100644 src/test/misc/en/AutocastTest.java create mode 100644 src/test/misc/en/FastSetTest.java create mode 100644 src/test/misc/en/FinallyTest.java create mode 100644 src/test/misc/en/Foo.java create mode 100644 src/test/misc/en/InnerTest$1.java create mode 100644 src/test/misc/en/InnerTest.java create mode 100644 src/test/misc/en/InnerTestOld.java create mode 100644 src/test/misc/en/IrredTest.java create mode 100644 src/test/misc/en/ListInsertTest.java create mode 100644 src/test/misc/en/Operation.java create mode 100644 src/test/misc/en/SwitchInTest.java create mode 100644 src/test/misc/en/TestOperation.java create mode 100644 src/test/output/TestEclipse7.java create mode 100644 src/test/output/TestJavac7.java create mode 100644 src/test/output/TestJavac8.java create mode 100644 src/test/util/DotExporter.java create mode 100644 src/test/util/MemoryMonitor.java create mode 100644 src/test/util/Timer.java create mode 100644 src/test/util/ZipStripper.java create mode 100644 timer/HRTimerResolution.java create mode 100644 timer/SystemTimerResolution.java create mode 100644 timer/com/vladium/utils/timing/ITimer.java create mode 100644 timer/com/vladium/utils/timing/ITimerConstants.java create mode 100644 timer/com/vladium/utils/timing/JavaSystemTimer.java create mode 100644 timer/com/vladium/utils/timing/TimerFactory.java create mode 100644 timer/native/com_vladium_utils_timing_HRTimer.c create mode 100644 timer/native/com_vladium_utils_timing_HRTimer.h diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..544e389 --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..b2139d6 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Fernflower + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..3633df4 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +#Mon Oct 11 16:34:37 CEST 2010 +eclipse.preferences.version=1 +encoding//src/test/misc/en/InnerTest.java=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..7341ab1 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..8dcfd95 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,6 @@ +/HRTimerResolution.class +/SystemTimerResolution.class +/com +/de +/native +/test diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..8f05de2 --- /dev/null +++ b/build.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -injars "${fulldist}/${jar.file}" + -outjars "${obfuscateddist}/${jar.file}" + -libraryjars "${java.home}/lib/rt.jar" + + -forceprocessing + -repackageclasses + + + -optimizationpasses 5 + + -keep public class de.fernflower.main.decompiler.ConsoleDecompiler { + public protected *; + } + + -keep public class de.fernflower.main.decompiler.EclipseDecompiler { + public protected *; + } + + -keep public class de.fernflower.main.extern.* { + public protected *; + } + + + + + + + + + + -injars ${fulldist}/${jar.file} + -libraryjars ${java.home}/lib/rt.jar + + -dontoptimize + -dontobfuscate + -dontpreverify + -printusage + + + + -keep public class de.fernflower.main.decompiler.ConsoleDecompiler { + public protected *; + } + + -keep public class de.fernflower.main.decompiler.EclipseDecompiler { + public protected *; + } + + -keep public class de.fernflower.main.extern.* { + public protected *; + } + + + + + + + \ No newline at end of file diff --git a/dist/docs/license_en.txt b/dist/docs/license_en.txt new file mode 100644 index 0000000..4789841 --- /dev/null +++ b/dist/docs/license_en.txt @@ -0,0 +1,51 @@ +Fernflower Freeware License 1.0 + +This license applies to the Fernflower decompiler (hereafter “Software") +including any associated files, information and examples. + +You are hereby granted a non-exclusive and non-transferable license to +use and distribute the Software in binary form according to the following +terms and conditions. + + +1) Copies and Redistribution + +You may copy and distribute unmodified binary copies of the Software +provided that you keep this license intact. You must NOT charge money +or fees for the Software except to cover the absolutely necessary +distribution costs. + +Any other form of redistribution is prohibited. Especially you are not +allowed to redistribute the Software as part of any other software +collection or other product. + + +2) Use + +You may use the Software "as is" in any commercial or non-commercial environment +for any purpose. + + +3) Contact Information + +The sole author and owner of Fernflower is Stiver. Address all correspondence regarding +this license to: + +fernflower.decompiler@gmail.com + +http://www.reversed-java.com + + +4) Disclaimer of Warranty + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/dist/docs/lizenz_de.txt b/dist/docs/lizenz_de.txt new file mode 100644 index 0000000..a961e05 --- /dev/null +++ b/dist/docs/lizenz_de.txt @@ -0,0 +1,62 @@ +Fernflower Freeware Lizenz 1.0 + +Gegenstand der vorliegenden Lizenz ist der Fernflower Decompiler (im Folgenden "Software" genannt) +einschließlich aller dazu gehörenden Dateien, Informationen und Beispiele. + +Hiermit erhalten Sie eine nicht-ausschließliche und nicht-übertragbare Lizenz +für die Nutzung und Weitergabe der Software gemäß den nachfolgenden +Bedingungen. + + +1) Kopieren und Weitergeben + +Sie dürfen die Software kopieren und exakte Binärkopien unverändert +weitergeben, vorausgesetzt, diese Lizenz bleibt in der ursprünglichen Form +erhalten. Sie dürfen KEINE wie auch immer geartete Bezahlung oder Gebühren +für die Software verlangen, außer um die absolut unvermeidbaren Selbstkosten +der Weitergabe zu decken. + +Jede andere Form der Weitergabe ist untersagt. Insbesondere ist es nicht gestattet, +die Software als Teil einer anderen Softwaresammlung oder eines anderen Produktes +weiterzugeben. + + +2) Nutzung + +Sie können die Software beliebig in jeder kommerziellen oder nicht-kommerziellen Umgebung +zu jedem Zweck einsetzen. + + +3) Kontaktinformation + +Der einzige Autor und Eigentümer von Fernflower ist Stiver. Alle Rückfragen bezüglich dieser Lizenz +sind an + +fernflower.decompiler@gmail.com + +http://www.reversed-java.com + +zu richten. + + +4) GARANTIE- UND HAFTUNGSBESCHRÄNKUNGEN + +DIESE SOFTWARE WIRD IHNEN AUF DER GRUNDLAGE DES GEGENWÄRTIGEN ZUSTANDS ZUR +VERFÃœGUNG GESTELLT. ES GIBT KEINE GARANTIE, WEDER AUSDRÃœCKLICH NOCH IMPLIZIT. +DIES SCHLIEßT AUCH GARANTIEANSPRÃœCHE BEZÃœGLICH DER VERKAUFSQUALITÄT, +VERKÄUFLICHKEIT ODER EIGNUNG FÃœR EINEN BESTIMMTEN ZWECk AUS, ODER SOLCHE, DIE +DURCH GELTENDES RECHT, GESETZLICHE VORSCHRIFTEN, GESCHÄFTSGEBRAUCH ODER +HANDELSVERKEHR VERURSACHT WERDEN. DAS GESAMTE RISIKO IN BEZUG AUF DIE ERGEBNISSE +UND DIE LEISTUNG DES PROGRAMMS LIEGT BEI IHNEN. WEDER DER AUTOR NOCH IRGENDEIN +AN DEM PROJEKT BETEILIGTER HAT IRGENDEINE HAFTUNGSVERPFLICHTUNG IHNEN ODER +IRGENDEINER ANDEREN PERSON ODER INSTITUTION GEGENÃœBER FÃœR JEDWEDE INDIREKTE, +ZUFÄLLIGE, BESONDERE SCHÄDEN ODER IRGENDWELCHE FOLGESCHÄDEN. DIES GILT AUCH FÃœR +SCHÄDEN AUS ENTGANGENEM GEWINN, VERLORENEN ODER BESCHÄDIGTEN DATEN ODER FÃœR +ANDERE KOMMERZIELLE ODER WIRTSCHAFTLICHE VERLUSTE, SELBST DANN, WENN DER AUTOR +ODER IRGENDEIN AN DEM PROJEKT BETEILIGTER AUF DIE MÖGLICHKEIT DERARTIGER SCHÄDEN +HINGEWIESEN WURDE ODER DIESE VORHERSEHBAR WAREN, ODER FÃœR ANSPRÃœCHE DRITTER. DIE +HIER FESTGELEGTEN HAFTUNGSBESCHRÄNKUNGEN GELTEN UNABHÄNGUG DAVON, OB DER VERMEINTLICHE +ODER TATSÄCHLICHE VERTRAGSBRUCH EINE GRUNDSÄTZLICHE BEDINGUNG ODER +VERTRAGSVEREINBARUNG BERÃœHRT, ODER EIN GRUNDSÄTZLICHER VERTRAGSBRUCH IST. DIESER +ABSATZ IST EIN ESSENZIELLER TEIL DIESER LIZENZ. ES IST VERBOTEN DAS PROGRAMM ZU +BENUTZEN OHNE DASS DIESEM ABSATZ ZUGESTIMMT WIRD. diff --git a/dist/docs/readme.txt b/dist/docs/readme.txt new file mode 100644 index 0000000..b00a1f4 --- /dev/null +++ b/dist/docs/readme.txt @@ -0,0 +1,86 @@ +1. About the decompiler + +Fernflower is the first actually working analytical decompiler for Java and +probably for a high-level programming language in general. Naturally it is still +under development, please send your bug reports and improvement suggestions at +fernflower.decompiler@gmail.com + + +2. License + +See license_en.txt + + +3. Running from the command line + +java -jar fernflower.jar [-