sometsome 3.10.46 → 3.10.50.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- metadata +13 -963
- data/lib/hola.rb +0 -5
- data/lib/proguard4.7/README +0 -33
- data/lib/proguard4.7/bin/proguard.bat +0 -14
- data/lib/proguard4.7/bin/proguard.sh +0 -11
- data/lib/proguard4.7/bin/proguardgui.bat +0 -14
- data/lib/proguard4.7/bin/proguardgui.sh +0 -15
- data/lib/proguard4.7/bin/retrace.bat +0 -14
- data/lib/proguard4.7/bin/retrace.sh +0 -12
- data/lib/proguard4.7/build/build.sh +0 -94
- data/lib/proguard4.7/build/build.xml +0 -171
- data/lib/proguard4.7/build/makefile +0 -94
- data/lib/proguard4.7/docs/FAQ.html +0 -253
- data/lib/proguard4.7/docs/GPL.html +0 -406
- data/lib/proguard4.7/docs/GPL_exception.html +0 -56
- data/lib/proguard4.7/docs/acknowledgements.html +0 -76
- data/lib/proguard4.7/docs/alternatives.html +0 -699
- data/lib/proguard4.7/docs/checkmark.gif +0 -0
- data/lib/proguard4.7/docs/downloads.html +0 -623
- data/lib/proguard4.7/docs/drop1.gif +0 -0
- data/lib/proguard4.7/docs/drop2.gif +0 -0
- data/lib/proguard4.7/docs/drop3.gif +0 -0
- data/lib/proguard4.7/docs/favicon.ico +0 -0
- data/lib/proguard4.7/docs/feedback.html +0 -120
- data/lib/proguard4.7/docs/index.html +0 -92
- data/lib/proguard4.7/docs/license.html +0 -60
- data/lib/proguard4.7/docs/main.html +0 -102
- data/lib/proguard4.7/docs/manual/ant.html +0 -634
- data/lib/proguard4.7/docs/manual/attention.gif +0 -0
- data/lib/proguard4.7/docs/manual/examples.html +0 -1504
- data/lib/proguard4.7/docs/manual/gui.html +0 -479
- data/lib/proguard4.7/docs/manual/index.html +0 -51
- data/lib/proguard4.7/docs/manual/introduction.html +0 -173
- data/lib/proguard4.7/docs/manual/limitations.html +0 -69
- data/lib/proguard4.7/docs/manual/optimizations.html +0 -172
- data/lib/proguard4.7/docs/manual/refcard.html +0 -486
- data/lib/proguard4.7/docs/manual/retrace/examples.html +0 -345
- data/lib/proguard4.7/docs/manual/retrace/index.html +0 -37
- data/lib/proguard4.7/docs/manual/retrace/introduction.html +0 -79
- data/lib/proguard4.7/docs/manual/retrace/usage.html +0 -127
- data/lib/proguard4.7/docs/manual/sections.html +0 -60
- data/lib/proguard4.7/docs/manual/style.css +0 -105
- data/lib/proguard4.7/docs/manual/troubleshooting.html +0 -729
- data/lib/proguard4.7/docs/manual/usage.html +0 -1243
- data/lib/proguard4.7/docs/manual/wtk.html +0 -70
- data/lib/proguard4.7/docs/quality.html +0 -56
- data/lib/proguard4.7/docs/results.html +0 -170
- data/lib/proguard4.7/docs/saikoalogo.png +0 -0
- data/lib/proguard4.7/docs/screenshot_console.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_console_small.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui1.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui2.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui3.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui4.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui5.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui6.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui7.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui8.gif +0 -0
- data/lib/proguard4.7/docs/screenshots.html +0 -67
- data/lib/proguard4.7/docs/screenshots_gui_small.gif +0 -0
- data/lib/proguard4.7/docs/sections.html +0 -64
- data/lib/proguard4.7/docs/sflogo.png +0 -0
- data/lib/proguard4.7/docs/steel.gif +0 -0
- data/lib/proguard4.7/docs/style.css +0 -223
- data/lib/proguard4.7/docs/testimonials.html +0 -133
- data/lib/proguard4.7/docs/title.gif +0 -0
- data/lib/proguard4.7/docs/title.html +0 -17
- data/lib/proguard4.7/examples/android.pro +0 -149
- data/lib/proguard4.7/examples/annotations/examples.pro +0 -60
- data/lib/proguard4.7/examples/annotations/examples/Applet.java +0 -22
- data/lib/proguard4.7/examples/annotations/examples/Application.java +0 -20
- data/lib/proguard4.7/examples/annotations/examples/Bean.java +0 -56
- data/lib/proguard4.7/examples/annotations/examples/NativeCallBack.java +0 -44
- data/lib/proguard4.7/examples/annotations/lib/annotations.jar +0 -0
- data/lib/proguard4.7/examples/annotations/lib/annotations.pro +0 -118
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/Keep.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepApplication.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMemberNames.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMembers.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepGettersSetters.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepImplementations.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepName.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMemberNames.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMembers.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicGettersSetters.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicImplementations.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMemberNames.java +0 -18
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMembers.java +0 -19
- data/lib/proguard4.7/examples/ant/android-8.xml +0 -177
- data/lib/proguard4.7/examples/ant/applets.xml +0 -88
- data/lib/proguard4.7/examples/ant/applications1.xml +0 -15
- data/lib/proguard4.7/examples/ant/applications2.xml +0 -74
- data/lib/proguard4.7/examples/ant/applications3.xml +0 -98
- data/lib/proguard4.7/examples/ant/library.xml +0 -102
- data/lib/proguard4.7/examples/ant/midlets.xml +0 -52
- data/lib/proguard4.7/examples/ant/proguard.xml +0 -78
- data/lib/proguard4.7/examples/ant/servlets.xml +0 -88
- data/lib/proguard4.7/examples/applets.pro +0 -69
- data/lib/proguard4.7/examples/applications.pro +0 -75
- data/lib/proguard4.7/examples/dictionaries/compact.txt +0 -18
- data/lib/proguard4.7/examples/dictionaries/keywords.txt +0 -58
- data/lib/proguard4.7/examples/dictionaries/shakespeare.txt +0 -23
- data/lib/proguard4.7/examples/dictionaries/windows.txt +0 -209
- data/lib/proguard4.7/examples/library.pro +0 -79
- data/lib/proguard4.7/examples/midlets.pro +0 -67
- data/lib/proguard4.7/examples/proguard.pro +0 -57
- data/lib/proguard4.7/examples/proguardall.pro +0 -62
- data/lib/proguard4.7/examples/proguardgui.pro +0 -50
- data/lib/proguard4.7/examples/retrace.pro +0 -43
- data/lib/proguard4.7/examples/scala.pro +0 -132
- data/lib/proguard4.7/examples/servlets.pro +0 -70
- data/lib/proguard4.7/lib/proguard.jar +0 -0
- data/lib/proguard4.7/lib/proguardgui.jar +0 -0
- data/lib/proguard4.7/lib/retrace.jar +0 -0
- data/lib/proguard4.7/src/proguard/ArgumentWordReader.java +0 -111
- data/lib/proguard4.7/src/proguard/ClassPath.java +0 -94
- data/lib/proguard4.7/src/proguard/ClassPathEntry.java +0 -282
- data/lib/proguard4.7/src/proguard/ClassSpecification.java +0 -259
- data/lib/proguard4.7/src/proguard/ClassSpecificationVisitorFactory.java +0 -503
- data/lib/proguard4.7/src/proguard/Configuration.java +0 -328
- data/lib/proguard4.7/src/proguard/ConfigurationConstants.java +0 -123
- data/lib/proguard4.7/src/proguard/ConfigurationParser.java +0 -1285
- data/lib/proguard4.7/src/proguard/ConfigurationWriter.java +0 -651
- data/lib/proguard4.7/src/proguard/DataEntryReaderFactory.java +0 -141
- data/lib/proguard4.7/src/proguard/DataEntryWriterFactory.java +0 -150
- data/lib/proguard4.7/src/proguard/DescriptorKeepChecker.java +0 -169
- data/lib/proguard4.7/src/proguard/DuplicateClassPrinter.java +0 -63
- data/lib/proguard4.7/src/proguard/FileWordReader.java +0 -55
- data/lib/proguard4.7/src/proguard/FullyQualifiedClassNameChecker.java +0 -191
- data/lib/proguard4.7/src/proguard/GPL.java +0 -197
- data/lib/proguard4.7/src/proguard/Initializer.java +0 -424
- data/lib/proguard4.7/src/proguard/InputReader.java +0 -233
- data/lib/proguard4.7/src/proguard/KeepClassMemberChecker.java +0 -87
- data/lib/proguard4.7/src/proguard/KeepClassSpecification.java +0 -137
- data/lib/proguard4.7/src/proguard/LineWordReader.java +0 -74
- data/lib/proguard4.7/src/proguard/MANIFEST.MF +0 -2
- data/lib/proguard4.7/src/proguard/MemberSpecification.java +0 -114
- data/lib/proguard4.7/src/proguard/OutputWriter.java +0 -296
- data/lib/proguard4.7/src/proguard/ParseException.java +0 -51
- data/lib/proguard4.7/src/proguard/ProGuard.java +0 -512
- data/lib/proguard4.7/src/proguard/SeedPrinter.java +0 -97
- data/lib/proguard4.7/src/proguard/SubclassedClassFilter.java +0 -62
- data/lib/proguard4.7/src/proguard/Targeter.java +0 -88
- data/lib/proguard4.7/src/proguard/UpToDateChecker.java +0 -232
- data/lib/proguard4.7/src/proguard/WordReader.java +0 -387
- data/lib/proguard4.7/src/proguard/ant/ClassPathElement.java +0 -191
- data/lib/proguard4.7/src/proguard/ant/ClassSpecificationElement.java +0 -258
- data/lib/proguard4.7/src/proguard/ant/ConfigurationElement.java +0 -53
- data/lib/proguard4.7/src/proguard/ant/ConfigurationTask.java +0 -441
- data/lib/proguard4.7/src/proguard/ant/FilterElement.java +0 -85
- data/lib/proguard4.7/src/proguard/ant/KeepSpecificationElement.java +0 -87
- data/lib/proguard4.7/src/proguard/ant/MemberSpecificationElement.java +0 -218
- data/lib/proguard4.7/src/proguard/ant/ProGuardTask.java +0 -352
- data/lib/proguard4.7/src/proguard/ant/package.html +0 -3
- data/lib/proguard4.7/src/proguard/ant/task.properties +0 -2
- data/lib/proguard4.7/src/proguard/classfile/ClassConstants.java +0 -316
- data/lib/proguard4.7/src/proguard/classfile/ClassPool.java +0 -152
- data/lib/proguard4.7/src/proguard/classfile/Clazz.java +0 -261
- data/lib/proguard4.7/src/proguard/classfile/Field.java +0 -32
- data/lib/proguard4.7/src/proguard/classfile/LibraryClass.java +0 -548
- data/lib/proguard4.7/src/proguard/classfile/LibraryField.java +0 -77
- data/lib/proguard4.7/src/proguard/classfile/LibraryMember.java +0 -108
- data/lib/proguard4.7/src/proguard/classfile/LibraryMethod.java +0 -83
- data/lib/proguard4.7/src/proguard/classfile/Member.java +0 -57
- data/lib/proguard4.7/src/proguard/classfile/Method.java +0 -32
- data/lib/proguard4.7/src/proguard/classfile/ProgramClass.java +0 -572
- data/lib/proguard4.7/src/proguard/classfile/ProgramField.java +0 -93
- data/lib/proguard4.7/src/proguard/classfile/ProgramMember.java +0 -168
- data/lib/proguard4.7/src/proguard/classfile/ProgramMethod.java +0 -99
- data/lib/proguard4.7/src/proguard/classfile/VisitorAccepter.java +0 -47
- data/lib/proguard4.7/src/proguard/classfile/attribute/Attribute.java +0 -142
- data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodInfo.java +0 -89
- data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodsAttribute.java +0 -95
- data/lib/proguard4.7/src/proguard/classfile/attribute/CodeAttribute.java +0 -202
- data/lib/proguard4.7/src/proguard/classfile/attribute/ConstantValueAttribute.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/attribute/DeprecatedAttribute.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/EnclosingMethodAttribute.java +0 -132
- data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionInfo.java +0 -100
- data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionsAttribute.java +0 -80
- data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesAttribute.java +0 -80
- data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesInfo.java +0 -119
- data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberInfo.java +0 -50
- data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberTableAttribute.java +0 -100
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableInfo.java +0 -99
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTableAttribute.java +0 -79
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeInfo.java +0 -107
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeTableAttribute.java +0 -79
- data/lib/proguard4.7/src/proguard/classfile/attribute/SignatureAttribute.java +0 -100
- data/lib/proguard4.7/src/proguard/classfile/attribute/SourceDirAttribute.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/attribute/SourceFileAttribute.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/attribute/SyntheticAttribute.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/UnknownAttribute.java +0 -82
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/Annotation.java +0 -143
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationDefaultAttribute.java +0 -73
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationElementValue.java +0 -76
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationsAttribute.java +0 -100
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ArrayElementValue.java +0 -82
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ClassElementValue.java +0 -95
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ConstantElementValue.java +0 -71
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ElementValue.java +0 -126
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/EnumConstantElementValue.java +0 -99
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ParameterAnnotationsAttribute.java +0 -83
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleAnnotationsAttribute.java +0 -70
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleParameterAnnotationsAttribute.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleAnnotationsAttribute.java +0 -70
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleParameterAnnotationsAttribute.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/package.html +0 -4
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AllAnnotationVisitor.java +0 -100
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotatedClassVisitor.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationToMemberVisitor.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationTypeFilter.java +0 -102
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationVisitor.java +0 -40
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/ElementValueVisitor.java +0 -51
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/attribute/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/DoubleType.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FloatType.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FullFrame.java +0 -202
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/IntegerType.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LessZeroFrame.java +0 -103
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LongType.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/MoreZeroFrame.java +0 -161
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/NullType.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/ObjectType.java +0 -107
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameOneFrame.java +0 -115
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameZeroFrame.java +0 -74
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapAttribute.java +0 -91
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapFrame.java +0 -117
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapTableAttribute.java +0 -93
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/TopType.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedThisType.java +0 -66
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedType.java +0 -106
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationType.java +0 -103
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationTypeFactory.java +0 -112
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/StackMapFrameVisitor.java +0 -40
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/VerificationTypeVisitor.java +0 -65
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java +0 -117
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java +0 -55
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java +0 -55
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java +0 -55
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeNameFilter.java +0 -368
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeVisitor.java +0 -90
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java +0 -40
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java +0 -37
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java +0 -38
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java +0 -38
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java +0 -38
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java +0 -38
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java +0 -365
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java +0 -293
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java +0 -360
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/StackSizeComputer.java +0 -378
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/constant/ClassConstant.java +0 -105
- data/lib/proguard4.7/src/proguard/classfile/constant/Constant.java +0 -68
- data/lib/proguard4.7/src/proguard/classfile/constant/DoubleConstant.java +0 -82
- data/lib/proguard4.7/src/proguard/classfile/constant/FieldrefConstant.java +0 -71
- data/lib/proguard4.7/src/proguard/classfile/constant/FloatConstant.java +0 -82
- data/lib/proguard4.7/src/proguard/classfile/constant/IntegerConstant.java +0 -82
- data/lib/proguard4.7/src/proguard/classfile/constant/InterfaceMethodrefConstant.java +0 -71
- data/lib/proguard4.7/src/proguard/classfile/constant/InvokeDynamicConstant.java +0 -148
- data/lib/proguard4.7/src/proguard/classfile/constant/LongConstant.java +0 -82
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodHandleConstant.java +0 -124
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodTypeConstant.java +0 -93
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodrefConstant.java +0 -71
- data/lib/proguard4.7/src/proguard/classfile/constant/NameAndTypeConstant.java +0 -119
- data/lib/proguard4.7/src/proguard/classfile/constant/RefConstant.java +0 -130
- data/lib/proguard4.7/src/proguard/classfile/constant/StringConstant.java +0 -135
- data/lib/proguard4.7/src/proguard/classfile/constant/Utf8Constant.java +0 -285
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/AllConstantVisitor.java +0 -53
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/BootstrapMethodHandleTraveler.java +0 -100
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantTagFilter.java +0 -86
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantVisitor.java +0 -49
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ExceptClassConstantFilter.java +0 -69
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/MethodrefTraveler.java +0 -60
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/editor/AccessFixer.java +0 -180
- data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationAdder.java +0 -153
- data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationsAttributeEditor.java +0 -67
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributeAdder.java +0 -457
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributeSorter.java +0 -89
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributesEditor.java +0 -269
- data/lib/proguard4.7/src/proguard/classfile/editor/BridgeMethodFixer.java +0 -117
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassEditor.java +0 -255
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassElementSorter.java +0 -52
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassMemberSorter.java +0 -69
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassReferenceFixer.java +0 -546
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeComposer.java +0 -843
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditor.java +0 -1104
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditorResetter.java +0 -60
- data/lib/proguard4.7/src/proguard/classfile/editor/ComparableConstant.java +0 -249
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantAdder.java +0 -239
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolEditor.java +0 -782
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolRemapper.java +0 -662
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolShrinker.java +0 -578
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolSorter.java +0 -123
- data/lib/proguard4.7/src/proguard/classfile/editor/ElementValueAdder.java +0 -217
- data/lib/proguard4.7/src/proguard/classfile/editor/ElementValuesEditor.java +0 -238
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionAdder.java +0 -65
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionInfoAdder.java +0 -67
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionsAttributeEditor.java +0 -68
- data/lib/proguard4.7/src/proguard/classfile/editor/InnerClassesAccessFixer.java +0 -83
- data/lib/proguard4.7/src/proguard/classfile/editor/InstructionAdder.java +0 -76
- data/lib/proguard4.7/src/proguard/classfile/editor/InstructionWriter.java +0 -278
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceAdder.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceSorter.java +0 -152
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfacesEditor.java +0 -122
- data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberInfoAdder.java +0 -59
- data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberTableAttributeEditor.java +0 -67
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableInfoAdder.java +0 -67
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTableAttributeEditor.java +0 -67
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeInfoAdder.java +0 -68
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeTableAttributeEditor.java +0 -68
- data/lib/proguard4.7/src/proguard/classfile/editor/MemberAdder.java +0 -288
- data/lib/proguard4.7/src/proguard/classfile/editor/MemberReferenceFixer.java +0 -447
- data/lib/proguard4.7/src/proguard/classfile/editor/MethodInvocationFixer.java +0 -243
- data/lib/proguard4.7/src/proguard/classfile/editor/NameAndTypeShrinker.java +0 -188
- data/lib/proguard4.7/src/proguard/classfile/editor/NamedAttributeDeleter.java +0 -54
- data/lib/proguard4.7/src/proguard/classfile/editor/ParameterAnnotationsAttributeEditor.java +0 -71
- data/lib/proguard4.7/src/proguard/classfile/editor/StackSizeUpdater.java +0 -54
- data/lib/proguard4.7/src/proguard/classfile/editor/SubclassAdder.java +0 -59
- data/lib/proguard4.7/src/proguard/classfile/editor/SubclassToAdder.java +0 -60
- data/lib/proguard4.7/src/proguard/classfile/editor/Utf8Shrinker.java +0 -455
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableCleaner.java +0 -267
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableEditor.java +0 -130
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableRemapper.java +0 -156
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableSizeUpdater.java +0 -105
- data/lib/proguard4.7/src/proguard/classfile/editor/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/instruction/BranchInstruction.java +0 -180
- data/lib/proguard4.7/src/proguard/classfile/instruction/ConstantInstruction.java +0 -309
- data/lib/proguard4.7/src/proguard/classfile/instruction/Instruction.java +0 -920
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionConstants.java +0 -449
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionFactory.java +0 -300
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionUtil.java +0 -67
- data/lib/proguard4.7/src/proguard/classfile/instruction/LookUpSwitchInstruction.java +0 -135
- data/lib/proguard4.7/src/proguard/classfile/instruction/SimpleInstruction.java +0 -255
- data/lib/proguard4.7/src/proguard/classfile/instruction/SwitchInstruction.java +0 -83
- data/lib/proguard4.7/src/proguard/classfile/instruction/TableSwitchInstruction.java +0 -139
- data/lib/proguard4.7/src/proguard/classfile/instruction/VariableInstruction.java +0 -372
- data/lib/proguard4.7/src/proguard/classfile/instruction/package.html +0 -9
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/AllInstructionVisitor.java +0 -56
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionCounter.java +0 -59
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionVisitor.java +0 -42
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/MultiInstructionVisitor.java +0 -131
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/io/LibraryClassReader.java +0 -383
- data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassReader.java +0 -919
- data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassWriter.java +0 -735
- data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataInput.java +0 -223
- data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataOutput.java +0 -224
- data/lib/proguard4.7/src/proguard/classfile/io/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/package.html +0 -15
- data/lib/proguard4.7/src/proguard/classfile/util/AccessUtil.java +0 -105
- data/lib/proguard4.7/src/proguard/classfile/util/ClassReferenceInitializer.java +0 -559
- data/lib/proguard4.7/src/proguard/classfile/util/ClassSubHierarchyInitializer.java +0 -77
- data/lib/proguard4.7/src/proguard/classfile/util/ClassSuperHierarchyInitializer.java +0 -163
- data/lib/proguard4.7/src/proguard/classfile/util/ClassUtil.java +0 -1227
- data/lib/proguard4.7/src/proguard/classfile/util/DescriptorClassEnumeration.java +0 -236
- data/lib/proguard4.7/src/proguard/classfile/util/DynamicClassReferenceInitializer.java +0 -485
- data/lib/proguard4.7/src/proguard/classfile/util/DynamicMemberReferenceInitializer.java +0 -944
- data/lib/proguard4.7/src/proguard/classfile/util/ExternalTypeEnumeration.java +0 -106
- data/lib/proguard4.7/src/proguard/classfile/util/InstructionSequenceMatcher.java +0 -754
- data/lib/proguard4.7/src/proguard/classfile/util/InternalTypeEnumeration.java +0 -204
- data/lib/proguard4.7/src/proguard/classfile/util/MemberFinder.java +0 -197
- data/lib/proguard4.7/src/proguard/classfile/util/MethodLinker.java +0 -160
- data/lib/proguard4.7/src/proguard/classfile/util/SimplifiedVisitor.java +0 -834
- data/lib/proguard4.7/src/proguard/classfile/util/StringReferenceInitializer.java +0 -90
- data/lib/proguard4.7/src/proguard/classfile/util/StringSharer.java +0 -172
- data/lib/proguard4.7/src/proguard/classfile/util/WarningPrinter.java +0 -136
- data/lib/proguard4.7/src/proguard/classfile/util/package.html +0 -3
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllClassVisitor.java +0 -47
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllFieldVisitor.java +0 -55
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllMemberVisitor.java +0 -57
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllMethodVisitor.java +0 -55
- data/lib/proguard4.7/src/proguard/classfile/visitor/BottomClassFilter.java +0 -69
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassAccessFilter.java +0 -88
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCleaner.java +0 -275
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCollector.java +0 -58
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCounter.java +0 -56
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassHierarchyTraveler.java +0 -91
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassNameFilter.java +0 -112
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolFiller.java +0 -55
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolVisitor.java +0 -37
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPresenceFilter.java +0 -93
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPrinter.java +0 -1011
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionFilter.java +0 -85
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionSetter.java +0 -83
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVisitor.java +0 -36
- data/lib/proguard4.7/src/proguard/classfile/visitor/ConcreteClassDownTraveler.java +0 -100
- data/lib/proguard4.7/src/proguard/classfile/visitor/DotClassClassVisitor.java +0 -89
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassFilter.java +0 -69
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassesFilter.java +0 -90
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionCounter.java +0 -52
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionExcludedOffsetFilter.java +0 -64
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerConstantVisitor.java +0 -62
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerFilter.java +0 -70
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionOffsetFilter.java +0 -64
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionRangeFilter.java +0 -68
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassConstantFilter.java +0 -69
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassFilter.java +0 -71
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementingClassConstantFilter.java +0 -70
- data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryClassFilter.java +0 -60
- data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryMemberFilter.java +0 -73
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberAccessFilter.java +0 -122
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberClassAccessFilter.java +0 -106
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCollector.java +0 -59
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCounter.java +0 -72
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberDescriptorFilter.java +0 -113
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberNameFilter.java +0 -113
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberToClassVisitor.java +0 -90
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberVisitor.java +0 -40
- data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationFilter.java +0 -70
- data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationTraveler.java +0 -128
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassPoolVisitor.java +0 -88
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassVisitor.java +0 -97
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiMemberVisitor.java +0 -113
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedClassVisitor.java +0 -49
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedFieldVisitor.java +0 -61
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedMethodVisitor.java +0 -61
- data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramClassFilter.java +0 -60
- data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramMemberFilter.java +0 -73
- data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedClassVisitor.java +0 -255
- data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedMemberVisitor.java +0 -73
- data/lib/proguard4.7/src/proguard/classfile/visitor/SimilarMemberVisitor.java +0 -125
- data/lib/proguard4.7/src/proguard/classfile/visitor/SimpleClassPrinter.java +0 -167
- data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassFilter.java +0 -91
- data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassTraveler.java +0 -60
- data/lib/proguard4.7/src/proguard/classfile/visitor/VariableClassVisitor.java +0 -78
- data/lib/proguard4.7/src/proguard/classfile/visitor/VariableMemberVisitor.java +0 -96
- data/lib/proguard4.7/src/proguard/classfile/visitor/package.html +0 -40
- data/lib/proguard4.7/src/proguard/evaluation/BasicBranchUnit.java +0 -126
- data/lib/proguard4.7/src/proguard/evaluation/BasicInvocationUnit.java +0 -425
- data/lib/proguard4.7/src/proguard/evaluation/BranchUnit.java +0 -63
- data/lib/proguard4.7/src/proguard/evaluation/ClassConstantValueFactory.java +0 -53
- data/lib/proguard4.7/src/proguard/evaluation/ConstantValueFactory.java +0 -113
- data/lib/proguard4.7/src/proguard/evaluation/InvocationUnit.java +0 -62
- data/lib/proguard4.7/src/proguard/evaluation/Processor.java +0 -908
- data/lib/proguard4.7/src/proguard/evaluation/Stack.java +0 -560
- data/lib/proguard4.7/src/proguard/evaluation/TracedStack.java +0 -342
- data/lib/proguard4.7/src/proguard/evaluation/TracedVariables.java +0 -199
- data/lib/proguard4.7/src/proguard/evaluation/Variables.java +0 -347
- data/lib/proguard4.7/src/proguard/evaluation/value/Category1Value.java +0 -41
- data/lib/proguard4.7/src/proguard/evaluation/value/Category2Value.java +0 -41
- data/lib/proguard4.7/src/proguard/evaluation/value/ComparisonValue.java +0 -69
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeDoubleValue.java +0 -81
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeFloatValue.java +0 -81
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeIntegerValue.java +0 -87
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeLongValue.java +0 -87
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedByteValue.java +0 -64
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedCharacterValue.java +0 -64
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedDoubleValue.java +0 -64
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedFloatValue.java +0 -64
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedIntegerValue.java +0 -64
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedLongValue.java +0 -64
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedShortValue.java +0 -64
- data/lib/proguard4.7/src/proguard/evaluation/value/DoubleValue.java +0 -359
- data/lib/proguard4.7/src/proguard/evaluation/value/FloatValue.java +0 -359
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedDoubleValue.java +0 -67
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedFloatValue.java +0 -67
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedIntegerValue.java +0 -67
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedLongValue.java +0 -67
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedReferenceValue.java +0 -102
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedValueFactory.java +0 -75
- data/lib/proguard4.7/src/proguard/evaluation/value/InstructionOffsetValue.java +0 -307
- data/lib/proguard4.7/src/proguard/evaluation/value/IntegerValue.java +0 -1002
- data/lib/proguard4.7/src/proguard/evaluation/value/LongValue.java +0 -554
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedDoubleValue.java +0 -71
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedFloatValue.java +0 -71
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedIntegerValue.java +0 -71
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedLongValue.java +0 -71
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularDoubleValue.java +0 -216
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularFloatValue.java +0 -216
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularIntegerValue.java +0 -383
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularLongValue.java +0 -271
- data/lib/proguard4.7/src/proguard/evaluation/value/ReferenceValue.java +0 -540
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificDoubleValue.java +0 -186
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificFloatValue.java +0 -186
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificIntegerValue.java +0 -354
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificLongValue.java +0 -259
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificValueFactory.java +0 -97
- data/lib/proguard4.7/src/proguard/evaluation/value/TopValue.java +0 -79
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownDoubleValue.java +0 -125
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownFloatValue.java +0 -125
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownIntegerValue.java +0 -216
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownLongValue.java +0 -160
- data/lib/proguard4.7/src/proguard/evaluation/value/Value.java +0 -169
- data/lib/proguard4.7/src/proguard/evaluation/value/ValueFactory.java +0 -193
- data/lib/proguard4.7/src/proguard/evaluation/value/package.html +0 -3
- data/lib/proguard4.7/src/proguard/gui/ClassPathPanel.java +0 -441
- data/lib/proguard4.7/src/proguard/gui/ClassSpecificationDialog.java +0 -546
- data/lib/proguard4.7/src/proguard/gui/ClassSpecificationsPanel.java +0 -231
- data/lib/proguard4.7/src/proguard/gui/ExtensionFileFilter.java +0 -78
- data/lib/proguard4.7/src/proguard/gui/FilterBuilder.java +0 -208
- data/lib/proguard4.7/src/proguard/gui/FilterDialog.java +0 -320
- data/lib/proguard4.7/src/proguard/gui/GUIResources.java +0 -56
- data/lib/proguard4.7/src/proguard/gui/GUIResources.properties +0 -643
- data/lib/proguard4.7/src/proguard/gui/KeepSpecificationsPanel.java +0 -81
- data/lib/proguard4.7/src/proguard/gui/ListPanel.java +0 -341
- data/lib/proguard4.7/src/proguard/gui/MANIFEST.MF +0 -3
- data/lib/proguard4.7/src/proguard/gui/MemberSpecificationDialog.java +0 -509
- data/lib/proguard4.7/src/proguard/gui/MemberSpecificationsPanel.java +0 -304
- data/lib/proguard4.7/src/proguard/gui/MessageDialogRunnable.java +0 -90
- data/lib/proguard4.7/src/proguard/gui/OptimizationsDialog.java +0 -251
- data/lib/proguard4.7/src/proguard/gui/ProGuardGUI.java +0 -1777
- data/lib/proguard4.7/src/proguard/gui/ProGuardRunnable.java +0 -154
- data/lib/proguard4.7/src/proguard/gui/ReTraceRunnable.java +0 -149
- data/lib/proguard4.7/src/proguard/gui/SwingUtil.java +0 -82
- data/lib/proguard4.7/src/proguard/gui/TabbedPane.java +0 -229
- data/lib/proguard4.7/src/proguard/gui/TextAreaOutputStream.java +0 -81
- data/lib/proguard4.7/src/proguard/gui/arrow.gif +0 -0
- data/lib/proguard4.7/src/proguard/gui/boilerplate.pro +0 -410
- data/lib/proguard4.7/src/proguard/gui/default.pro +0 -318
- data/lib/proguard4.7/src/proguard/gui/package.html +0 -3
- data/lib/proguard4.7/src/proguard/gui/splash/BufferedSprite.java +0 -145
- data/lib/proguard4.7/src/proguard/gui/splash/CircleSprite.java +0 -74
- data/lib/proguard4.7/src/proguard/gui/splash/ClipSprite.java +0 -85
- data/lib/proguard4.7/src/proguard/gui/splash/ColorSprite.java +0 -65
- data/lib/proguard4.7/src/proguard/gui/splash/CompositeSprite.java +0 -56
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantColor.java +0 -51
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantDouble.java +0 -49
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantFont.java +0 -46
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantInt.java +0 -49
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantString.java +0 -49
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantTiming.java +0 -57
- data/lib/proguard4.7/src/proguard/gui/splash/FontSprite.java +0 -65
- data/lib/proguard4.7/src/proguard/gui/splash/ImageSprite.java +0 -76
- data/lib/proguard4.7/src/proguard/gui/splash/LinearColor.java +0 -72
- data/lib/proguard4.7/src/proguard/gui/splash/LinearDouble.java +0 -55
- data/lib/proguard4.7/src/proguard/gui/splash/LinearInt.java +0 -55
- data/lib/proguard4.7/src/proguard/gui/splash/LinearTiming.java +0 -55
- data/lib/proguard4.7/src/proguard/gui/splash/OverrideGraphics2D.java +0 -598
- data/lib/proguard4.7/src/proguard/gui/splash/RectangleSprite.java +0 -114
- data/lib/proguard4.7/src/proguard/gui/splash/SawToothTiming.java +0 -53
- data/lib/proguard4.7/src/proguard/gui/splash/ShadowedSprite.java +0 -109
- data/lib/proguard4.7/src/proguard/gui/splash/SineTiming.java +0 -53
- data/lib/proguard4.7/src/proguard/gui/splash/SmoothTiming.java +0 -66
- data/lib/proguard4.7/src/proguard/gui/splash/SplashPanel.java +0 -235
- data/lib/proguard4.7/src/proguard/gui/splash/Sprite.java +0 -41
- data/lib/proguard4.7/src/proguard/gui/splash/TextSprite.java +0 -89
- data/lib/proguard4.7/src/proguard/gui/splash/TimeSwitchSprite.java +0 -75
- data/lib/proguard4.7/src/proguard/gui/splash/Timing.java +0 -34
- data/lib/proguard4.7/src/proguard/gui/splash/TypeWriterString.java +0 -71
- data/lib/proguard4.7/src/proguard/gui/splash/VariableColor.java +0 -36
- data/lib/proguard4.7/src/proguard/gui/splash/VariableDouble.java +0 -34
- data/lib/proguard4.7/src/proguard/gui/splash/VariableFont.java +0 -36
- data/lib/proguard4.7/src/proguard/gui/splash/VariableInt.java +0 -34
- data/lib/proguard4.7/src/proguard/gui/splash/VariableSizeFont.java +0 -65
- data/lib/proguard4.7/src/proguard/gui/splash/VariableString.java +0 -34
- data/lib/proguard4.7/src/proguard/gui/splash/package.html +0 -4
- data/lib/proguard4.7/src/proguard/gui/vtitle.png +0 -0
- data/lib/proguard4.7/src/proguard/io/CascadingDataEntryWriter.java +0 -94
- data/lib/proguard4.7/src/proguard/io/ClassFilter.java +0 -59
- data/lib/proguard4.7/src/proguard/io/ClassReader.java +0 -115
- data/lib/proguard4.7/src/proguard/io/ClassRewriter.java +0 -80
- data/lib/proguard4.7/src/proguard/io/DataEntry.java +0 -62
- data/lib/proguard4.7/src/proguard/io/DataEntryClassWriter.java +0 -85
- data/lib/proguard4.7/src/proguard/io/DataEntryCopier.java +0 -247
- data/lib/proguard4.7/src/proguard/io/DataEntryDirectoryFilter.java +0 -40
- data/lib/proguard4.7/src/proguard/io/DataEntryFilter.java +0 -38
- data/lib/proguard4.7/src/proguard/io/DataEntryNameFilter.java +0 -54
- data/lib/proguard4.7/src/proguard/io/DataEntryObfuscator.java +0 -150
- data/lib/proguard4.7/src/proguard/io/DataEntryParentFilter.java +0 -51
- data/lib/proguard4.7/src/proguard/io/DataEntryPump.java +0 -43
- data/lib/proguard4.7/src/proguard/io/DataEntryReader.java +0 -38
- data/lib/proguard4.7/src/proguard/io/DataEntryRenamer.java +0 -104
- data/lib/proguard4.7/src/proguard/io/DataEntryRewriter.java +0 -148
- data/lib/proguard4.7/src/proguard/io/DataEntryWriter.java +0 -73
- data/lib/proguard4.7/src/proguard/io/DirectoryFilter.java +0 -58
- data/lib/proguard4.7/src/proguard/io/DirectoryPump.java +0 -78
- data/lib/proguard4.7/src/proguard/io/DirectoryWriter.java +0 -165
- data/lib/proguard4.7/src/proguard/io/FileDataEntry.java +0 -96
- data/lib/proguard4.7/src/proguard/io/FilteredDataEntryReader.java +0 -90
- data/lib/proguard4.7/src/proguard/io/FilteredDataEntryWriter.java +0 -125
- data/lib/proguard4.7/src/proguard/io/Finisher.java +0 -37
- data/lib/proguard4.7/src/proguard/io/JarReader.java +0 -75
- data/lib/proguard4.7/src/proguard/io/JarWriter.java +0 -235
- data/lib/proguard4.7/src/proguard/io/ManifestRewriter.java +0 -216
- data/lib/proguard4.7/src/proguard/io/NameFilter.java +0 -83
- data/lib/proguard4.7/src/proguard/io/ParentDataEntryWriter.java +0 -75
- data/lib/proguard4.7/src/proguard/io/RenamedDataEntry.java +0 -83
- data/lib/proguard4.7/src/proguard/io/ZipDataEntry.java +0 -98
- data/lib/proguard4.7/src/proguard/io/package.html +0 -4
- data/lib/proguard4.7/src/proguard/obfuscate/AttributeShrinker.java +0 -120
- data/lib/proguard4.7/src/proguard/obfuscate/AttributeUsageMarker.java +0 -71
- data/lib/proguard4.7/src/proguard/obfuscate/ClassObfuscator.java +0 -533
- data/lib/proguard4.7/src/proguard/obfuscate/ClassRenamer.java +0 -109
- data/lib/proguard4.7/src/proguard/obfuscate/DictionaryNameFactory.java +0 -189
- data/lib/proguard4.7/src/proguard/obfuscate/MapCleaner.java +0 -57
- data/lib/proguard4.7/src/proguard/obfuscate/MappingKeeper.java +0 -177
- data/lib/proguard4.7/src/proguard/obfuscate/MappingPrinter.java +0 -147
- data/lib/proguard4.7/src/proguard/obfuscate/MappingProcessor.java +0 -79
- data/lib/proguard4.7/src/proguard/obfuscate/MappingReader.java +0 -199
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCleaner.java +0 -60
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCollector.java +0 -106
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameConflictFixer.java +0 -159
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameFilter.java +0 -120
- data/lib/proguard4.7/src/proguard/obfuscate/MemberObfuscator.java +0 -230
- data/lib/proguard4.7/src/proguard/obfuscate/MemberSpecialNameFilter.java +0 -101
- data/lib/proguard4.7/src/proguard/obfuscate/MultiMappingProcessor.java +0 -96
- data/lib/proguard4.7/src/proguard/obfuscate/NameFactory.java +0 -34
- data/lib/proguard4.7/src/proguard/obfuscate/NameFactoryResetter.java +0 -59
- data/lib/proguard4.7/src/proguard/obfuscate/NameMarker.java +0 -166
- data/lib/proguard4.7/src/proguard/obfuscate/NumericNameFactory.java +0 -49
- data/lib/proguard4.7/src/proguard/obfuscate/Obfuscator.java +0 -445
- data/lib/proguard4.7/src/proguard/obfuscate/ParameterNameMarker.java +0 -128
- data/lib/proguard4.7/src/proguard/obfuscate/SimpleNameFactory.java +0 -156
- data/lib/proguard4.7/src/proguard/obfuscate/SourceFileRenamer.java +0 -84
- data/lib/proguard4.7/src/proguard/obfuscate/SpecialNameFactory.java +0 -83
- data/lib/proguard4.7/src/proguard/obfuscate/package.html +0 -3
- data/lib/proguard4.7/src/proguard/optimize/BootstrapMethodArgumentShrinker.java +0 -103
- data/lib/proguard4.7/src/proguard/optimize/ChangedCodePrinter.java +0 -297
- data/lib/proguard4.7/src/proguard/optimize/ConstantMemberFilter.java +0 -77
- data/lib/proguard4.7/src/proguard/optimize/ConstantParameterFilter.java +0 -79
- data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerFixer.java +0 -215
- data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerInvocationFixer.java +0 -161
- data/lib/proguard4.7/src/proguard/optimize/KeepMarker.java +0 -95
- data/lib/proguard4.7/src/proguard/optimize/KeptClassFilter.java +0 -69
- data/lib/proguard4.7/src/proguard/optimize/KeptMemberFilter.java +0 -88
- data/lib/proguard4.7/src/proguard/optimize/MemberDescriptorSpecializer.java +0 -138
- data/lib/proguard4.7/src/proguard/optimize/MethodDescriptorShrinker.java +0 -317
- data/lib/proguard4.7/src/proguard/optimize/MethodStaticizer.java +0 -87
- data/lib/proguard4.7/src/proguard/optimize/OptimizationInfoMemberFilter.java +0 -94
- data/lib/proguard4.7/src/proguard/optimize/Optimizer.java +0 -963
- data/lib/proguard4.7/src/proguard/optimize/ParameterShrinker.java +0 -146
- data/lib/proguard4.7/src/proguard/optimize/TailRecursionSimplifier.java +0 -356
- data/lib/proguard4.7/src/proguard/optimize/WriteOnlyFieldFilter.java +0 -65
- data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationShrinker.java +0 -2082
- data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationSimplifier.java +0 -973
- data/lib/proguard4.7/src/proguard/optimize/evaluation/LivenessAnalyzer.java +0 -526
- data/lib/proguard4.7/src/proguard/optimize/evaluation/LoadingInvocationUnit.java +0 -195
- data/lib/proguard4.7/src/proguard/optimize/evaluation/PartialEvaluator.java +0 -1282
- data/lib/proguard4.7/src/proguard/optimize/evaluation/StoringInvocationUnit.java +0 -207
- data/lib/proguard4.7/src/proguard/optimize/evaluation/TracedBranchUnit.java +0 -59
- data/lib/proguard4.7/src/proguard/optimize/evaluation/VariableOptimizer.java +0 -345
- data/lib/proguard4.7/src/proguard/optimize/evaluation/package.html +0 -4
- data/lib/proguard4.7/src/proguard/optimize/info/AccessMethodMarker.java +0 -202
- data/lib/proguard4.7/src/proguard/optimize/info/BackwardBranchMarker.java +0 -90
- data/lib/proguard4.7/src/proguard/optimize/info/CatchExceptionMarker.java +0 -69
- data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassFilter.java +0 -63
- data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassMarker.java +0 -64
- data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfo.java +0 -165
- data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfoSetter.java +0 -47
- data/lib/proguard4.7/src/proguard/optimize/info/DotClassFilter.java +0 -63
- data/lib/proguard4.7/src/proguard/optimize/info/DotClassMarker.java +0 -96
- data/lib/proguard4.7/src/proguard/optimize/info/ExceptionInstructionChecker.java +0 -193
- data/lib/proguard4.7/src/proguard/optimize/info/FieldOptimizationInfo.java +0 -204
- data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassFilter.java +0 -63
- data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassMarker.java +0 -93
- data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassFilter.java +0 -62
- data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassMarker.java +0 -93
- data/lib/proguard4.7/src/proguard/optimize/info/MemberOptimizationInfoSetter.java +0 -59
- data/lib/proguard4.7/src/proguard/optimize/info/MethodInvocationMarker.java +0 -107
- data/lib/proguard4.7/src/proguard/optimize/info/MethodOptimizationInfo.java +0 -302
- data/lib/proguard4.7/src/proguard/optimize/info/NoSideEffectMethodMarker.java +0 -91
- data/lib/proguard4.7/src/proguard/optimize/info/NonPrivateMemberMarker.java +0 -171
- data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberContainingClassMarker.java +0 -85
- data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberInvokingClassMarker.java +0 -129
- data/lib/proguard4.7/src/proguard/optimize/info/ParameterUsageMarker.java +0 -285
- data/lib/proguard4.7/src/proguard/optimize/info/ReadWriteFieldMarker.java +0 -163
- data/lib/proguard4.7/src/proguard/optimize/info/SideEffectInstructionChecker.java +0 -245
- data/lib/proguard4.7/src/proguard/optimize/info/SideEffectMethodMarker.java +0 -175
- data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassFilter.java +0 -62
- data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassMarker.java +0 -65
- data/lib/proguard4.7/src/proguard/optimize/info/SuperInvocationMarker.java +0 -93
- data/lib/proguard4.7/src/proguard/optimize/info/VariableUsageMarker.java +0 -96
- data/lib/proguard4.7/src/proguard/optimize/info/package.html +0 -4
- data/lib/proguard4.7/src/proguard/optimize/package.html +0 -4
- data/lib/proguard4.7/src/proguard/optimize/peephole/BranchTargetFinder.java +0 -687
- data/lib/proguard4.7/src/proguard/optimize/peephole/ClassFinalizer.java +0 -84
- data/lib/proguard4.7/src/proguard/optimize/peephole/ClassMerger.java +0 -576
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoCommonCodeReplacer.java +0 -266
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoGotoReplacer.java +0 -115
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoReturnReplacer.java +0 -115
- data/lib/proguard4.7/src/proguard/optimize/peephole/HorizontalClassMerger.java +0 -90
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceConstants.java +0 -4424
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceReplacer.java +0 -420
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequencesReplacer.java +0 -138
- data/lib/proguard4.7/src/proguard/optimize/peephole/MemberPrivatizer.java +0 -103
- data/lib/proguard4.7/src/proguard/optimize/peephole/MethodFinalizer.java +0 -93
- data/lib/proguard4.7/src/proguard/optimize/peephole/MethodInliner.java +0 -597
- data/lib/proguard4.7/src/proguard/optimize/peephole/NopRemover.java +0 -89
- data/lib/proguard4.7/src/proguard/optimize/peephole/PeepholeOptimizer.java +0 -103
- data/lib/proguard4.7/src/proguard/optimize/peephole/ReachableCodeMarker.java +0 -262
- data/lib/proguard4.7/src/proguard/optimize/peephole/RetargetedInnerClassAttributeRemover.java +0 -170
- data/lib/proguard4.7/src/proguard/optimize/peephole/TargetClassChanger.java +0 -455
- data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableCodeRemover.java +0 -143
- data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableExceptionRemover.java +0 -163
- data/lib/proguard4.7/src/proguard/optimize/peephole/VariableShrinker.java +0 -129
- data/lib/proguard4.7/src/proguard/optimize/peephole/VerticalClassMerger.java +0 -88
- data/lib/proguard4.7/src/proguard/optimize/peephole/package.html +0 -3
- data/lib/proguard4.7/src/proguard/package.html +0 -5
- data/lib/proguard4.7/src/proguard/preverify/CodePreverifier.java +0 -611
- data/lib/proguard4.7/src/proguard/preverify/CodeSubroutineInliner.java +0 -406
- data/lib/proguard4.7/src/proguard/preverify/Preverifier.java +0 -73
- data/lib/proguard4.7/src/proguard/preverify/SubroutineInliner.java +0 -73
- data/lib/proguard4.7/src/proguard/retrace/MANIFEST.MF +0 -3
- data/lib/proguard4.7/src/proguard/retrace/ReTrace.java +0 -749
- data/lib/proguard4.7/src/proguard/retrace/package.html +0 -4
- data/lib/proguard4.7/src/proguard/shrink/AnnotationUsageMarker.java +0 -333
- data/lib/proguard4.7/src/proguard/shrink/ClassShrinker.java +0 -458
- data/lib/proguard4.7/src/proguard/shrink/InnerUsageMarker.java +0 -174
- data/lib/proguard4.7/src/proguard/shrink/InterfaceUsageMarker.java +0 -152
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMark.java +0 -183
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMarker.java +0 -277
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsagePrinter.java +0 -210
- data/lib/proguard4.7/src/proguard/shrink/Shrinker.java +0 -181
- data/lib/proguard4.7/src/proguard/shrink/UsageMarker.java +0 -1036
- data/lib/proguard4.7/src/proguard/shrink/UsagePrinter.java +0 -177
- data/lib/proguard4.7/src/proguard/shrink/UsedClassFilter.java +0 -74
- data/lib/proguard4.7/src/proguard/shrink/UsedMemberFilter.java +0 -93
- data/lib/proguard4.7/src/proguard/shrink/package.html +0 -3
- data/lib/proguard4.7/src/proguard/util/AndMatcher.java +0 -49
- data/lib/proguard4.7/src/proguard/util/ClassNameParser.java +0 -216
- data/lib/proguard4.7/src/proguard/util/ConstantMatcher.java +0 -48
- data/lib/proguard4.7/src/proguard/util/EmptyStringMatcher.java +0 -36
- data/lib/proguard4.7/src/proguard/util/ExtensionMatcher.java +0 -63
- data/lib/proguard4.7/src/proguard/util/FileNameParser.java +0 -121
- data/lib/proguard4.7/src/proguard/util/FixedStringMatcher.java +0 -56
- data/lib/proguard4.7/src/proguard/util/ListMatcher.java +0 -69
- data/lib/proguard4.7/src/proguard/util/ListParser.java +0 -137
- data/lib/proguard4.7/src/proguard/util/ListUtil.java +0 -180
- data/lib/proguard4.7/src/proguard/util/NameParser.java +0 -106
- data/lib/proguard4.7/src/proguard/util/NotMatcher.java +0 -46
- data/lib/proguard4.7/src/proguard/util/OrMatcher.java +0 -49
- data/lib/proguard4.7/src/proguard/util/SettableMatcher.java +0 -46
- data/lib/proguard4.7/src/proguard/util/StringMatcher.java +0 -38
- data/lib/proguard4.7/src/proguard/util/StringParser.java +0 -35
- data/lib/proguard4.7/src/proguard/util/VariableStringMatcher.java +0 -126
- data/lib/proguard4.7/src/proguard/util/package.html +0 -3
- data/lib/proguard4.7/src/proguard/wtk/ProGuardObfuscator.java +0 -141
- data/lib/proguard4.7/src/proguard/wtk/default.pro +0 -114
- data/lib/proguard4.7/src/proguard/wtk/package.html +0 -3
@@ -1,195 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* ProGuard -- shrinking, optimization, obfuscation, and preverification
|
3
|
-
* of Java bytecode.
|
4
|
-
*
|
5
|
-
* Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu)
|
6
|
-
*
|
7
|
-
* This program is free software; you can redistribute it and/or modify it
|
8
|
-
* under the terms of the GNU General Public License as published by the Free
|
9
|
-
* Software Foundation; either version 2 of the License, or (at your option)
|
10
|
-
* any later version.
|
11
|
-
*
|
12
|
-
* This program is distributed in the hope that it will be useful, but WITHOUT
|
13
|
-
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
14
|
-
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
15
|
-
* more details.
|
16
|
-
*
|
17
|
-
* You should have received a copy of the GNU General Public License along
|
18
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
19
|
-
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
-
*/
|
21
|
-
package proguard.optimize.evaluation;
|
22
|
-
|
23
|
-
import proguard.classfile.*;
|
24
|
-
import proguard.classfile.constant.RefConstant;
|
25
|
-
import proguard.evaluation.BasicInvocationUnit;
|
26
|
-
import proguard.evaluation.value.*;
|
27
|
-
|
28
|
-
/**
|
29
|
-
* This InvocationUbit loads parameter values and return values that were
|
30
|
-
* previously stored with the methods that are invoked.
|
31
|
-
*
|
32
|
-
* @see StoringInvocationUnit
|
33
|
-
* @author Eric Lafortune
|
34
|
-
*/
|
35
|
-
public class LoadingInvocationUnit
|
36
|
-
extends BasicInvocationUnit
|
37
|
-
{
|
38
|
-
private final boolean loadFieldValues;
|
39
|
-
private final boolean loadMethodParameterValues;
|
40
|
-
private final boolean loadMethodReturnValues;
|
41
|
-
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Creates a new LoadingInvocationUnit with the given value factory.
|
45
|
-
*/
|
46
|
-
public LoadingInvocationUnit(ValueFactory valueFactory)
|
47
|
-
{
|
48
|
-
this(valueFactory, false, false, false);
|
49
|
-
}
|
50
|
-
|
51
|
-
|
52
|
-
/**
|
53
|
-
* Creates a new LoadingInvocationUnit with the given value factory, for
|
54
|
-
* loading the specified values.
|
55
|
-
*/
|
56
|
-
public LoadingInvocationUnit(ValueFactory valueFactory,
|
57
|
-
boolean loadFieldValues,
|
58
|
-
boolean loadMethodParameterValues,
|
59
|
-
boolean loadMethodReturnValues)
|
60
|
-
{
|
61
|
-
super(valueFactory);
|
62
|
-
|
63
|
-
this.loadFieldValues = loadFieldValues;
|
64
|
-
this.loadMethodParameterValues = loadMethodParameterValues;
|
65
|
-
this.loadMethodReturnValues = loadMethodReturnValues;
|
66
|
-
}
|
67
|
-
|
68
|
-
|
69
|
-
// Implementations for BasicInvocationUnit.
|
70
|
-
|
71
|
-
protected Value getFieldClassValue(Clazz clazz,
|
72
|
-
RefConstant refConstant,
|
73
|
-
String type)
|
74
|
-
{
|
75
|
-
if (loadFieldValues)
|
76
|
-
{
|
77
|
-
// Do we know this field?
|
78
|
-
Member referencedMember = refConstant.referencedMember;
|
79
|
-
if (referencedMember != null)
|
80
|
-
{
|
81
|
-
// Retrieve the stored field class value.
|
82
|
-
ReferenceValue value = StoringInvocationUnit.getFieldClassValue((Field)referencedMember);
|
83
|
-
if (value != null &&
|
84
|
-
value.isParticular())
|
85
|
-
{
|
86
|
-
return value;
|
87
|
-
}
|
88
|
-
}
|
89
|
-
}
|
90
|
-
|
91
|
-
return super.getFieldClassValue(clazz, refConstant, type);
|
92
|
-
}
|
93
|
-
|
94
|
-
|
95
|
-
protected Value getFieldValue(Clazz clazz,
|
96
|
-
RefConstant refConstant,
|
97
|
-
String type)
|
98
|
-
{
|
99
|
-
if (loadFieldValues)
|
100
|
-
{
|
101
|
-
// Do we know this field?
|
102
|
-
Member referencedMember = refConstant.referencedMember;
|
103
|
-
if (referencedMember != null)
|
104
|
-
{
|
105
|
-
// Retrieve the stored field value.
|
106
|
-
Value value = StoringInvocationUnit.getFieldValue((Field)referencedMember);
|
107
|
-
if (value != null &&
|
108
|
-
value.isParticular())
|
109
|
-
{
|
110
|
-
return value;
|
111
|
-
}
|
112
|
-
}
|
113
|
-
}
|
114
|
-
|
115
|
-
return super.getFieldValue(clazz, refConstant, type);
|
116
|
-
}
|
117
|
-
|
118
|
-
|
119
|
-
protected Value getMethodParameterValue(Clazz clazz,
|
120
|
-
Method method,
|
121
|
-
int parameterIndex,
|
122
|
-
String type,
|
123
|
-
Clazz referencedClass)
|
124
|
-
{
|
125
|
-
if (loadMethodParameterValues)
|
126
|
-
{
|
127
|
-
// Retrieve the stored method parameter value.
|
128
|
-
Value value = StoringInvocationUnit.getMethodParameterValue(method, parameterIndex);
|
129
|
-
if (value != null &&
|
130
|
-
value.isParticular())
|
131
|
-
{
|
132
|
-
return value;
|
133
|
-
}
|
134
|
-
}
|
135
|
-
|
136
|
-
return super.getMethodParameterValue(clazz,
|
137
|
-
method,
|
138
|
-
parameterIndex,
|
139
|
-
type,
|
140
|
-
referencedClass);
|
141
|
-
}
|
142
|
-
|
143
|
-
|
144
|
-
protected Value getMethodReturnValue(Clazz clazz,
|
145
|
-
RefConstant refConstant,
|
146
|
-
String type)
|
147
|
-
{
|
148
|
-
if (loadMethodReturnValues)
|
149
|
-
{
|
150
|
-
// Do we know this method?
|
151
|
-
Member referencedMember = refConstant.referencedMember;
|
152
|
-
if (referencedMember != null)
|
153
|
-
{
|
154
|
-
// Retrieve the stored method return value.
|
155
|
-
Value value = StoringInvocationUnit.getMethodReturnValue((Method)referencedMember);
|
156
|
-
if (value != null &&
|
157
|
-
value.isParticular())
|
158
|
-
{
|
159
|
-
return value;
|
160
|
-
}
|
161
|
-
}
|
162
|
-
}
|
163
|
-
|
164
|
-
return super.getMethodReturnValue(clazz,
|
165
|
-
refConstant,
|
166
|
-
type);
|
167
|
-
}
|
168
|
-
|
169
|
-
|
170
|
-
// // Small utility methods.
|
171
|
-
//
|
172
|
-
// private Value refresh(Value value)
|
173
|
-
// {
|
174
|
-
// if (value.isParticular())
|
175
|
-
// {
|
176
|
-
// return value;
|
177
|
-
// }
|
178
|
-
//
|
179
|
-
// switch (value.computationalType())
|
180
|
-
// {
|
181
|
-
// case Value.TYPE_INTEGER: return valueFactory.createIntegerValue();
|
182
|
-
// case Value.TYPE_LONG: return valueFactory.createLongValue();
|
183
|
-
// case Value.TYPE_FLOAT: return valueFactory.createFloatValue();
|
184
|
-
// case Value.TYPE_DOUBLE: return valueFactory.createDoubleValue();
|
185
|
-
// default:
|
186
|
-
// {
|
187
|
-
// ReferenceValue referenceValue = value.referenceValue();
|
188
|
-
//
|
189
|
-
// return valueFactory.createReferenceValue(referenceValue.getType(),
|
190
|
-
// referenceValue.getReferencedClass(),
|
191
|
-
// referenceValue.isNull() != Value.NEVER);
|
192
|
-
// }
|
193
|
-
// }
|
194
|
-
// }
|
195
|
-
}
|
@@ -1,1282 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* ProGuard -- shrinking, optimization, obfuscation, and preverification
|
3
|
-
* of Java bytecode.
|
4
|
-
*
|
5
|
-
* Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu)
|
6
|
-
*
|
7
|
-
* This program is free software; you can redistribute it and/or modify it
|
8
|
-
* under the terms of the GNU General Public License as published by the Free
|
9
|
-
* Software Foundation; either version 2 of the License, or (at your option)
|
10
|
-
* any later version.
|
11
|
-
*
|
12
|
-
* This program is distributed in the hope that it will be useful, but WITHOUT
|
13
|
-
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
14
|
-
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
15
|
-
* more details.
|
16
|
-
*
|
17
|
-
* You should have received a copy of the GNU General Public License along
|
18
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
19
|
-
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
-
*/
|
21
|
-
package proguard.optimize.evaluation;
|
22
|
-
|
23
|
-
import proguard.classfile.*;
|
24
|
-
import proguard.classfile.attribute.*;
|
25
|
-
import proguard.classfile.attribute.visitor.*;
|
26
|
-
import proguard.classfile.constant.ClassConstant;
|
27
|
-
import proguard.classfile.instruction.*;
|
28
|
-
import proguard.classfile.util.*;
|
29
|
-
import proguard.classfile.visitor.*;
|
30
|
-
import proguard.evaluation.*;
|
31
|
-
import proguard.evaluation.value.*;
|
32
|
-
import proguard.optimize.peephole.BranchTargetFinder;
|
33
|
-
|
34
|
-
import java.util.Arrays;
|
35
|
-
|
36
|
-
/**
|
37
|
-
* This AttributeVisitor performs partial evaluation on the code attributes
|
38
|
-
* that it visits.
|
39
|
-
*
|
40
|
-
* @author Eric Lafortune
|
41
|
-
*/
|
42
|
-
public class PartialEvaluator
|
43
|
-
extends SimplifiedVisitor
|
44
|
-
implements AttributeVisitor,
|
45
|
-
ExceptionInfoVisitor
|
46
|
-
{
|
47
|
-
//*
|
48
|
-
private static final boolean DEBUG = false;
|
49
|
-
private static final boolean DEBUG_RESULTS = false;
|
50
|
-
/*/
|
51
|
-
private static boolean DEBUG = true;
|
52
|
-
private static boolean DEBUG_RESULTS = true;
|
53
|
-
//*/
|
54
|
-
|
55
|
-
private static final int MAXIMUM_EVALUATION_COUNT = 5;
|
56
|
-
|
57
|
-
public static final int NONE = -2;
|
58
|
-
public static final int AT_METHOD_ENTRY = -1;
|
59
|
-
public static final int AT_CATCH_ENTRY = -1;
|
60
|
-
|
61
|
-
private final ValueFactory valueFactory;
|
62
|
-
private final InvocationUnit invocationUnit;
|
63
|
-
private final boolean evaluateAllCode;
|
64
|
-
|
65
|
-
private InstructionOffsetValue[] branchOriginValues = new InstructionOffsetValue[ClassConstants.TYPICAL_CODE_LENGTH];
|
66
|
-
private InstructionOffsetValue[] branchTargetValues = new InstructionOffsetValue[ClassConstants.TYPICAL_CODE_LENGTH];
|
67
|
-
private TracedVariables[] variablesBefore = new TracedVariables[ClassConstants.TYPICAL_CODE_LENGTH];
|
68
|
-
private TracedStack[] stacksBefore = new TracedStack[ClassConstants.TYPICAL_CODE_LENGTH];
|
69
|
-
private TracedVariables[] variablesAfter = new TracedVariables[ClassConstants.TYPICAL_CODE_LENGTH];
|
70
|
-
private TracedStack[] stacksAfter = new TracedStack[ClassConstants.TYPICAL_CODE_LENGTH];
|
71
|
-
private boolean[] generalizedContexts = new boolean[ClassConstants.TYPICAL_CODE_LENGTH];
|
72
|
-
private int[] evaluationCounts = new int[ClassConstants.TYPICAL_CODE_LENGTH];
|
73
|
-
private boolean evaluateExceptions;
|
74
|
-
|
75
|
-
private final BasicBranchUnit branchUnit;
|
76
|
-
private final BranchTargetFinder branchTargetFinder;
|
77
|
-
|
78
|
-
private final java.util.Stack callingInstructionBlockStack;
|
79
|
-
private final java.util.Stack instructionBlockStack = new java.util.Stack();
|
80
|
-
|
81
|
-
|
82
|
-
/**
|
83
|
-
* Creates a simple PartialEvaluator.
|
84
|
-
*/
|
85
|
-
public PartialEvaluator()
|
86
|
-
{
|
87
|
-
this(new ValueFactory(),
|
88
|
-
new BasicInvocationUnit(new ValueFactory()),
|
89
|
-
true);
|
90
|
-
}
|
91
|
-
|
92
|
-
|
93
|
-
/**
|
94
|
-
* Creates a new PartialEvaluator.
|
95
|
-
* @param valueFactory the value factory that will create all values
|
96
|
-
* during evaluation.
|
97
|
-
* @param invocationUnit the invocation unit that will handle all
|
98
|
-
* communication with other fields and methods.
|
99
|
-
* @param evaluateAllCode a flag that specifies whether all branch targets
|
100
|
-
* and exception handlers should be evaluated,
|
101
|
-
* even if they are unreachable.
|
102
|
-
*/
|
103
|
-
public PartialEvaluator(ValueFactory valueFactory,
|
104
|
-
InvocationUnit invocationUnit,
|
105
|
-
boolean evaluateAllCode)
|
106
|
-
{
|
107
|
-
this(valueFactory,
|
108
|
-
invocationUnit,
|
109
|
-
evaluateAllCode,
|
110
|
-
evaluateAllCode ?
|
111
|
-
new BasicBranchUnit() :
|
112
|
-
new TracedBranchUnit(),
|
113
|
-
new BranchTargetFinder(),
|
114
|
-
null);
|
115
|
-
}
|
116
|
-
|
117
|
-
|
118
|
-
/**
|
119
|
-
* Creates a new PartialEvaluator, based on an existing one.
|
120
|
-
* @param partialEvaluator the subroutine calling partial evaluator.
|
121
|
-
*/
|
122
|
-
private PartialEvaluator(PartialEvaluator partialEvaluator)
|
123
|
-
{
|
124
|
-
this(partialEvaluator.valueFactory,
|
125
|
-
partialEvaluator.invocationUnit,
|
126
|
-
partialEvaluator.evaluateAllCode,
|
127
|
-
partialEvaluator.branchUnit,
|
128
|
-
partialEvaluator.branchTargetFinder,
|
129
|
-
partialEvaluator.instructionBlockStack);
|
130
|
-
}
|
131
|
-
|
132
|
-
|
133
|
-
/**
|
134
|
-
* Creates a new PartialEvaluator.
|
135
|
-
* @param valueFactory the value factory that will create all
|
136
|
-
* values during evaluation.
|
137
|
-
* @param invocationUnit the invocation unit that will handle all
|
138
|
-
* communication with other fields and methods.
|
139
|
-
* @param evaluateAllCode a flag that specifies whether all branch
|
140
|
-
* targets and exception handlers should be
|
141
|
-
* evaluated, even if they are unreachable.
|
142
|
-
* @param branchUnit the branch unit that will handle all
|
143
|
-
* branches.
|
144
|
-
* @param branchTargetFinder the utility class that will find all
|
145
|
-
* branches.
|
146
|
-
*/
|
147
|
-
private PartialEvaluator(ValueFactory valueFactory,
|
148
|
-
InvocationUnit invocationUnit,
|
149
|
-
boolean evaluateAllCode,
|
150
|
-
BasicBranchUnit branchUnit,
|
151
|
-
BranchTargetFinder branchTargetFinder,
|
152
|
-
java.util.Stack callingInstructionBlockStack)
|
153
|
-
{
|
154
|
-
this.valueFactory = valueFactory;
|
155
|
-
this.invocationUnit = invocationUnit;
|
156
|
-
this.evaluateAllCode = evaluateAllCode;
|
157
|
-
this.branchUnit = branchUnit;
|
158
|
-
this.branchTargetFinder = branchTargetFinder;
|
159
|
-
this.callingInstructionBlockStack = callingInstructionBlockStack == null ?
|
160
|
-
this.instructionBlockStack :
|
161
|
-
callingInstructionBlockStack;
|
162
|
-
}
|
163
|
-
|
164
|
-
|
165
|
-
// Implementations for AttributeVisitor.
|
166
|
-
|
167
|
-
public void visitAnyAttribute(Clazz clazz, Attribute attribute) {}
|
168
|
-
|
169
|
-
|
170
|
-
public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
171
|
-
{
|
172
|
-
// DEBUG = DEBUG_RESULTS =
|
173
|
-
// clazz.getName().equals("abc/Def") &&
|
174
|
-
// method.getName(clazz).equals("abc");
|
175
|
-
|
176
|
-
// TODO: Remove this when the partial evaluator has stabilized.
|
177
|
-
// Catch any unexpected exceptions from the actual visiting method.
|
178
|
-
try
|
179
|
-
{
|
180
|
-
// Process the code.
|
181
|
-
visitCodeAttribute0(clazz, method, codeAttribute);
|
182
|
-
}
|
183
|
-
catch (RuntimeException ex)
|
184
|
-
{
|
185
|
-
System.err.println("Unexpected error while performing partial evaluation:");
|
186
|
-
System.err.println(" Class = ["+clazz.getName()+"]");
|
187
|
-
System.err.println(" Method = ["+method.getName(clazz)+method.getDescriptor(clazz)+"]");
|
188
|
-
System.err.println(" Exception = ["+ex.getClass().getName()+"] ("+ex.getMessage()+")");
|
189
|
-
|
190
|
-
if (DEBUG)
|
191
|
-
{
|
192
|
-
method.accept(clazz, new ClassPrinter());
|
193
|
-
|
194
|
-
System.out.println("Evaluation results:");
|
195
|
-
|
196
|
-
int offset = 0;
|
197
|
-
do
|
198
|
-
{
|
199
|
-
if (isBranchOrExceptionTarget(offset))
|
200
|
-
{
|
201
|
-
System.out.println("Branch target from ["+branchOriginValues[offset]+"]:");
|
202
|
-
if (isTraced(offset))
|
203
|
-
{
|
204
|
-
System.out.println(" Vars: "+variablesBefore[offset]);
|
205
|
-
System.out.println(" Stack: "+stacksBefore[offset]);
|
206
|
-
}
|
207
|
-
}
|
208
|
-
|
209
|
-
Instruction instruction = InstructionFactory.create(codeAttribute.code,
|
210
|
-
offset);
|
211
|
-
System.out.println(instruction.toString(offset));
|
212
|
-
|
213
|
-
if (isTraced(offset))
|
214
|
-
{
|
215
|
-
int initializationOffset = branchTargetFinder.initializationOffset(offset);
|
216
|
-
if (initializationOffset != NONE)
|
217
|
-
{
|
218
|
-
System.out.println(" is to be initialized at ["+initializationOffset+"]");
|
219
|
-
}
|
220
|
-
|
221
|
-
InstructionOffsetValue branchTargets = branchTargets(offset);
|
222
|
-
if (branchTargets != null)
|
223
|
-
{
|
224
|
-
System.out.println(" has overall been branching to "+branchTargets);
|
225
|
-
}
|
226
|
-
|
227
|
-
System.out.println(" Vars: "+variablesAfter[offset]);
|
228
|
-
System.out.println(" Stack: "+stacksAfter[offset]);
|
229
|
-
}
|
230
|
-
|
231
|
-
offset += instruction.length(offset);
|
232
|
-
}
|
233
|
-
while (offset < codeAttribute.u4codeLength);
|
234
|
-
}
|
235
|
-
|
236
|
-
throw ex;
|
237
|
-
}
|
238
|
-
}
|
239
|
-
|
240
|
-
|
241
|
-
public void visitCodeAttribute0(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
242
|
-
{
|
243
|
-
// Evaluate the instructions, starting at the entry point.
|
244
|
-
if (DEBUG)
|
245
|
-
{
|
246
|
-
System.out.println();
|
247
|
-
System.out.println("Partial evaluation: "+clazz.getName()+"."+method.getName(clazz)+method.getDescriptor(clazz));
|
248
|
-
System.out.println(" Max locals = "+codeAttribute.u2maxLocals);
|
249
|
-
System.out.println(" Max stack = "+codeAttribute.u2maxStack);
|
250
|
-
}
|
251
|
-
|
252
|
-
// Reuse the existing variables and stack objects, ensuring the right size.
|
253
|
-
TracedVariables variables = new TracedVariables(codeAttribute.u2maxLocals);
|
254
|
-
TracedStack stack = new TracedStack(codeAttribute.u2maxStack);
|
255
|
-
|
256
|
-
// Initialize the reusable arrays and variables.
|
257
|
-
initializeArrays(codeAttribute);
|
258
|
-
initializeParameters(clazz, method, codeAttribute, variables);
|
259
|
-
|
260
|
-
// Find all instruction offsets,...
|
261
|
-
codeAttribute.accept(clazz, method, branchTargetFinder);
|
262
|
-
|
263
|
-
// Start executing the first instruction block.
|
264
|
-
evaluateInstructionBlockAndExceptionHandlers(clazz,
|
265
|
-
method,
|
266
|
-
codeAttribute,
|
267
|
-
variables,
|
268
|
-
stack,
|
269
|
-
0,
|
270
|
-
codeAttribute.u4codeLength);
|
271
|
-
|
272
|
-
if (DEBUG_RESULTS)
|
273
|
-
{
|
274
|
-
System.out.println("Evaluation results:");
|
275
|
-
|
276
|
-
int offset = 0;
|
277
|
-
do
|
278
|
-
{
|
279
|
-
if (isBranchOrExceptionTarget(offset))
|
280
|
-
{
|
281
|
-
System.out.println("Branch target from ["+branchOriginValues[offset]+"]:");
|
282
|
-
if (isTraced(offset))
|
283
|
-
{
|
284
|
-
System.out.println(" Vars: "+variablesBefore[offset]);
|
285
|
-
System.out.println(" Stack: "+stacksBefore[offset]);
|
286
|
-
}
|
287
|
-
}
|
288
|
-
|
289
|
-
Instruction instruction = InstructionFactory.create(codeAttribute.code,
|
290
|
-
offset);
|
291
|
-
System.out.println(instruction.toString(offset));
|
292
|
-
|
293
|
-
if (isTraced(offset))
|
294
|
-
{
|
295
|
-
int initializationOffset = branchTargetFinder.initializationOffset(offset);
|
296
|
-
if (initializationOffset != NONE)
|
297
|
-
{
|
298
|
-
System.out.println(" is to be initialized at ["+initializationOffset+"]");
|
299
|
-
}
|
300
|
-
|
301
|
-
InstructionOffsetValue branchTargets = branchTargets(offset);
|
302
|
-
if (branchTargets != null)
|
303
|
-
{
|
304
|
-
System.out.println(" has overall been branching to "+branchTargets);
|
305
|
-
}
|
306
|
-
|
307
|
-
System.out.println(" Vars: "+variablesAfter[offset]);
|
308
|
-
System.out.println(" Stack: "+stacksAfter[offset]);
|
309
|
-
}
|
310
|
-
|
311
|
-
offset += instruction.length(offset);
|
312
|
-
}
|
313
|
-
while (offset < codeAttribute.u4codeLength);
|
314
|
-
}
|
315
|
-
}
|
316
|
-
|
317
|
-
|
318
|
-
/**
|
319
|
-
* Returns whether a block of instructions is ever used.
|
320
|
-
*/
|
321
|
-
public boolean isTraced(int startOffset, int endOffset)
|
322
|
-
{
|
323
|
-
for (int index = startOffset; index < endOffset; index++)
|
324
|
-
{
|
325
|
-
if (isTraced(index))
|
326
|
-
{
|
327
|
-
return true;
|
328
|
-
}
|
329
|
-
}
|
330
|
-
|
331
|
-
return false;
|
332
|
-
}
|
333
|
-
|
334
|
-
|
335
|
-
/**
|
336
|
-
* Returns whether the instruction at the given offset has ever been
|
337
|
-
* executed during the partial evaluation.
|
338
|
-
*/
|
339
|
-
public boolean isTraced(int instructionOffset)
|
340
|
-
{
|
341
|
-
return evaluationCounts[instructionOffset] > 0;
|
342
|
-
}
|
343
|
-
|
344
|
-
|
345
|
-
/**
|
346
|
-
* Returns whether there is an instruction at the given offset.
|
347
|
-
*/
|
348
|
-
public boolean isInstruction(int instructionOffset)
|
349
|
-
{
|
350
|
-
return branchTargetFinder.isInstruction(instructionOffset);
|
351
|
-
}
|
352
|
-
|
353
|
-
|
354
|
-
/**
|
355
|
-
* Returns whether the instruction at the given offset is the target of a
|
356
|
-
* branch instruction or an exception.
|
357
|
-
*/
|
358
|
-
public boolean isBranchOrExceptionTarget(int instructionOffset)
|
359
|
-
{
|
360
|
-
return branchTargetFinder.isBranchTarget(instructionOffset) ||
|
361
|
-
branchTargetFinder.isExceptionHandler(instructionOffset);
|
362
|
-
}
|
363
|
-
|
364
|
-
|
365
|
-
/**
|
366
|
-
* Returns whether the instruction at the given offset is the start of a
|
367
|
-
* subroutine.
|
368
|
-
*/
|
369
|
-
public boolean isSubroutineStart(int instructionOffset)
|
370
|
-
{
|
371
|
-
return branchTargetFinder.isSubroutineStart(instructionOffset);
|
372
|
-
}
|
373
|
-
|
374
|
-
|
375
|
-
/**
|
376
|
-
* Returns whether the instruction at the given offset is a subroutine
|
377
|
-
* invocation.
|
378
|
-
*/
|
379
|
-
public boolean isSubroutineInvocation(int instructionOffset)
|
380
|
-
{
|
381
|
-
return branchTargetFinder.isSubroutineInvocation(instructionOffset);
|
382
|
-
}
|
383
|
-
|
384
|
-
|
385
|
-
/**
|
386
|
-
* Returns whether the instruction at the given offset is part of a
|
387
|
-
* subroutine.
|
388
|
-
*/
|
389
|
-
public boolean isSubroutine(int instructionOffset)
|
390
|
-
{
|
391
|
-
return branchTargetFinder.isSubroutine(instructionOffset);
|
392
|
-
}
|
393
|
-
|
394
|
-
|
395
|
-
/**
|
396
|
-
* Returns whether the subroutine at the given offset is ever returning
|
397
|
-
* by means of a regular 'ret' instruction.
|
398
|
-
*/
|
399
|
-
public boolean isSubroutineReturning(int instructionOffset)
|
400
|
-
{
|
401
|
-
return branchTargetFinder.isSubroutineReturning(instructionOffset);
|
402
|
-
}
|
403
|
-
|
404
|
-
|
405
|
-
/**
|
406
|
-
* Returns the offset after the subroutine that starts at the given
|
407
|
-
* offset.
|
408
|
-
*/
|
409
|
-
public int subroutineEnd(int instructionOffset)
|
410
|
-
{
|
411
|
-
return branchTargetFinder.subroutineEnd(instructionOffset);
|
412
|
-
}
|
413
|
-
|
414
|
-
|
415
|
-
/**
|
416
|
-
* Returns the instruction offset at which the object instance that is
|
417
|
-
* created at the given 'new' instruction offset is initialized, or
|
418
|
-
* <code>NONE</code> if it is not being created.
|
419
|
-
*/
|
420
|
-
public int initializationOffset(int instructionOffset)
|
421
|
-
{
|
422
|
-
return branchTargetFinder.initializationOffset(instructionOffset);
|
423
|
-
}
|
424
|
-
|
425
|
-
|
426
|
-
/**
|
427
|
-
* Returns whether the method is an instance initializer.
|
428
|
-
*/
|
429
|
-
public boolean isInitializer()
|
430
|
-
{
|
431
|
-
return branchTargetFinder.isInitializer();
|
432
|
-
}
|
433
|
-
|
434
|
-
|
435
|
-
/**
|
436
|
-
* Returns the instruction offset at which this initializer is calling
|
437
|
-
* the "super" or "this" initializer method, or <code>NONE</code> if it is
|
438
|
-
* not an initializer.
|
439
|
-
*/
|
440
|
-
public int superInitializationOffset()
|
441
|
-
{
|
442
|
-
return branchTargetFinder.superInitializationOffset();
|
443
|
-
}
|
444
|
-
|
445
|
-
|
446
|
-
/**
|
447
|
-
* Returns the offset of the 'new' instruction that corresponds to the
|
448
|
-
* invocation of the instance initializer at the given offset, or
|
449
|
-
* <code>AT_METHOD_ENTRY</code> if the invocation is calling the "super" or
|
450
|
-
* "this" initializer method, , or <code>NONE</code> if it is not a 'new'
|
451
|
-
* instruction.
|
452
|
-
*/
|
453
|
-
public int creationOffset(int offset)
|
454
|
-
{
|
455
|
-
return branchTargetFinder.creationOffset(offset);
|
456
|
-
}
|
457
|
-
|
458
|
-
|
459
|
-
/**
|
460
|
-
* Returns the variables before execution of the instruction at the given
|
461
|
-
* offset.
|
462
|
-
*/
|
463
|
-
public TracedVariables getVariablesBefore(int instructionOffset)
|
464
|
-
{
|
465
|
-
return variablesBefore[instructionOffset];
|
466
|
-
}
|
467
|
-
|
468
|
-
|
469
|
-
/**
|
470
|
-
* Returns the variables after execution of the instruction at the given
|
471
|
-
* offset.
|
472
|
-
*/
|
473
|
-
public TracedVariables getVariablesAfter(int instructionOffset)
|
474
|
-
{
|
475
|
-
return variablesAfter[instructionOffset];
|
476
|
-
}
|
477
|
-
|
478
|
-
|
479
|
-
/**
|
480
|
-
* Returns the stack before execution of the instruction at the given
|
481
|
-
* offset.
|
482
|
-
*/
|
483
|
-
public TracedStack getStackBefore(int instructionOffset)
|
484
|
-
{
|
485
|
-
return stacksBefore[instructionOffset];
|
486
|
-
}
|
487
|
-
|
488
|
-
|
489
|
-
/**
|
490
|
-
* Returns the stack after execution of the instruction at the given
|
491
|
-
* offset.
|
492
|
-
*/
|
493
|
-
public TracedStack getStackAfter(int instructionOffset)
|
494
|
-
{
|
495
|
-
return stacksAfter[instructionOffset];
|
496
|
-
}
|
497
|
-
|
498
|
-
|
499
|
-
/**
|
500
|
-
* Returns the instruction offsets that branch to the given instruction
|
501
|
-
* offset.
|
502
|
-
*/
|
503
|
-
public InstructionOffsetValue branchOrigins(int instructionOffset)
|
504
|
-
{
|
505
|
-
return branchOriginValues[instructionOffset];
|
506
|
-
}
|
507
|
-
|
508
|
-
|
509
|
-
/**
|
510
|
-
* Returns the instruction offsets to which the given instruction offset
|
511
|
-
* branches.
|
512
|
-
*/
|
513
|
-
public InstructionOffsetValue branchTargets(int instructionOffset)
|
514
|
-
{
|
515
|
-
return branchTargetValues[instructionOffset];
|
516
|
-
}
|
517
|
-
|
518
|
-
|
519
|
-
// Utility methods to evaluate instruction blocks.
|
520
|
-
|
521
|
-
/**
|
522
|
-
* Pushes block of instructions to be executed in the calling partial
|
523
|
-
* evaluator.
|
524
|
-
*/
|
525
|
-
private void pushCallingInstructionBlock(TracedVariables variables,
|
526
|
-
TracedStack stack,
|
527
|
-
int startOffset)
|
528
|
-
{
|
529
|
-
callingInstructionBlockStack.push(new MyInstructionBlock(variables,
|
530
|
-
stack,
|
531
|
-
startOffset));
|
532
|
-
}
|
533
|
-
|
534
|
-
|
535
|
-
/**
|
536
|
-
* Pushes block of instructions to be executed in this partial evaluator.
|
537
|
-
*/
|
538
|
-
private void pushInstructionBlock(TracedVariables variables,
|
539
|
-
TracedStack stack,
|
540
|
-
int startOffset)
|
541
|
-
{
|
542
|
-
instructionBlockStack.push(new MyInstructionBlock(variables,
|
543
|
-
stack,
|
544
|
-
startOffset));
|
545
|
-
}
|
546
|
-
|
547
|
-
|
548
|
-
/**
|
549
|
-
* Evaluates the instruction block and the exception handlers covering the
|
550
|
-
* given instruction range in the given code.
|
551
|
-
*/
|
552
|
-
private void evaluateInstructionBlockAndExceptionHandlers(Clazz clazz,
|
553
|
-
Method method,
|
554
|
-
CodeAttribute codeAttribute,
|
555
|
-
TracedVariables variables,
|
556
|
-
TracedStack stack,
|
557
|
-
int startOffset,
|
558
|
-
int endOffset)
|
559
|
-
{
|
560
|
-
evaluateInstructionBlock(clazz,
|
561
|
-
method,
|
562
|
-
codeAttribute,
|
563
|
-
variables,
|
564
|
-
stack,
|
565
|
-
startOffset);
|
566
|
-
|
567
|
-
evaluateExceptionHandlers(clazz,
|
568
|
-
method,
|
569
|
-
codeAttribute,
|
570
|
-
startOffset,
|
571
|
-
endOffset);
|
572
|
-
}
|
573
|
-
|
574
|
-
|
575
|
-
/**
|
576
|
-
* Evaluates a block of instructions, starting at the given offset and ending
|
577
|
-
* at a branch instruction, a return instruction, or a throw instruction.
|
578
|
-
*/
|
579
|
-
private void evaluateInstructionBlock(Clazz clazz,
|
580
|
-
Method method,
|
581
|
-
CodeAttribute codeAttribute,
|
582
|
-
TracedVariables variables,
|
583
|
-
TracedStack stack,
|
584
|
-
int startOffset)
|
585
|
-
{
|
586
|
-
// Execute the initial instruction block.
|
587
|
-
evaluateSingleInstructionBlock(clazz,
|
588
|
-
method,
|
589
|
-
codeAttribute,
|
590
|
-
variables,
|
591
|
-
stack,
|
592
|
-
startOffset);
|
593
|
-
|
594
|
-
// Execute all resulting instruction blocks on the execution stack.
|
595
|
-
while (!instructionBlockStack.empty())
|
596
|
-
{
|
597
|
-
if (DEBUG) System.out.println("Popping alternative branch out of "+instructionBlockStack.size()+" blocks");
|
598
|
-
|
599
|
-
MyInstructionBlock instructionBlock =
|
600
|
-
(MyInstructionBlock)instructionBlockStack.pop();
|
601
|
-
|
602
|
-
evaluateSingleInstructionBlock(clazz,
|
603
|
-
method,
|
604
|
-
codeAttribute,
|
605
|
-
instructionBlock.variables,
|
606
|
-
instructionBlock.stack,
|
607
|
-
instructionBlock.startOffset);
|
608
|
-
}
|
609
|
-
}
|
610
|
-
|
611
|
-
|
612
|
-
/**
|
613
|
-
* Evaluates a block of instructions, starting at the given offset and ending
|
614
|
-
* at a branch instruction, a return instruction, or a throw instruction.
|
615
|
-
* Instruction blocks that are to be evaluated as a result are pushed on
|
616
|
-
* the given stack.
|
617
|
-
*/
|
618
|
-
private void evaluateSingleInstructionBlock(Clazz clazz,
|
619
|
-
Method method,
|
620
|
-
CodeAttribute codeAttribute,
|
621
|
-
TracedVariables variables,
|
622
|
-
TracedStack stack,
|
623
|
-
int startOffset)
|
624
|
-
{
|
625
|
-
byte[] code = codeAttribute.code;
|
626
|
-
|
627
|
-
if (DEBUG)
|
628
|
-
{
|
629
|
-
System.out.println("Instruction block starting at ["+startOffset+"] in "+
|
630
|
-
ClassUtil.externalFullMethodDescription(clazz.getName(),
|
631
|
-
0,
|
632
|
-
method.getName(clazz),
|
633
|
-
method.getDescriptor(clazz)));
|
634
|
-
System.out.println("Init vars: "+variables);
|
635
|
-
System.out.println("Init stack: "+stack);
|
636
|
-
}
|
637
|
-
|
638
|
-
Processor processor = new Processor(variables,
|
639
|
-
stack,
|
640
|
-
valueFactory,
|
641
|
-
branchUnit,
|
642
|
-
invocationUnit);
|
643
|
-
|
644
|
-
int instructionOffset = startOffset;
|
645
|
-
|
646
|
-
int maxOffset = startOffset;
|
647
|
-
|
648
|
-
// Evaluate the subsequent instructions.
|
649
|
-
while (true)
|
650
|
-
{
|
651
|
-
if (maxOffset < instructionOffset)
|
652
|
-
{
|
653
|
-
maxOffset = instructionOffset;
|
654
|
-
}
|
655
|
-
|
656
|
-
// Maintain a generalized local variable frame and stack at this
|
657
|
-
// instruction offset, before execution.
|
658
|
-
int evaluationCount = evaluationCounts[instructionOffset];
|
659
|
-
if (evaluationCount == 0)
|
660
|
-
{
|
661
|
-
// First time we're passing by this instruction.
|
662
|
-
if (variablesBefore[instructionOffset] == null)
|
663
|
-
{
|
664
|
-
// There's not even a context at this index yet.
|
665
|
-
variablesBefore[instructionOffset] = new TracedVariables(variables);
|
666
|
-
stacksBefore[instructionOffset] = new TracedStack(stack);
|
667
|
-
}
|
668
|
-
else
|
669
|
-
{
|
670
|
-
// Reuse the context objects at this index.
|
671
|
-
variablesBefore[instructionOffset].initialize(variables);
|
672
|
-
stacksBefore[instructionOffset].copy(stack);
|
673
|
-
}
|
674
|
-
|
675
|
-
// We'll execute in the generalized context, because it is
|
676
|
-
// the same as the current context.
|
677
|
-
generalizedContexts[instructionOffset] = true;
|
678
|
-
}
|
679
|
-
else
|
680
|
-
{
|
681
|
-
// Merge in the current context.
|
682
|
-
boolean variablesChanged = variablesBefore[instructionOffset].generalize(variables, true);
|
683
|
-
boolean stackChanged = stacksBefore[instructionOffset].generalize(stack);
|
684
|
-
|
685
|
-
//System.out.println("GVars: "+variablesBefore[instructionOffset]);
|
686
|
-
//System.out.println("GStack: "+stacksBefore[instructionOffset]);
|
687
|
-
|
688
|
-
// Bail out if the current context is the same as last time.
|
689
|
-
if (!variablesChanged &&
|
690
|
-
!stackChanged &&
|
691
|
-
generalizedContexts[instructionOffset])
|
692
|
-
{
|
693
|
-
if (DEBUG) System.out.println("Repeated variables, stack, and branch targets");
|
694
|
-
|
695
|
-
break;
|
696
|
-
}
|
697
|
-
|
698
|
-
// See if this instruction has been evaluated an excessive number
|
699
|
-
// of times.
|
700
|
-
if (evaluationCount >= MAXIMUM_EVALUATION_COUNT)
|
701
|
-
{
|
702
|
-
if (DEBUG) System.out.println("Generalizing current context after "+evaluationCount+" evaluations");
|
703
|
-
|
704
|
-
// Continue, but generalize the current context.
|
705
|
-
// Note that the most recent variable values have to remain
|
706
|
-
// last in the generalizations, for the sake of the ret
|
707
|
-
// instruction.
|
708
|
-
variables.generalize(variablesBefore[instructionOffset], false);
|
709
|
-
stack.generalize(stacksBefore[instructionOffset]);
|
710
|
-
|
711
|
-
// We'll execute in the generalized context.
|
712
|
-
generalizedContexts[instructionOffset] = true;
|
713
|
-
}
|
714
|
-
else
|
715
|
-
{
|
716
|
-
// We'll execute in the current context.
|
717
|
-
generalizedContexts[instructionOffset] = false;
|
718
|
-
}
|
719
|
-
}
|
720
|
-
|
721
|
-
// We'll evaluate this instruction.
|
722
|
-
evaluationCounts[instructionOffset]++;
|
723
|
-
|
724
|
-
// Remember this instruction's offset with any stored value.
|
725
|
-
Value storeValue = new InstructionOffsetValue(instructionOffset);
|
726
|
-
variables.setProducerValue(storeValue);
|
727
|
-
stack.setProducerValue(storeValue);
|
728
|
-
|
729
|
-
// Reset the trace value.
|
730
|
-
InstructionOffsetValue traceValue = InstructionOffsetValue.EMPTY_VALUE;
|
731
|
-
|
732
|
-
// Note that the instruction is only volatile.
|
733
|
-
Instruction instruction = InstructionFactory.create(code, instructionOffset);
|
734
|
-
|
735
|
-
// By default, the next instruction will be the one after this
|
736
|
-
// instruction.
|
737
|
-
int nextInstructionOffset = instructionOffset +
|
738
|
-
instruction.length(instructionOffset);
|
739
|
-
InstructionOffsetValue nextInstructionOffsetValue = new InstructionOffsetValue(nextInstructionOffset);
|
740
|
-
branchUnit.resetCalled();
|
741
|
-
branchUnit.setTraceBranchTargets(nextInstructionOffsetValue);
|
742
|
-
|
743
|
-
if (DEBUG)
|
744
|
-
{
|
745
|
-
System.out.println(instruction.toString(instructionOffset));
|
746
|
-
}
|
747
|
-
|
748
|
-
try
|
749
|
-
{
|
750
|
-
// Process the instruction. The processor may modify the
|
751
|
-
// variables and the stack, and it may call the branch unit
|
752
|
-
// and the invocation unit.
|
753
|
-
instruction.accept(clazz,
|
754
|
-
method,
|
755
|
-
codeAttribute,
|
756
|
-
instructionOffset,
|
757
|
-
processor);
|
758
|
-
}
|
759
|
-
catch (RuntimeException ex)
|
760
|
-
{
|
761
|
-
System.err.println("Unexpected error while evaluating instruction:");
|
762
|
-
System.err.println(" Class = ["+clazz.getName()+"]");
|
763
|
-
System.err.println(" Method = ["+method.getName(clazz)+method.getDescriptor(clazz)+"]");
|
764
|
-
System.err.println(" Instruction = "+instruction.toString(instructionOffset));
|
765
|
-
System.err.println(" Exception = ["+ex.getClass().getName()+"] ("+ex.getMessage()+")");
|
766
|
-
|
767
|
-
throw ex;
|
768
|
-
}
|
769
|
-
|
770
|
-
// Collect the branch targets from the branch unit.
|
771
|
-
InstructionOffsetValue branchTargets = branchUnit.getTraceBranchTargets();
|
772
|
-
int branchTargetCount = branchTargets.instructionOffsetCount();
|
773
|
-
|
774
|
-
// Stop tracing.
|
775
|
-
branchUnit.setTraceBranchTargets(traceValue);
|
776
|
-
|
777
|
-
if (DEBUG)
|
778
|
-
{
|
779
|
-
if (branchUnit.wasCalled())
|
780
|
-
{
|
781
|
-
System.out.println(" is branching to "+branchTargets);
|
782
|
-
}
|
783
|
-
if (branchTargetValues[instructionOffset] != null)
|
784
|
-
{
|
785
|
-
System.out.println(" has up till now been branching to "+branchTargetValues[instructionOffset]);
|
786
|
-
}
|
787
|
-
|
788
|
-
System.out.println(" Vars: "+variables);
|
789
|
-
System.out.println(" Stack: "+stack);
|
790
|
-
}
|
791
|
-
|
792
|
-
// Maintain a generalized local variable frame and stack at this
|
793
|
-
// instruction offset, after execution.
|
794
|
-
if (evaluationCount == 0)
|
795
|
-
{
|
796
|
-
// First time we're passing by this instruction.
|
797
|
-
if (variablesAfter[instructionOffset] == null)
|
798
|
-
{
|
799
|
-
// There's not even a context at this index yet.
|
800
|
-
variablesAfter[instructionOffset] = new TracedVariables(variables);
|
801
|
-
stacksAfter[instructionOffset] = new TracedStack(stack);
|
802
|
-
}
|
803
|
-
else
|
804
|
-
{
|
805
|
-
// Reuse the context objects at this index.
|
806
|
-
variablesAfter[instructionOffset].initialize(variables);
|
807
|
-
stacksAfter[instructionOffset].copy(stack);
|
808
|
-
}
|
809
|
-
}
|
810
|
-
else
|
811
|
-
{
|
812
|
-
// Merge in the current context.
|
813
|
-
variablesAfter[instructionOffset].generalize(variables, true);
|
814
|
-
stacksAfter[instructionOffset].generalize(stack);
|
815
|
-
}
|
816
|
-
|
817
|
-
// Did the branch unit get called?
|
818
|
-
if (branchUnit.wasCalled())
|
819
|
-
{
|
820
|
-
// Accumulate the branch targets at this offset.
|
821
|
-
branchTargetValues[instructionOffset] = branchTargetValues[instructionOffset] == null ?
|
822
|
-
branchTargets :
|
823
|
-
branchTargetValues[instructionOffset].generalize(branchTargets).instructionOffsetValue();
|
824
|
-
|
825
|
-
// Are there no branch targets at all?
|
826
|
-
if (branchTargetCount == 0)
|
827
|
-
{
|
828
|
-
// Exit from this code block.
|
829
|
-
break;
|
830
|
-
}
|
831
|
-
|
832
|
-
// Accumulate the branch origins at the branch target offsets.
|
833
|
-
InstructionOffsetValue instructionOffsetValue = new InstructionOffsetValue(instructionOffset);
|
834
|
-
for (int index = 0; index < branchTargetCount; index++)
|
835
|
-
{
|
836
|
-
int branchTarget = branchTargets.instructionOffset(index);
|
837
|
-
branchOriginValues[branchTarget] = branchOriginValues[branchTarget] == null ?
|
838
|
-
instructionOffsetValue:
|
839
|
-
branchOriginValues[branchTarget].generalize(instructionOffsetValue).instructionOffsetValue();
|
840
|
-
}
|
841
|
-
|
842
|
-
// Are there multiple branch targets?
|
843
|
-
if (branchTargetCount > 1)
|
844
|
-
{
|
845
|
-
// Push them on the execution stack and exit from this block.
|
846
|
-
for (int index = 0; index < branchTargetCount; index++)
|
847
|
-
{
|
848
|
-
if (DEBUG) System.out.println("Pushing alternative branch #"+index+" out of "+branchTargetCount+", from ["+instructionOffset+"] to ["+branchTargets.instructionOffset(index)+"]");
|
849
|
-
|
850
|
-
pushInstructionBlock(new TracedVariables(variables),
|
851
|
-
new TracedStack(stack),
|
852
|
-
branchTargets.instructionOffset(index));
|
853
|
-
}
|
854
|
-
|
855
|
-
break;
|
856
|
-
}
|
857
|
-
|
858
|
-
if (DEBUG) System.out.println("Definite branch from ["+instructionOffset+"] to ["+branchTargets.instructionOffset(0)+"]");
|
859
|
-
}
|
860
|
-
|
861
|
-
// Just continue with the next instruction.
|
862
|
-
instructionOffset = branchTargets.instructionOffset(0);
|
863
|
-
|
864
|
-
// Is this a subroutine invocation?
|
865
|
-
if (instruction.opcode == InstructionConstants.OP_JSR ||
|
866
|
-
instruction.opcode == InstructionConstants.OP_JSR_W)
|
867
|
-
{
|
868
|
-
// Evaluate the subroutine, possibly in another partial
|
869
|
-
// evaluator.
|
870
|
-
evaluateSubroutine(clazz,
|
871
|
-
method,
|
872
|
-
codeAttribute,
|
873
|
-
variables,
|
874
|
-
stack,
|
875
|
-
instructionOffset,
|
876
|
-
instructionBlockStack);
|
877
|
-
|
878
|
-
break;
|
879
|
-
}
|
880
|
-
else if (instruction.opcode == InstructionConstants.OP_RET)
|
881
|
-
{
|
882
|
-
// Let the partial evaluator that has called the subroutine
|
883
|
-
// handle the evaluation after the return.
|
884
|
-
pushCallingInstructionBlock(new TracedVariables(variables),
|
885
|
-
new TracedStack(stack),
|
886
|
-
instructionOffset);
|
887
|
-
break;
|
888
|
-
}
|
889
|
-
}
|
890
|
-
|
891
|
-
if (DEBUG) System.out.println("Ending processing of instruction block starting at ["+startOffset+"]");
|
892
|
-
}
|
893
|
-
|
894
|
-
|
895
|
-
/**
|
896
|
-
* Evaluates a subroutine and its exception handlers, starting at the given
|
897
|
-
* offset and ending at a subroutine return instruction.
|
898
|
-
*/
|
899
|
-
private void evaluateSubroutine(Clazz clazz,
|
900
|
-
Method method,
|
901
|
-
CodeAttribute codeAttribute,
|
902
|
-
TracedVariables variables,
|
903
|
-
TracedStack stack,
|
904
|
-
int subroutineStart,
|
905
|
-
java.util.Stack instructionBlockStack)
|
906
|
-
{
|
907
|
-
int subroutineEnd = branchTargetFinder.subroutineEnd(subroutineStart);
|
908
|
-
|
909
|
-
if (DEBUG) System.out.println("Evaluating subroutine from "+subroutineStart+" to "+subroutineEnd);
|
910
|
-
|
911
|
-
PartialEvaluator subroutinePartialEvaluator = this;
|
912
|
-
|
913
|
-
// Create a temporary partial evaluator if necessary.
|
914
|
-
if (evaluationCounts[subroutineStart] > 0)
|
915
|
-
{
|
916
|
-
if (DEBUG) System.out.println("Creating new partial evaluator for subroutine");
|
917
|
-
|
918
|
-
subroutinePartialEvaluator = new PartialEvaluator(this);
|
919
|
-
|
920
|
-
subroutinePartialEvaluator.initializeArrays(codeAttribute);
|
921
|
-
}
|
922
|
-
|
923
|
-
// Evaluate the subroutine.
|
924
|
-
subroutinePartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(clazz,
|
925
|
-
method,
|
926
|
-
codeAttribute,
|
927
|
-
variables,
|
928
|
-
stack,
|
929
|
-
subroutineStart,
|
930
|
-
subroutineEnd);
|
931
|
-
|
932
|
-
// Merge back the temporary partial evaluator if necessary.
|
933
|
-
if (subroutinePartialEvaluator != this)
|
934
|
-
{
|
935
|
-
generalize(subroutinePartialEvaluator, 0, codeAttribute.u4codeLength);
|
936
|
-
}
|
937
|
-
|
938
|
-
if (DEBUG) System.out.println("Ending subroutine from "+subroutineStart+" to "+subroutineEnd);
|
939
|
-
}
|
940
|
-
|
941
|
-
|
942
|
-
/**
|
943
|
-
* Generalizes the results of this partial evaluator with those of another
|
944
|
-
* given partial evaluator, over a given range of instructions.
|
945
|
-
*/
|
946
|
-
private void generalize(PartialEvaluator other,
|
947
|
-
int codeStart,
|
948
|
-
int codeEnd)
|
949
|
-
{
|
950
|
-
if (DEBUG) System.out.println("Generalizing with temporary partial evaluation");
|
951
|
-
|
952
|
-
for (int offset = codeStart; offset < codeEnd; offset++)
|
953
|
-
{
|
954
|
-
if (other.branchOriginValues[offset] != null)
|
955
|
-
{
|
956
|
-
branchOriginValues[offset] = branchOriginValues[offset] == null ?
|
957
|
-
other.branchOriginValues[offset] :
|
958
|
-
branchOriginValues[offset].generalize(other.branchOriginValues[offset]).instructionOffsetValue();
|
959
|
-
}
|
960
|
-
|
961
|
-
if (other.isTraced(offset))
|
962
|
-
{
|
963
|
-
if (other.branchTargetValues[offset] != null)
|
964
|
-
{
|
965
|
-
branchTargetValues[offset] = branchTargetValues[offset] == null ?
|
966
|
-
other.branchTargetValues[offset] :
|
967
|
-
branchTargetValues[offset].generalize(other.branchTargetValues[offset]).instructionOffsetValue();
|
968
|
-
}
|
969
|
-
|
970
|
-
if (evaluationCounts[offset] == 0)
|
971
|
-
{
|
972
|
-
variablesBefore[offset] = other.variablesBefore[offset];
|
973
|
-
stacksBefore[offset] = other.stacksBefore[offset];
|
974
|
-
variablesAfter[offset] = other.variablesAfter[offset];
|
975
|
-
stacksAfter[offset] = other.stacksAfter[offset];
|
976
|
-
generalizedContexts[offset] = other.generalizedContexts[offset];
|
977
|
-
evaluationCounts[offset] = other.evaluationCounts[offset];
|
978
|
-
}
|
979
|
-
else
|
980
|
-
{
|
981
|
-
variablesBefore[offset].generalize(other.variablesBefore[offset], false);
|
982
|
-
stacksBefore[offset] .generalize(other.stacksBefore[offset]);
|
983
|
-
variablesAfter[offset] .generalize(other.variablesAfter[offset], false);
|
984
|
-
stacksAfter[offset] .generalize(other.stacksAfter[offset]);
|
985
|
-
//generalizedContexts[offset]
|
986
|
-
evaluationCounts[offset] += other.evaluationCounts[offset];
|
987
|
-
}
|
988
|
-
}
|
989
|
-
}
|
990
|
-
}
|
991
|
-
|
992
|
-
|
993
|
-
/**
|
994
|
-
* Evaluates the exception handlers covering and targeting the given
|
995
|
-
* instruction range in the given code.
|
996
|
-
*/
|
997
|
-
private void evaluateExceptionHandlers(Clazz clazz,
|
998
|
-
Method method,
|
999
|
-
CodeAttribute codeAttribute,
|
1000
|
-
int startOffset,
|
1001
|
-
int endOffset)
|
1002
|
-
{
|
1003
|
-
if (DEBUG) System.out.println("Evaluating exceptions covering ["+startOffset+" -> "+endOffset+"]:");
|
1004
|
-
|
1005
|
-
ExceptionHandlerFilter exceptionEvaluator =
|
1006
|
-
new ExceptionHandlerFilter(startOffset,
|
1007
|
-
endOffset,
|
1008
|
-
this);
|
1009
|
-
|
1010
|
-
// Evaluate the exception catch blocks, until their entry variables
|
1011
|
-
// have stabilized.
|
1012
|
-
do
|
1013
|
-
{
|
1014
|
-
// Reset the flag to stop evaluating.
|
1015
|
-
evaluateExceptions = false;
|
1016
|
-
|
1017
|
-
// Evaluate all relevant exception catch blocks once.
|
1018
|
-
codeAttribute.exceptionsAccept(clazz,
|
1019
|
-
method,
|
1020
|
-
startOffset,
|
1021
|
-
endOffset,
|
1022
|
-
exceptionEvaluator);
|
1023
|
-
}
|
1024
|
-
while (evaluateExceptions);
|
1025
|
-
}
|
1026
|
-
|
1027
|
-
|
1028
|
-
// Implementations for ExceptionInfoVisitor.
|
1029
|
-
|
1030
|
-
public void visitExceptionInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, ExceptionInfo exceptionInfo)
|
1031
|
-
{
|
1032
|
-
int startPC = exceptionInfo.u2startPC;
|
1033
|
-
int endPC = exceptionInfo.u2endPC;
|
1034
|
-
|
1035
|
-
// Do we have to evaluate this exception catch block?
|
1036
|
-
if (isTraced(startPC, endPC))
|
1037
|
-
{
|
1038
|
-
int handlerPC = exceptionInfo.u2handlerPC;
|
1039
|
-
int catchType = exceptionInfo.u2catchType;
|
1040
|
-
|
1041
|
-
if (DEBUG) System.out.println("Evaluating exception ["+startPC +" -> "+endPC +": "+handlerPC+"]:");
|
1042
|
-
|
1043
|
-
// Reuse the existing variables and stack objects, ensuring the
|
1044
|
-
// right size.
|
1045
|
-
TracedVariables variables = new TracedVariables(codeAttribute.u2maxLocals);
|
1046
|
-
TracedStack stack = new TracedStack(codeAttribute.u2maxStack);
|
1047
|
-
|
1048
|
-
// Initialize the trace values.
|
1049
|
-
Value storeValue = new InstructionOffsetValue(AT_CATCH_ENTRY);
|
1050
|
-
variables.setProducerValue(storeValue);
|
1051
|
-
stack.setProducerValue(storeValue);
|
1052
|
-
|
1053
|
-
// Initialize the variables by generalizing the variables of the
|
1054
|
-
// try block. Make sure to include the results of the last
|
1055
|
-
// instruction for preverification.
|
1056
|
-
generalizeVariables(startPC,
|
1057
|
-
endPC,
|
1058
|
-
evaluateAllCode,
|
1059
|
-
variables);
|
1060
|
-
|
1061
|
-
// Initialize the the stack.
|
1062
|
-
//stack.push(valueFactory.createReference((ClassConstant)((ProgramClass)clazz).getConstant(exceptionInfo.u2catchType), false));
|
1063
|
-
String catchClassName = catchType != 0 ?
|
1064
|
-
clazz.getClassName(catchType) :
|
1065
|
-
ClassConstants.INTERNAL_NAME_JAVA_LANG_THROWABLE;
|
1066
|
-
|
1067
|
-
Clazz catchClass = catchType != 0 ?
|
1068
|
-
((ClassConstant)((ProgramClass)clazz).getConstant(catchType)).referencedClass :
|
1069
|
-
null;
|
1070
|
-
|
1071
|
-
stack.push(valueFactory.createReferenceValue(catchClassName,
|
1072
|
-
catchClass,
|
1073
|
-
false));
|
1074
|
-
|
1075
|
-
int evaluationCount = evaluationCounts[handlerPC];
|
1076
|
-
|
1077
|
-
// Evaluate the instructions, starting at the entry point.
|
1078
|
-
evaluateInstructionBlock(clazz,
|
1079
|
-
method,
|
1080
|
-
codeAttribute,
|
1081
|
-
variables,
|
1082
|
-
stack,
|
1083
|
-
handlerPC);
|
1084
|
-
|
1085
|
-
// Remember to evaluate all exception handlers once more.
|
1086
|
-
if (!evaluateExceptions)
|
1087
|
-
{
|
1088
|
-
evaluateExceptions = evaluationCount < evaluationCounts[handlerPC];
|
1089
|
-
}
|
1090
|
-
}
|
1091
|
-
// else if (evaluateAllCode)
|
1092
|
-
// {
|
1093
|
-
// if (DEBUG) System.out.println("No information for partial evaluation of exception ["+startPC +" -> "+endPC +": "+exceptionInfo.u2handlerPC+"] yet");
|
1094
|
-
//
|
1095
|
-
// // We don't have any information on the try block yet, but we do
|
1096
|
-
// // have to evaluate the exception handler.
|
1097
|
-
// // Remember to evaluate all exception handlers once more.
|
1098
|
-
// evaluateExceptions = true;
|
1099
|
-
// }
|
1100
|
-
else
|
1101
|
-
{
|
1102
|
-
if (DEBUG) System.out.println("No information for partial evaluation of exception ["+startPC +" -> "+endPC +": "+exceptionInfo.u2handlerPC+"]");
|
1103
|
-
}
|
1104
|
-
}
|
1105
|
-
|
1106
|
-
|
1107
|
-
// Small utility methods.
|
1108
|
-
|
1109
|
-
/**
|
1110
|
-
* Initializes the data structures for the variables, stack, etc.
|
1111
|
-
*/
|
1112
|
-
private void initializeArrays(CodeAttribute codeAttribute)
|
1113
|
-
{
|
1114
|
-
int codeLength = codeAttribute.u4codeLength;
|
1115
|
-
|
1116
|
-
// Create new arrays for storing information at each instruction offset.
|
1117
|
-
if (variablesAfter.length < codeLength)
|
1118
|
-
{
|
1119
|
-
// Create new arrays.
|
1120
|
-
branchOriginValues = new InstructionOffsetValue[codeLength];
|
1121
|
-
branchTargetValues = new InstructionOffsetValue[codeLength];
|
1122
|
-
variablesBefore = new TracedVariables[codeLength];
|
1123
|
-
stacksBefore = new TracedStack[codeLength];
|
1124
|
-
variablesAfter = new TracedVariables[codeLength];
|
1125
|
-
stacksAfter = new TracedStack[codeLength];
|
1126
|
-
generalizedContexts = new boolean[codeLength];
|
1127
|
-
evaluationCounts = new int[codeLength];
|
1128
|
-
}
|
1129
|
-
else
|
1130
|
-
{
|
1131
|
-
// Reset the arrays.
|
1132
|
-
Arrays.fill(branchOriginValues, null);
|
1133
|
-
Arrays.fill(branchTargetValues, null);
|
1134
|
-
Arrays.fill(generalizedContexts, false);
|
1135
|
-
Arrays.fill(evaluationCounts, 0);
|
1136
|
-
|
1137
|
-
for (int index = 0; index < codeLength; index++)
|
1138
|
-
{
|
1139
|
-
if (variablesBefore[index] != null)
|
1140
|
-
{
|
1141
|
-
variablesBefore[index].reset(codeAttribute.u2maxLocals);
|
1142
|
-
}
|
1143
|
-
|
1144
|
-
if (stacksBefore[index] != null)
|
1145
|
-
{
|
1146
|
-
stacksBefore[index].reset(codeAttribute.u2maxStack);
|
1147
|
-
}
|
1148
|
-
|
1149
|
-
if (variablesAfter[index] != null)
|
1150
|
-
{
|
1151
|
-
variablesAfter[index].reset(codeAttribute.u2maxLocals);
|
1152
|
-
}
|
1153
|
-
|
1154
|
-
if (stacksAfter[index] != null)
|
1155
|
-
{
|
1156
|
-
stacksAfter[index].reset(codeAttribute.u2maxStack);
|
1157
|
-
}
|
1158
|
-
}
|
1159
|
-
}
|
1160
|
-
}
|
1161
|
-
|
1162
|
-
|
1163
|
-
/**
|
1164
|
-
* Initializes the data structures for the variables, stack, etc.
|
1165
|
-
*/
|
1166
|
-
private void initializeParameters(Clazz clazz,
|
1167
|
-
Method method,
|
1168
|
-
CodeAttribute codeAttribute,
|
1169
|
-
TracedVariables variables)
|
1170
|
-
{
|
1171
|
-
// Create the method parameters.
|
1172
|
-
TracedVariables parameters = new TracedVariables(codeAttribute.u2maxLocals);
|
1173
|
-
|
1174
|
-
// Remember this instruction's offset with any stored value.
|
1175
|
-
Value storeValue = new InstructionOffsetValue(AT_METHOD_ENTRY);
|
1176
|
-
parameters.setProducerValue(storeValue);
|
1177
|
-
|
1178
|
-
// Initialize the method parameters.
|
1179
|
-
invocationUnit.enterMethod(clazz, method, parameters);
|
1180
|
-
|
1181
|
-
if (DEBUG)
|
1182
|
-
{
|
1183
|
-
System.out.println(" Params: "+parameters);
|
1184
|
-
}
|
1185
|
-
|
1186
|
-
// Initialize the variables with the parameters.
|
1187
|
-
variables.initialize(parameters);
|
1188
|
-
|
1189
|
-
// Set the store value of each parameter variable.
|
1190
|
-
InstructionOffsetValue atMethodEntry = new InstructionOffsetValue(AT_METHOD_ENTRY);
|
1191
|
-
|
1192
|
-
for (int index = 0; index < parameters.size(); index++)
|
1193
|
-
{
|
1194
|
-
variables.setProducerValue(index, atMethodEntry);
|
1195
|
-
}
|
1196
|
-
}
|
1197
|
-
|
1198
|
-
|
1199
|
-
/**
|
1200
|
-
* Generalize the local variable frames of a block of instructions.
|
1201
|
-
*/
|
1202
|
-
private void generalizeVariables(int startOffset,
|
1203
|
-
int endOffset,
|
1204
|
-
boolean includeAfterLastInstruction,
|
1205
|
-
TracedVariables generalizedVariables)
|
1206
|
-
{
|
1207
|
-
boolean first = true;
|
1208
|
-
int lastIndex = -1;
|
1209
|
-
|
1210
|
-
// Generalize the variables before each of the instructions in the block.
|
1211
|
-
for (int index = startOffset; index < endOffset; index++)
|
1212
|
-
{
|
1213
|
-
if (isTraced(index))
|
1214
|
-
{
|
1215
|
-
TracedVariables tracedVariables = variablesBefore[index];
|
1216
|
-
|
1217
|
-
if (first)
|
1218
|
-
{
|
1219
|
-
// Initialize the variables with the first traced local
|
1220
|
-
// variable frame.
|
1221
|
-
generalizedVariables.initialize(tracedVariables);
|
1222
|
-
|
1223
|
-
first = false;
|
1224
|
-
}
|
1225
|
-
else
|
1226
|
-
{
|
1227
|
-
// Generalize the variables with the traced local variable
|
1228
|
-
// frame. We can't use the return value, because local
|
1229
|
-
// generalization can be different a couple of times,
|
1230
|
-
// with the global generalization being the same.
|
1231
|
-
generalizedVariables.generalize(tracedVariables, false);
|
1232
|
-
}
|
1233
|
-
|
1234
|
-
lastIndex = index;
|
1235
|
-
}
|
1236
|
-
}
|
1237
|
-
|
1238
|
-
// Generalize the variables after the last instruction in the block,
|
1239
|
-
// if required.
|
1240
|
-
if (includeAfterLastInstruction &&
|
1241
|
-
lastIndex >= 0)
|
1242
|
-
{
|
1243
|
-
TracedVariables tracedVariables = variablesAfter[lastIndex];
|
1244
|
-
|
1245
|
-
if (first)
|
1246
|
-
{
|
1247
|
-
// Initialize the variables with the local variable frame.
|
1248
|
-
generalizedVariables.initialize(tracedVariables);
|
1249
|
-
}
|
1250
|
-
else
|
1251
|
-
{
|
1252
|
-
// Generalize the variables with the local variable frame.
|
1253
|
-
generalizedVariables.generalize(tracedVariables, false);
|
1254
|
-
}
|
1255
|
-
}
|
1256
|
-
|
1257
|
-
// Just clear the variables if there aren't any traced instructions
|
1258
|
-
// in the block.
|
1259
|
-
if (first)
|
1260
|
-
{
|
1261
|
-
generalizedVariables.reset(generalizedVariables.size());
|
1262
|
-
}
|
1263
|
-
}
|
1264
|
-
|
1265
|
-
|
1266
|
-
private static class MyInstructionBlock
|
1267
|
-
{
|
1268
|
-
private TracedVariables variables;
|
1269
|
-
private TracedStack stack;
|
1270
|
-
private int startOffset;
|
1271
|
-
|
1272
|
-
|
1273
|
-
private MyInstructionBlock(TracedVariables variables,
|
1274
|
-
TracedStack stack,
|
1275
|
-
int startOffset)
|
1276
|
-
{
|
1277
|
-
this.variables = variables;
|
1278
|
-
this.stack = stack;
|
1279
|
-
this.startOffset = startOffset;
|
1280
|
-
}
|
1281
|
-
}
|
1282
|
-
}
|