sometsome 1.0.2 → 3.10.42
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
- data/lib/proguard4.7/README +33 -0
- data/lib/proguard4.7/bin/proguard.bat +14 -0
- data/lib/proguard4.7/bin/proguard.sh +11 -0
- data/lib/proguard4.7/bin/proguardgui.bat +14 -0
- data/lib/proguard4.7/bin/proguardgui.sh +15 -0
- data/lib/proguard4.7/bin/retrace.bat +14 -0
- data/lib/proguard4.7/bin/retrace.sh +12 -0
- data/lib/proguard4.7/build/build.sh +94 -0
- data/lib/proguard4.7/build/build.xml +171 -0
- data/lib/proguard4.7/build/makefile +94 -0
- data/lib/proguard4.7/docs/FAQ.html +253 -0
- data/lib/proguard4.7/docs/GPL.html +406 -0
- data/lib/proguard4.7/docs/GPL_exception.html +56 -0
- data/lib/proguard4.7/docs/acknowledgements.html +76 -0
- data/lib/proguard4.7/docs/alternatives.html +699 -0
- data/lib/proguard4.7/docs/checkmark.gif +0 -0
- data/lib/proguard4.7/docs/downloads.html +623 -0
- 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 +120 -0
- data/lib/proguard4.7/docs/index.html +92 -0
- data/lib/proguard4.7/docs/license.html +60 -0
- data/lib/proguard4.7/docs/main.html +102 -0
- data/lib/proguard4.7/docs/manual/ant.html +634 -0
- data/lib/proguard4.7/docs/manual/attention.gif +0 -0
- data/lib/proguard4.7/docs/manual/examples.html +1504 -0
- data/lib/proguard4.7/docs/manual/gui.html +479 -0
- data/lib/proguard4.7/docs/manual/index.html +51 -0
- data/lib/proguard4.7/docs/manual/introduction.html +173 -0
- data/lib/proguard4.7/docs/manual/limitations.html +69 -0
- data/lib/proguard4.7/docs/manual/optimizations.html +172 -0
- data/lib/proguard4.7/docs/manual/refcard.html +486 -0
- data/lib/proguard4.7/docs/manual/retrace/examples.html +345 -0
- data/lib/proguard4.7/docs/manual/retrace/index.html +37 -0
- data/lib/proguard4.7/docs/manual/retrace/introduction.html +79 -0
- data/lib/proguard4.7/docs/manual/retrace/usage.html +127 -0
- data/lib/proguard4.7/docs/manual/sections.html +60 -0
- data/lib/proguard4.7/docs/manual/style.css +105 -0
- data/lib/proguard4.7/docs/manual/troubleshooting.html +729 -0
- data/lib/proguard4.7/docs/manual/usage.html +1243 -0
- data/lib/proguard4.7/docs/manual/wtk.html +70 -0
- data/lib/proguard4.7/docs/quality.html +56 -0
- data/lib/proguard4.7/docs/results.html +170 -0
- 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 +67 -0
- data/lib/proguard4.7/docs/screenshots_gui_small.gif +0 -0
- data/lib/proguard4.7/docs/sections.html +64 -0
- 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 +223 -0
- data/lib/proguard4.7/docs/testimonials.html +133 -0
- data/lib/proguard4.7/docs/title.gif +0 -0
- data/lib/proguard4.7/docs/title.html +17 -0
- data/lib/proguard4.7/examples/android.pro +149 -0
- data/lib/proguard4.7/examples/annotations/examples.pro +60 -0
- data/lib/proguard4.7/examples/annotations/examples/Applet.java +22 -0
- data/lib/proguard4.7/examples/annotations/examples/Application.java +20 -0
- data/lib/proguard4.7/examples/annotations/examples/Bean.java +56 -0
- data/lib/proguard4.7/examples/annotations/examples/NativeCallBack.java +44 -0
- data/lib/proguard4.7/examples/annotations/lib/annotations.jar +0 -0
- data/lib/proguard4.7/examples/annotations/lib/annotations.pro +118 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/Keep.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepApplication.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMemberNames.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMembers.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepGettersSetters.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepImplementations.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepName.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMemberNames.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMembers.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicGettersSetters.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicImplementations.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMemberNames.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMembers.java +19 -0
- data/lib/proguard4.7/examples/ant/android-8.xml +177 -0
- data/lib/proguard4.7/examples/ant/applets.xml +88 -0
- data/lib/proguard4.7/examples/ant/applications1.xml +15 -0
- data/lib/proguard4.7/examples/ant/applications2.xml +74 -0
- data/lib/proguard4.7/examples/ant/applications3.xml +98 -0
- data/lib/proguard4.7/examples/ant/library.xml +102 -0
- data/lib/proguard4.7/examples/ant/midlets.xml +52 -0
- data/lib/proguard4.7/examples/ant/proguard.xml +78 -0
- data/lib/proguard4.7/examples/ant/servlets.xml +88 -0
- data/lib/proguard4.7/examples/applets.pro +69 -0
- data/lib/proguard4.7/examples/applications.pro +75 -0
- data/lib/proguard4.7/examples/dictionaries/compact.txt +18 -0
- data/lib/proguard4.7/examples/dictionaries/keywords.txt +58 -0
- data/lib/proguard4.7/examples/dictionaries/shakespeare.txt +23 -0
- data/lib/proguard4.7/examples/dictionaries/windows.txt +209 -0
- data/lib/proguard4.7/examples/library.pro +79 -0
- data/lib/proguard4.7/examples/midlets.pro +67 -0
- data/lib/proguard4.7/examples/proguard.pro +57 -0
- data/lib/proguard4.7/examples/proguardall.pro +62 -0
- data/lib/proguard4.7/examples/proguardgui.pro +50 -0
- data/lib/proguard4.7/examples/retrace.pro +43 -0
- data/lib/proguard4.7/examples/scala.pro +132 -0
- data/lib/proguard4.7/examples/servlets.pro +70 -0
- 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 +111 -0
- data/lib/proguard4.7/src/proguard/ClassPath.java +94 -0
- data/lib/proguard4.7/src/proguard/ClassPathEntry.java +282 -0
- data/lib/proguard4.7/src/proguard/ClassSpecification.java +259 -0
- data/lib/proguard4.7/src/proguard/ClassSpecificationVisitorFactory.java +503 -0
- data/lib/proguard4.7/src/proguard/Configuration.java +328 -0
- data/lib/proguard4.7/src/proguard/ConfigurationConstants.java +123 -0
- data/lib/proguard4.7/src/proguard/ConfigurationParser.java +1285 -0
- data/lib/proguard4.7/src/proguard/ConfigurationWriter.java +651 -0
- data/lib/proguard4.7/src/proguard/DataEntryReaderFactory.java +141 -0
- data/lib/proguard4.7/src/proguard/DataEntryWriterFactory.java +150 -0
- data/lib/proguard4.7/src/proguard/DescriptorKeepChecker.java +169 -0
- data/lib/proguard4.7/src/proguard/DuplicateClassPrinter.java +63 -0
- data/lib/proguard4.7/src/proguard/FileWordReader.java +55 -0
- data/lib/proguard4.7/src/proguard/FullyQualifiedClassNameChecker.java +191 -0
- data/lib/proguard4.7/src/proguard/GPL.java +197 -0
- data/lib/proguard4.7/src/proguard/Initializer.java +424 -0
- data/lib/proguard4.7/src/proguard/InputReader.java +233 -0
- data/lib/proguard4.7/src/proguard/KeepClassMemberChecker.java +87 -0
- data/lib/proguard4.7/src/proguard/KeepClassSpecification.java +137 -0
- data/lib/proguard4.7/src/proguard/LineWordReader.java +74 -0
- data/lib/proguard4.7/src/proguard/MANIFEST.MF +2 -0
- data/lib/proguard4.7/src/proguard/MemberSpecification.java +114 -0
- data/lib/proguard4.7/src/proguard/OutputWriter.java +296 -0
- data/lib/proguard4.7/src/proguard/ParseException.java +51 -0
- data/lib/proguard4.7/src/proguard/ProGuard.java +512 -0
- data/lib/proguard4.7/src/proguard/SeedPrinter.java +97 -0
- data/lib/proguard4.7/src/proguard/SubclassedClassFilter.java +62 -0
- data/lib/proguard4.7/src/proguard/Targeter.java +88 -0
- data/lib/proguard4.7/src/proguard/UpToDateChecker.java +232 -0
- data/lib/proguard4.7/src/proguard/WordReader.java +387 -0
- data/lib/proguard4.7/src/proguard/ant/ClassPathElement.java +191 -0
- data/lib/proguard4.7/src/proguard/ant/ClassSpecificationElement.java +258 -0
- data/lib/proguard4.7/src/proguard/ant/ConfigurationElement.java +53 -0
- data/lib/proguard4.7/src/proguard/ant/ConfigurationTask.java +441 -0
- data/lib/proguard4.7/src/proguard/ant/FilterElement.java +85 -0
- data/lib/proguard4.7/src/proguard/ant/KeepSpecificationElement.java +87 -0
- data/lib/proguard4.7/src/proguard/ant/MemberSpecificationElement.java +218 -0
- data/lib/proguard4.7/src/proguard/ant/ProGuardTask.java +352 -0
- data/lib/proguard4.7/src/proguard/ant/package.html +3 -0
- data/lib/proguard4.7/src/proguard/ant/task.properties +2 -0
- data/lib/proguard4.7/src/proguard/classfile/ClassConstants.java +316 -0
- data/lib/proguard4.7/src/proguard/classfile/ClassPool.java +152 -0
- data/lib/proguard4.7/src/proguard/classfile/Clazz.java +261 -0
- data/lib/proguard4.7/src/proguard/classfile/Field.java +32 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryClass.java +548 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryField.java +77 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryMember.java +108 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryMethod.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/Member.java +57 -0
- data/lib/proguard4.7/src/proguard/classfile/Method.java +32 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramClass.java +572 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramField.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramMember.java +168 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramMethod.java +99 -0
- data/lib/proguard4.7/src/proguard/classfile/VisitorAccepter.java +47 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/Attribute.java +142 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodInfo.java +89 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodsAttribute.java +95 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/CodeAttribute.java +202 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/ConstantValueAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/DeprecatedAttribute.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/EnclosingMethodAttribute.java +132 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionInfo.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionsAttribute.java +80 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesAttribute.java +80 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesInfo.java +119 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberInfo.java +50 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberTableAttribute.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableInfo.java +99 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTableAttribute.java +79 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeInfo.java +107 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeTableAttribute.java +79 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SignatureAttribute.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SourceDirAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SourceFileAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SyntheticAttribute.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/UnknownAttribute.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/Annotation.java +143 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationDefaultAttribute.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationElementValue.java +76 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationsAttribute.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ArrayElementValue.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ClassElementValue.java +95 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ConstantElementValue.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ElementValue.java +126 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/EnumConstantElementValue.java +99 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ParameterAnnotationsAttribute.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleAnnotationsAttribute.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleParameterAnnotationsAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleAnnotationsAttribute.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleParameterAnnotationsAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/package.html +4 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AllAnnotationVisitor.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotatedClassVisitor.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationToMemberVisitor.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationTypeFilter.java +102 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/ElementValueVisitor.java +51 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/DoubleType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FloatType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FullFrame.java +202 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/IntegerType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LessZeroFrame.java +103 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LongType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/MoreZeroFrame.java +161 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/NullType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/ObjectType.java +107 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameOneFrame.java +115 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameZeroFrame.java +74 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapAttribute.java +91 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapFrame.java +117 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapTableAttribute.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/TopType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedThisType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedType.java +106 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationType.java +103 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationTypeFactory.java +112 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/StackMapFrameVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/VerificationTypeVisitor.java +65 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java +117 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeNameFilter.java +368 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeVisitor.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java +37 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java +365 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java +293 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java +360 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/StackSizeComputer.java +378 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/ClassConstant.java +105 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/Constant.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/DoubleConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/FieldrefConstant.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/FloatConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/IntegerConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/InterfaceMethodrefConstant.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/InvokeDynamicConstant.java +148 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/LongConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodHandleConstant.java +124 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodTypeConstant.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodrefConstant.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/NameAndTypeConstant.java +119 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/RefConstant.java +130 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/StringConstant.java +135 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/Utf8Constant.java +285 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/AllConstantVisitor.java +53 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/BootstrapMethodHandleTraveler.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantTagFilter.java +86 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantVisitor.java +49 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ExceptClassConstantFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/MethodrefTraveler.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AccessFixer.java +180 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationAdder.java +153 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationsAttributeEditor.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributeAdder.java +457 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributeSorter.java +89 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributesEditor.java +269 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/BridgeMethodFixer.java +117 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassEditor.java +255 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassElementSorter.java +52 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassMemberSorter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassReferenceFixer.java +546 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeComposer.java +843 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditor.java +1104 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditorResetter.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ComparableConstant.java +249 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantAdder.java +239 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolEditor.java +782 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolRemapper.java +662 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolShrinker.java +578 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolSorter.java +123 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ElementValueAdder.java +217 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ElementValuesEditor.java +238 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionAdder.java +65 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionInfoAdder.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionsAttributeEditor.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InnerClassesAccessFixer.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InstructionAdder.java +76 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InstructionWriter.java +278 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceAdder.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceSorter.java +152 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfacesEditor.java +122 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberInfoAdder.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberTableAttributeEditor.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableInfoAdder.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTableAttributeEditor.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeInfoAdder.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeTableAttributeEditor.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/MemberAdder.java +288 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/MemberReferenceFixer.java +447 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/MethodInvocationFixer.java +243 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/NameAndTypeShrinker.java +188 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/NamedAttributeDeleter.java +54 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ParameterAnnotationsAttributeEditor.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/StackSizeUpdater.java +54 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/SubclassAdder.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/SubclassToAdder.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/Utf8Shrinker.java +455 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableCleaner.java +267 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableEditor.java +130 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableRemapper.java +156 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableSizeUpdater.java +105 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/BranchInstruction.java +180 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/ConstantInstruction.java +309 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/Instruction.java +920 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionConstants.java +449 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionFactory.java +300 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionUtil.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/LookUpSwitchInstruction.java +135 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/SimpleInstruction.java +255 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/SwitchInstruction.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/TableSwitchInstruction.java +139 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/VariableInstruction.java +372 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/package.html +9 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/AllInstructionVisitor.java +56 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionCounter.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionVisitor.java +42 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/MultiInstructionVisitor.java +131 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/io/LibraryClassReader.java +383 -0
- data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassReader.java +919 -0
- data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassWriter.java +735 -0
- data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataInput.java +223 -0
- data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataOutput.java +224 -0
- data/lib/proguard4.7/src/proguard/classfile/io/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/package.html +15 -0
- data/lib/proguard4.7/src/proguard/classfile/util/AccessUtil.java +105 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassReferenceInitializer.java +559 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassSubHierarchyInitializer.java +77 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassSuperHierarchyInitializer.java +163 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassUtil.java +1227 -0
- data/lib/proguard4.7/src/proguard/classfile/util/DescriptorClassEnumeration.java +236 -0
- data/lib/proguard4.7/src/proguard/classfile/util/DynamicClassReferenceInitializer.java +485 -0
- data/lib/proguard4.7/src/proguard/classfile/util/DynamicMemberReferenceInitializer.java +944 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ExternalTypeEnumeration.java +106 -0
- data/lib/proguard4.7/src/proguard/classfile/util/InstructionSequenceMatcher.java +754 -0
- data/lib/proguard4.7/src/proguard/classfile/util/InternalTypeEnumeration.java +204 -0
- data/lib/proguard4.7/src/proguard/classfile/util/MemberFinder.java +197 -0
- data/lib/proguard4.7/src/proguard/classfile/util/MethodLinker.java +160 -0
- data/lib/proguard4.7/src/proguard/classfile/util/SimplifiedVisitor.java +834 -0
- data/lib/proguard4.7/src/proguard/classfile/util/StringReferenceInitializer.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/util/StringSharer.java +172 -0
- data/lib/proguard4.7/src/proguard/classfile/util/WarningPrinter.java +136 -0
- data/lib/proguard4.7/src/proguard/classfile/util/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllClassVisitor.java +47 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllFieldVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllMemberVisitor.java +57 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllMethodVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/BottomClassFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassAccessFilter.java +88 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCleaner.java +275 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCollector.java +58 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCounter.java +56 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassHierarchyTraveler.java +91 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassNameFilter.java +112 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolFiller.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolVisitor.java +37 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPresenceFilter.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPrinter.java +1011 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionFilter.java +85 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionSetter.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVisitor.java +36 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ConcreteClassDownTraveler.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/DotClassClassVisitor.java +89 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassesFilter.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionCounter.java +52 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionExcludedOffsetFilter.java +64 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerConstantVisitor.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerFilter.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionOffsetFilter.java +64 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionRangeFilter.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassConstantFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassFilter.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementingClassConstantFilter.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryClassFilter.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryMemberFilter.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberAccessFilter.java +122 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberClassAccessFilter.java +106 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCollector.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCounter.java +72 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberDescriptorFilter.java +113 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberNameFilter.java +113 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberToClassVisitor.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationFilter.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationTraveler.java +128 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassPoolVisitor.java +88 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassVisitor.java +97 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiMemberVisitor.java +113 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedClassVisitor.java +49 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedFieldVisitor.java +61 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedMethodVisitor.java +61 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramClassFilter.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramMemberFilter.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedClassVisitor.java +255 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedMemberVisitor.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SimilarMemberVisitor.java +125 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SimpleClassPrinter.java +167 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassFilter.java +91 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassTraveler.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/VariableClassVisitor.java +78 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/VariableMemberVisitor.java +96 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/package.html +40 -0
- data/lib/proguard4.7/src/proguard/evaluation/BasicBranchUnit.java +126 -0
- data/lib/proguard4.7/src/proguard/evaluation/BasicInvocationUnit.java +425 -0
- data/lib/proguard4.7/src/proguard/evaluation/BranchUnit.java +63 -0
- data/lib/proguard4.7/src/proguard/evaluation/ClassConstantValueFactory.java +53 -0
- data/lib/proguard4.7/src/proguard/evaluation/ConstantValueFactory.java +113 -0
- data/lib/proguard4.7/src/proguard/evaluation/InvocationUnit.java +62 -0
- data/lib/proguard4.7/src/proguard/evaluation/Processor.java +908 -0
- data/lib/proguard4.7/src/proguard/evaluation/Stack.java +560 -0
- data/lib/proguard4.7/src/proguard/evaluation/TracedStack.java +342 -0
- data/lib/proguard4.7/src/proguard/evaluation/TracedVariables.java +199 -0
- data/lib/proguard4.7/src/proguard/evaluation/Variables.java +347 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/Category1Value.java +41 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/Category2Value.java +41 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ComparisonValue.java +69 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeDoubleValue.java +81 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeFloatValue.java +81 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeIntegerValue.java +87 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeLongValue.java +87 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedByteValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedCharacterValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedDoubleValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedFloatValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedIntegerValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedLongValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedShortValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/DoubleValue.java +359 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/FloatValue.java +359 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedDoubleValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedFloatValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedIntegerValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedLongValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedReferenceValue.java +102 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedValueFactory.java +75 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/InstructionOffsetValue.java +307 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IntegerValue.java +1002 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/LongValue.java +554 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedDoubleValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedFloatValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedIntegerValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedLongValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularDoubleValue.java +216 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularFloatValue.java +216 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularIntegerValue.java +383 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularLongValue.java +271 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ReferenceValue.java +540 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificDoubleValue.java +186 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificFloatValue.java +186 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificIntegerValue.java +354 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificLongValue.java +259 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificValueFactory.java +97 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/TopValue.java +79 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownDoubleValue.java +125 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownFloatValue.java +125 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownIntegerValue.java +216 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownLongValue.java +160 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/Value.java +169 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ValueFactory.java +193 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/package.html +3 -0
- data/lib/proguard4.7/src/proguard/gui/ClassPathPanel.java +441 -0
- data/lib/proguard4.7/src/proguard/gui/ClassSpecificationDialog.java +546 -0
- data/lib/proguard4.7/src/proguard/gui/ClassSpecificationsPanel.java +231 -0
- data/lib/proguard4.7/src/proguard/gui/ExtensionFileFilter.java +78 -0
- data/lib/proguard4.7/src/proguard/gui/FilterBuilder.java +208 -0
- data/lib/proguard4.7/src/proguard/gui/FilterDialog.java +320 -0
- data/lib/proguard4.7/src/proguard/gui/GUIResources.java +56 -0
- data/lib/proguard4.7/src/proguard/gui/GUIResources.properties +643 -0
- data/lib/proguard4.7/src/proguard/gui/KeepSpecificationsPanel.java +81 -0
- data/lib/proguard4.7/src/proguard/gui/ListPanel.java +341 -0
- data/lib/proguard4.7/src/proguard/gui/MANIFEST.MF +3 -0
- data/lib/proguard4.7/src/proguard/gui/MemberSpecificationDialog.java +509 -0
- data/lib/proguard4.7/src/proguard/gui/MemberSpecificationsPanel.java +304 -0
- data/lib/proguard4.7/src/proguard/gui/MessageDialogRunnable.java +90 -0
- data/lib/proguard4.7/src/proguard/gui/OptimizationsDialog.java +251 -0
- data/lib/proguard4.7/src/proguard/gui/ProGuardGUI.java +1777 -0
- data/lib/proguard4.7/src/proguard/gui/ProGuardRunnable.java +154 -0
- data/lib/proguard4.7/src/proguard/gui/ReTraceRunnable.java +149 -0
- data/lib/proguard4.7/src/proguard/gui/SwingUtil.java +82 -0
- data/lib/proguard4.7/src/proguard/gui/TabbedPane.java +229 -0
- data/lib/proguard4.7/src/proguard/gui/TextAreaOutputStream.java +81 -0
- data/lib/proguard4.7/src/proguard/gui/arrow.gif +0 -0
- data/lib/proguard4.7/src/proguard/gui/boilerplate.pro +410 -0
- data/lib/proguard4.7/src/proguard/gui/default.pro +318 -0
- data/lib/proguard4.7/src/proguard/gui/package.html +3 -0
- data/lib/proguard4.7/src/proguard/gui/splash/BufferedSprite.java +145 -0
- data/lib/proguard4.7/src/proguard/gui/splash/CircleSprite.java +74 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ClipSprite.java +85 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ColorSprite.java +65 -0
- data/lib/proguard4.7/src/proguard/gui/splash/CompositeSprite.java +56 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantColor.java +51 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantDouble.java +49 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantFont.java +46 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantInt.java +49 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantString.java +49 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantTiming.java +57 -0
- data/lib/proguard4.7/src/proguard/gui/splash/FontSprite.java +65 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ImageSprite.java +76 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearColor.java +72 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearDouble.java +55 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearInt.java +55 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearTiming.java +55 -0
- data/lib/proguard4.7/src/proguard/gui/splash/OverrideGraphics2D.java +598 -0
- data/lib/proguard4.7/src/proguard/gui/splash/RectangleSprite.java +114 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SawToothTiming.java +53 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ShadowedSprite.java +109 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SineTiming.java +53 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SmoothTiming.java +66 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SplashPanel.java +235 -0
- data/lib/proguard4.7/src/proguard/gui/splash/Sprite.java +41 -0
- data/lib/proguard4.7/src/proguard/gui/splash/TextSprite.java +89 -0
- data/lib/proguard4.7/src/proguard/gui/splash/TimeSwitchSprite.java +75 -0
- data/lib/proguard4.7/src/proguard/gui/splash/Timing.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/TypeWriterString.java +71 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableColor.java +36 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableDouble.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableFont.java +36 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableInt.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableSizeFont.java +65 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableString.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/package.html +4 -0
- data/lib/proguard4.7/src/proguard/gui/vtitle.png +0 -0
- data/lib/proguard4.7/src/proguard/io/CascadingDataEntryWriter.java +94 -0
- data/lib/proguard4.7/src/proguard/io/ClassFilter.java +59 -0
- data/lib/proguard4.7/src/proguard/io/ClassReader.java +115 -0
- data/lib/proguard4.7/src/proguard/io/ClassRewriter.java +80 -0
- data/lib/proguard4.7/src/proguard/io/DataEntry.java +62 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryClassWriter.java +85 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryCopier.java +247 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryDirectoryFilter.java +40 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryFilter.java +38 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryNameFilter.java +54 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryObfuscator.java +150 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryParentFilter.java +51 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryPump.java +43 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryReader.java +38 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryRenamer.java +104 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryRewriter.java +148 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryWriter.java +73 -0
- data/lib/proguard4.7/src/proguard/io/DirectoryFilter.java +58 -0
- data/lib/proguard4.7/src/proguard/io/DirectoryPump.java +78 -0
- data/lib/proguard4.7/src/proguard/io/DirectoryWriter.java +165 -0
- data/lib/proguard4.7/src/proguard/io/FileDataEntry.java +96 -0
- data/lib/proguard4.7/src/proguard/io/FilteredDataEntryReader.java +90 -0
- data/lib/proguard4.7/src/proguard/io/FilteredDataEntryWriter.java +125 -0
- data/lib/proguard4.7/src/proguard/io/Finisher.java +37 -0
- data/lib/proguard4.7/src/proguard/io/JarReader.java +75 -0
- data/lib/proguard4.7/src/proguard/io/JarWriter.java +235 -0
- data/lib/proguard4.7/src/proguard/io/ManifestRewriter.java +216 -0
- data/lib/proguard4.7/src/proguard/io/NameFilter.java +83 -0
- data/lib/proguard4.7/src/proguard/io/ParentDataEntryWriter.java +75 -0
- data/lib/proguard4.7/src/proguard/io/RenamedDataEntry.java +83 -0
- data/lib/proguard4.7/src/proguard/io/ZipDataEntry.java +98 -0
- data/lib/proguard4.7/src/proguard/io/package.html +4 -0
- data/lib/proguard4.7/src/proguard/obfuscate/AttributeShrinker.java +120 -0
- data/lib/proguard4.7/src/proguard/obfuscate/AttributeUsageMarker.java +71 -0
- data/lib/proguard4.7/src/proguard/obfuscate/ClassObfuscator.java +533 -0
- data/lib/proguard4.7/src/proguard/obfuscate/ClassRenamer.java +109 -0
- data/lib/proguard4.7/src/proguard/obfuscate/DictionaryNameFactory.java +189 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MapCleaner.java +57 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingKeeper.java +177 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingPrinter.java +147 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingProcessor.java +79 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingReader.java +199 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCleaner.java +60 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCollector.java +106 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameConflictFixer.java +159 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameFilter.java +120 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberObfuscator.java +230 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberSpecialNameFilter.java +101 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MultiMappingProcessor.java +96 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NameFactory.java +34 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NameFactoryResetter.java +59 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NameMarker.java +166 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NumericNameFactory.java +49 -0
- data/lib/proguard4.7/src/proguard/obfuscate/Obfuscator.java +445 -0
- data/lib/proguard4.7/src/proguard/obfuscate/ParameterNameMarker.java +128 -0
- data/lib/proguard4.7/src/proguard/obfuscate/SimpleNameFactory.java +156 -0
- data/lib/proguard4.7/src/proguard/obfuscate/SourceFileRenamer.java +84 -0
- data/lib/proguard4.7/src/proguard/obfuscate/SpecialNameFactory.java +83 -0
- data/lib/proguard4.7/src/proguard/obfuscate/package.html +3 -0
- data/lib/proguard4.7/src/proguard/optimize/BootstrapMethodArgumentShrinker.java +103 -0
- data/lib/proguard4.7/src/proguard/optimize/ChangedCodePrinter.java +297 -0
- data/lib/proguard4.7/src/proguard/optimize/ConstantMemberFilter.java +77 -0
- data/lib/proguard4.7/src/proguard/optimize/ConstantParameterFilter.java +79 -0
- data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerFixer.java +215 -0
- data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerInvocationFixer.java +161 -0
- data/lib/proguard4.7/src/proguard/optimize/KeepMarker.java +95 -0
- data/lib/proguard4.7/src/proguard/optimize/KeptClassFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/optimize/KeptMemberFilter.java +88 -0
- data/lib/proguard4.7/src/proguard/optimize/MemberDescriptorSpecializer.java +138 -0
- data/lib/proguard4.7/src/proguard/optimize/MethodDescriptorShrinker.java +317 -0
- data/lib/proguard4.7/src/proguard/optimize/MethodStaticizer.java +87 -0
- data/lib/proguard4.7/src/proguard/optimize/OptimizationInfoMemberFilter.java +94 -0
- data/lib/proguard4.7/src/proguard/optimize/Optimizer.java +963 -0
- data/lib/proguard4.7/src/proguard/optimize/ParameterShrinker.java +146 -0
- data/lib/proguard4.7/src/proguard/optimize/TailRecursionSimplifier.java +356 -0
- data/lib/proguard4.7/src/proguard/optimize/WriteOnlyFieldFilter.java +65 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationShrinker.java +2082 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationSimplifier.java +973 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/LivenessAnalyzer.java +526 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/LoadingInvocationUnit.java +195 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/PartialEvaluator.java +1282 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/StoringInvocationUnit.java +207 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/TracedBranchUnit.java +59 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/VariableOptimizer.java +345 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/package.html +4 -0
- data/lib/proguard4.7/src/proguard/optimize/info/AccessMethodMarker.java +202 -0
- data/lib/proguard4.7/src/proguard/optimize/info/BackwardBranchMarker.java +90 -0
- data/lib/proguard4.7/src/proguard/optimize/info/CatchExceptionMarker.java +69 -0
- data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassFilter.java +63 -0
- data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassMarker.java +64 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfo.java +165 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfoSetter.java +47 -0
- data/lib/proguard4.7/src/proguard/optimize/info/DotClassFilter.java +63 -0
- data/lib/proguard4.7/src/proguard/optimize/info/DotClassMarker.java +96 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ExceptionInstructionChecker.java +193 -0
- data/lib/proguard4.7/src/proguard/optimize/info/FieldOptimizationInfo.java +204 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassFilter.java +63 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassMarker.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassFilter.java +62 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassMarker.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/info/MemberOptimizationInfoSetter.java +59 -0
- data/lib/proguard4.7/src/proguard/optimize/info/MethodInvocationMarker.java +107 -0
- data/lib/proguard4.7/src/proguard/optimize/info/MethodOptimizationInfo.java +302 -0
- data/lib/proguard4.7/src/proguard/optimize/info/NoSideEffectMethodMarker.java +91 -0
- data/lib/proguard4.7/src/proguard/optimize/info/NonPrivateMemberMarker.java +171 -0
- data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberContainingClassMarker.java +85 -0
- data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberInvokingClassMarker.java +129 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ParameterUsageMarker.java +285 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ReadWriteFieldMarker.java +163 -0
- data/lib/proguard4.7/src/proguard/optimize/info/SideEffectInstructionChecker.java +245 -0
- data/lib/proguard4.7/src/proguard/optimize/info/SideEffectMethodMarker.java +175 -0
- data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassFilter.java +62 -0
- data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassMarker.java +65 -0
- data/lib/proguard4.7/src/proguard/optimize/info/SuperInvocationMarker.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/info/VariableUsageMarker.java +96 -0
- data/lib/proguard4.7/src/proguard/optimize/info/package.html +4 -0
- data/lib/proguard4.7/src/proguard/optimize/package.html +4 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/BranchTargetFinder.java +687 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/ClassFinalizer.java +84 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/ClassMerger.java +576 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoCommonCodeReplacer.java +266 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoGotoReplacer.java +115 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoReturnReplacer.java +115 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/HorizontalClassMerger.java +90 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceConstants.java +4424 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceReplacer.java +420 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequencesReplacer.java +138 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/MemberPrivatizer.java +103 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/MethodFinalizer.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/MethodInliner.java +597 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/NopRemover.java +89 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/PeepholeOptimizer.java +103 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/ReachableCodeMarker.java +262 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/RetargetedInnerClassAttributeRemover.java +170 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/TargetClassChanger.java +455 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableCodeRemover.java +143 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableExceptionRemover.java +163 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/VariableShrinker.java +129 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/VerticalClassMerger.java +88 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/package.html +3 -0
- data/lib/proguard4.7/src/proguard/package.html +5 -0
- data/lib/proguard4.7/src/proguard/preverify/CodePreverifier.java +611 -0
- data/lib/proguard4.7/src/proguard/preverify/CodeSubroutineInliner.java +406 -0
- data/lib/proguard4.7/src/proguard/preverify/Preverifier.java +73 -0
- data/lib/proguard4.7/src/proguard/preverify/SubroutineInliner.java +73 -0
- data/lib/proguard4.7/src/proguard/retrace/MANIFEST.MF +3 -0
- data/lib/proguard4.7/src/proguard/retrace/ReTrace.java +749 -0
- data/lib/proguard4.7/src/proguard/retrace/package.html +4 -0
- data/lib/proguard4.7/src/proguard/shrink/AnnotationUsageMarker.java +333 -0
- data/lib/proguard4.7/src/proguard/shrink/ClassShrinker.java +458 -0
- data/lib/proguard4.7/src/proguard/shrink/InnerUsageMarker.java +174 -0
- data/lib/proguard4.7/src/proguard/shrink/InterfaceUsageMarker.java +152 -0
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMark.java +183 -0
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMarker.java +277 -0
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsagePrinter.java +210 -0
- data/lib/proguard4.7/src/proguard/shrink/Shrinker.java +181 -0
- data/lib/proguard4.7/src/proguard/shrink/UsageMarker.java +1036 -0
- data/lib/proguard4.7/src/proguard/shrink/UsagePrinter.java +177 -0
- data/lib/proguard4.7/src/proguard/shrink/UsedClassFilter.java +74 -0
- data/lib/proguard4.7/src/proguard/shrink/UsedMemberFilter.java +93 -0
- data/lib/proguard4.7/src/proguard/shrink/package.html +3 -0
- data/lib/proguard4.7/src/proguard/util/AndMatcher.java +49 -0
- data/lib/proguard4.7/src/proguard/util/ClassNameParser.java +216 -0
- data/lib/proguard4.7/src/proguard/util/ConstantMatcher.java +48 -0
- data/lib/proguard4.7/src/proguard/util/EmptyStringMatcher.java +36 -0
- data/lib/proguard4.7/src/proguard/util/ExtensionMatcher.java +63 -0
- data/lib/proguard4.7/src/proguard/util/FileNameParser.java +121 -0
- data/lib/proguard4.7/src/proguard/util/FixedStringMatcher.java +56 -0
- data/lib/proguard4.7/src/proguard/util/ListMatcher.java +69 -0
- data/lib/proguard4.7/src/proguard/util/ListParser.java +137 -0
- data/lib/proguard4.7/src/proguard/util/ListUtil.java +180 -0
- data/lib/proguard4.7/src/proguard/util/NameParser.java +106 -0
- data/lib/proguard4.7/src/proguard/util/NotMatcher.java +46 -0
- data/lib/proguard4.7/src/proguard/util/OrMatcher.java +49 -0
- data/lib/proguard4.7/src/proguard/util/SettableMatcher.java +46 -0
- data/lib/proguard4.7/src/proguard/util/StringMatcher.java +38 -0
- data/lib/proguard4.7/src/proguard/util/StringParser.java +35 -0
- data/lib/proguard4.7/src/proguard/util/VariableStringMatcher.java +126 -0
- data/lib/proguard4.7/src/proguard/util/package.html +3 -0
- data/lib/proguard4.7/src/proguard/wtk/ProGuardObfuscator.java +141 -0
- data/lib/proguard4.7/src/proguard/wtk/default.pro +114 -0
- data/lib/proguard4.7/src/proguard/wtk/package.html +3 -0
- metadata +960 -10
|
@@ -0,0 +1,973 @@
|
|
|
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.AttributeVisitor;
|
|
26
|
+
import proguard.classfile.editor.*;
|
|
27
|
+
import proguard.classfile.instruction.*;
|
|
28
|
+
import proguard.classfile.instruction.visitor.InstructionVisitor;
|
|
29
|
+
import proguard.classfile.util.*;
|
|
30
|
+
import proguard.classfile.visitor.*;
|
|
31
|
+
import proguard.evaluation.*;
|
|
32
|
+
import proguard.evaluation.value.*;
|
|
33
|
+
import proguard.optimize.info.*;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* This AttributeVisitor simplifies the code attributes that it visits, based
|
|
37
|
+
* on partial evaluation.
|
|
38
|
+
*
|
|
39
|
+
* @author Eric Lafortune
|
|
40
|
+
*/
|
|
41
|
+
public class EvaluationSimplifier
|
|
42
|
+
extends SimplifiedVisitor
|
|
43
|
+
implements AttributeVisitor,
|
|
44
|
+
InstructionVisitor
|
|
45
|
+
{
|
|
46
|
+
private static int POS_ZERO_FLOAT_BITS = Float.floatToIntBits(0.0f);
|
|
47
|
+
private static long POS_ZERO_DOUBLE_BITS = Double.doubleToLongBits(0.0);
|
|
48
|
+
|
|
49
|
+
//*
|
|
50
|
+
private static final boolean DEBUG = false;
|
|
51
|
+
/*/
|
|
52
|
+
private static boolean DEBUG = true;
|
|
53
|
+
//*/
|
|
54
|
+
|
|
55
|
+
private final InstructionVisitor extraInstructionVisitor;
|
|
56
|
+
|
|
57
|
+
private final PartialEvaluator partialEvaluator;
|
|
58
|
+
private final SideEffectInstructionChecker sideEffectInstructionChecker = new SideEffectInstructionChecker(true);
|
|
59
|
+
private final CodeAttributeEditor codeAttributeEditor = new CodeAttributeEditor(false);
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Creates a new EvaluationSimplifier.
|
|
64
|
+
*/
|
|
65
|
+
public EvaluationSimplifier()
|
|
66
|
+
{
|
|
67
|
+
this(new PartialEvaluator(), null);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Creates a new EvaluationSimplifier.
|
|
73
|
+
* @param partialEvaluator the partial evaluator that will
|
|
74
|
+
* execute the code and provide
|
|
75
|
+
* information about the results.
|
|
76
|
+
* @param extraInstructionVisitor an optional extra visitor for all
|
|
77
|
+
* simplified instructions.
|
|
78
|
+
*/
|
|
79
|
+
public EvaluationSimplifier(PartialEvaluator partialEvaluator,
|
|
80
|
+
InstructionVisitor extraInstructionVisitor)
|
|
81
|
+
{
|
|
82
|
+
this.partialEvaluator = partialEvaluator;
|
|
83
|
+
this.extraInstructionVisitor = extraInstructionVisitor;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
// Implementations for AttributeVisitor.
|
|
88
|
+
|
|
89
|
+
public void visitAnyAttribute(Clazz clazz, Attribute attribute) {}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
|
93
|
+
{
|
|
94
|
+
// DEBUG =
|
|
95
|
+
// clazz.getName().equals("abc/Def") &&
|
|
96
|
+
// method.getName(clazz).equals("abc");
|
|
97
|
+
|
|
98
|
+
// TODO: Remove this when the evaluation simplifier has stabilized.
|
|
99
|
+
// Catch any unexpected exceptions from the actual visiting method.
|
|
100
|
+
try
|
|
101
|
+
{
|
|
102
|
+
// Process the code.
|
|
103
|
+
visitCodeAttribute0(clazz, method, codeAttribute);
|
|
104
|
+
}
|
|
105
|
+
catch (RuntimeException ex)
|
|
106
|
+
{
|
|
107
|
+
System.err.println("Unexpected error while simplifying instructions after partial evaluation:");
|
|
108
|
+
System.err.println(" Class = ["+clazz.getName()+"]");
|
|
109
|
+
System.err.println(" Method = ["+method.getName(clazz)+method.getDescriptor(clazz)+"]");
|
|
110
|
+
System.err.println(" Exception = ["+ex.getClass().getName()+"] ("+ex.getMessage()+")");
|
|
111
|
+
System.err.println("Not optimizing this method");
|
|
112
|
+
|
|
113
|
+
if (DEBUG)
|
|
114
|
+
{
|
|
115
|
+
method.accept(clazz, new ClassPrinter());
|
|
116
|
+
|
|
117
|
+
throw ex;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
public void visitCodeAttribute0(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
|
124
|
+
{
|
|
125
|
+
if (DEBUG)
|
|
126
|
+
{
|
|
127
|
+
System.out.println();
|
|
128
|
+
System.out.println("Class "+ClassUtil.externalClassName(clazz.getName()));
|
|
129
|
+
System.out.println("Method "+ClassUtil.externalFullMethodDescription(clazz.getName(),
|
|
130
|
+
0,
|
|
131
|
+
method.getName(clazz),
|
|
132
|
+
method.getDescriptor(clazz)));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Evaluate the method.
|
|
136
|
+
partialEvaluator.visitCodeAttribute(clazz, method, codeAttribute);
|
|
137
|
+
|
|
138
|
+
int codeLength = codeAttribute.u4codeLength;
|
|
139
|
+
|
|
140
|
+
// Reset the code changes.
|
|
141
|
+
codeAttributeEditor.reset(codeLength);
|
|
142
|
+
|
|
143
|
+
// Replace any instructions that can be simplified.
|
|
144
|
+
for (int offset = 0; offset < codeLength; offset++)
|
|
145
|
+
{
|
|
146
|
+
if (partialEvaluator.isTraced(offset))
|
|
147
|
+
{
|
|
148
|
+
Instruction instruction = InstructionFactory.create(codeAttribute.code,
|
|
149
|
+
offset);
|
|
150
|
+
|
|
151
|
+
instruction.accept(clazz, method, codeAttribute, offset, this);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Apply all accumulated changes to the code.
|
|
156
|
+
codeAttributeEditor.visitCodeAttribute(clazz, method, codeAttribute);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
// Implementations for InstructionVisitor.
|
|
161
|
+
|
|
162
|
+
public void visitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction)
|
|
163
|
+
{
|
|
164
|
+
switch (simpleInstruction.opcode)
|
|
165
|
+
{
|
|
166
|
+
case InstructionConstants.OP_IALOAD:
|
|
167
|
+
case InstructionConstants.OP_BALOAD:
|
|
168
|
+
case InstructionConstants.OP_CALOAD:
|
|
169
|
+
case InstructionConstants.OP_SALOAD:
|
|
170
|
+
case InstructionConstants.OP_IADD:
|
|
171
|
+
case InstructionConstants.OP_ISUB:
|
|
172
|
+
case InstructionConstants.OP_IMUL:
|
|
173
|
+
case InstructionConstants.OP_IDIV:
|
|
174
|
+
case InstructionConstants.OP_IREM:
|
|
175
|
+
case InstructionConstants.OP_INEG:
|
|
176
|
+
case InstructionConstants.OP_ISHL:
|
|
177
|
+
case InstructionConstants.OP_ISHR:
|
|
178
|
+
case InstructionConstants.OP_IUSHR:
|
|
179
|
+
case InstructionConstants.OP_IAND:
|
|
180
|
+
case InstructionConstants.OP_IOR:
|
|
181
|
+
case InstructionConstants.OP_IXOR:
|
|
182
|
+
case InstructionConstants.OP_L2I:
|
|
183
|
+
case InstructionConstants.OP_F2I:
|
|
184
|
+
case InstructionConstants.OP_D2I:
|
|
185
|
+
case InstructionConstants.OP_I2B:
|
|
186
|
+
case InstructionConstants.OP_I2C:
|
|
187
|
+
case InstructionConstants.OP_I2S:
|
|
188
|
+
replaceIntegerPushInstruction(clazz, offset, simpleInstruction);
|
|
189
|
+
break;
|
|
190
|
+
|
|
191
|
+
case InstructionConstants.OP_LALOAD:
|
|
192
|
+
case InstructionConstants.OP_LADD:
|
|
193
|
+
case InstructionConstants.OP_LSUB:
|
|
194
|
+
case InstructionConstants.OP_LMUL:
|
|
195
|
+
case InstructionConstants.OP_LDIV:
|
|
196
|
+
case InstructionConstants.OP_LREM:
|
|
197
|
+
case InstructionConstants.OP_LNEG:
|
|
198
|
+
case InstructionConstants.OP_LSHL:
|
|
199
|
+
case InstructionConstants.OP_LSHR:
|
|
200
|
+
case InstructionConstants.OP_LUSHR:
|
|
201
|
+
case InstructionConstants.OP_LAND:
|
|
202
|
+
case InstructionConstants.OP_LOR:
|
|
203
|
+
case InstructionConstants.OP_LXOR:
|
|
204
|
+
case InstructionConstants.OP_I2L:
|
|
205
|
+
case InstructionConstants.OP_F2L:
|
|
206
|
+
case InstructionConstants.OP_D2L:
|
|
207
|
+
replaceLongPushInstruction(clazz, offset, simpleInstruction);
|
|
208
|
+
break;
|
|
209
|
+
|
|
210
|
+
case InstructionConstants.OP_FALOAD:
|
|
211
|
+
case InstructionConstants.OP_FADD:
|
|
212
|
+
case InstructionConstants.OP_FSUB:
|
|
213
|
+
case InstructionConstants.OP_FMUL:
|
|
214
|
+
case InstructionConstants.OP_FDIV:
|
|
215
|
+
case InstructionConstants.OP_FREM:
|
|
216
|
+
case InstructionConstants.OP_FNEG:
|
|
217
|
+
case InstructionConstants.OP_I2F:
|
|
218
|
+
case InstructionConstants.OP_L2F:
|
|
219
|
+
case InstructionConstants.OP_D2F:
|
|
220
|
+
replaceFloatPushInstruction(clazz, offset, simpleInstruction);
|
|
221
|
+
break;
|
|
222
|
+
|
|
223
|
+
case InstructionConstants.OP_DALOAD:
|
|
224
|
+
case InstructionConstants.OP_DADD:
|
|
225
|
+
case InstructionConstants.OP_DSUB:
|
|
226
|
+
case InstructionConstants.OP_DMUL:
|
|
227
|
+
case InstructionConstants.OP_DDIV:
|
|
228
|
+
case InstructionConstants.OP_DREM:
|
|
229
|
+
case InstructionConstants.OP_DNEG:
|
|
230
|
+
case InstructionConstants.OP_I2D:
|
|
231
|
+
case InstructionConstants.OP_L2D:
|
|
232
|
+
case InstructionConstants.OP_F2D:
|
|
233
|
+
replaceDoublePushInstruction(clazz, offset, simpleInstruction);
|
|
234
|
+
break;
|
|
235
|
+
|
|
236
|
+
case InstructionConstants.OP_AALOAD:
|
|
237
|
+
replaceReferencePushInstruction(clazz, offset, simpleInstruction);
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
|
|
244
|
+
{
|
|
245
|
+
int variableIndex = variableInstruction.variableIndex;
|
|
246
|
+
|
|
247
|
+
switch (variableInstruction.opcode)
|
|
248
|
+
{
|
|
249
|
+
case InstructionConstants.OP_ILOAD:
|
|
250
|
+
case InstructionConstants.OP_ILOAD_0:
|
|
251
|
+
case InstructionConstants.OP_ILOAD_1:
|
|
252
|
+
case InstructionConstants.OP_ILOAD_2:
|
|
253
|
+
case InstructionConstants.OP_ILOAD_3:
|
|
254
|
+
replaceIntegerPushInstruction(clazz, offset, variableInstruction, variableIndex);
|
|
255
|
+
break;
|
|
256
|
+
|
|
257
|
+
case InstructionConstants.OP_LLOAD:
|
|
258
|
+
case InstructionConstants.OP_LLOAD_0:
|
|
259
|
+
case InstructionConstants.OP_LLOAD_1:
|
|
260
|
+
case InstructionConstants.OP_LLOAD_2:
|
|
261
|
+
case InstructionConstants.OP_LLOAD_3:
|
|
262
|
+
replaceLongPushInstruction(clazz, offset, variableInstruction, variableIndex);
|
|
263
|
+
break;
|
|
264
|
+
|
|
265
|
+
case InstructionConstants.OP_FLOAD:
|
|
266
|
+
case InstructionConstants.OP_FLOAD_0:
|
|
267
|
+
case InstructionConstants.OP_FLOAD_1:
|
|
268
|
+
case InstructionConstants.OP_FLOAD_2:
|
|
269
|
+
case InstructionConstants.OP_FLOAD_3:
|
|
270
|
+
replaceFloatPushInstruction(clazz, offset, variableInstruction, variableIndex);
|
|
271
|
+
break;
|
|
272
|
+
|
|
273
|
+
case InstructionConstants.OP_DLOAD:
|
|
274
|
+
case InstructionConstants.OP_DLOAD_0:
|
|
275
|
+
case InstructionConstants.OP_DLOAD_1:
|
|
276
|
+
case InstructionConstants.OP_DLOAD_2:
|
|
277
|
+
case InstructionConstants.OP_DLOAD_3:
|
|
278
|
+
replaceDoublePushInstruction(clazz, offset, variableInstruction, variableIndex);
|
|
279
|
+
break;
|
|
280
|
+
|
|
281
|
+
case InstructionConstants.OP_ALOAD:
|
|
282
|
+
case InstructionConstants.OP_ALOAD_0:
|
|
283
|
+
case InstructionConstants.OP_ALOAD_1:
|
|
284
|
+
case InstructionConstants.OP_ALOAD_2:
|
|
285
|
+
case InstructionConstants.OP_ALOAD_3:
|
|
286
|
+
replaceReferencePushInstruction(clazz, offset, variableInstruction);
|
|
287
|
+
break;
|
|
288
|
+
|
|
289
|
+
case InstructionConstants.OP_ASTORE:
|
|
290
|
+
case InstructionConstants.OP_ASTORE_0:
|
|
291
|
+
case InstructionConstants.OP_ASTORE_1:
|
|
292
|
+
case InstructionConstants.OP_ASTORE_2:
|
|
293
|
+
case InstructionConstants.OP_ASTORE_3:
|
|
294
|
+
deleteReferencePopInstruction(clazz, offset, variableInstruction);
|
|
295
|
+
break;
|
|
296
|
+
|
|
297
|
+
case InstructionConstants.OP_RET:
|
|
298
|
+
replaceBranchInstruction(clazz, offset, variableInstruction);
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
public void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction)
|
|
305
|
+
{
|
|
306
|
+
switch (constantInstruction.opcode)
|
|
307
|
+
{
|
|
308
|
+
case InstructionConstants.OP_GETSTATIC:
|
|
309
|
+
case InstructionConstants.OP_GETFIELD:
|
|
310
|
+
replaceAnyPushInstruction(clazz, offset, constantInstruction);
|
|
311
|
+
break;
|
|
312
|
+
|
|
313
|
+
case InstructionConstants.OP_INVOKEVIRTUAL:
|
|
314
|
+
case InstructionConstants.OP_INVOKESPECIAL:
|
|
315
|
+
case InstructionConstants.OP_INVOKESTATIC:
|
|
316
|
+
case InstructionConstants.OP_INVOKEINTERFACE:
|
|
317
|
+
if (constantInstruction.stackPushCount(clazz) > 0 &&
|
|
318
|
+
!sideEffectInstructionChecker.hasSideEffects(clazz,
|
|
319
|
+
method,
|
|
320
|
+
codeAttribute,
|
|
321
|
+
offset,
|
|
322
|
+
constantInstruction))
|
|
323
|
+
{
|
|
324
|
+
replaceAnyPushInstruction(clazz, offset, constantInstruction);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
break;
|
|
328
|
+
|
|
329
|
+
case InstructionConstants.OP_CHECKCAST:
|
|
330
|
+
replaceReferencePushInstruction(clazz, offset, constantInstruction);
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
public void visitBranchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, BranchInstruction branchInstruction)
|
|
337
|
+
{
|
|
338
|
+
switch (branchInstruction.opcode)
|
|
339
|
+
{
|
|
340
|
+
case InstructionConstants.OP_GOTO:
|
|
341
|
+
case InstructionConstants.OP_GOTO_W:
|
|
342
|
+
// Don't replace unconditional branches.
|
|
343
|
+
break;
|
|
344
|
+
|
|
345
|
+
case InstructionConstants.OP_JSR:
|
|
346
|
+
case InstructionConstants.OP_JSR_W:
|
|
347
|
+
replaceJsrInstruction(clazz, offset, branchInstruction);
|
|
348
|
+
break;
|
|
349
|
+
|
|
350
|
+
default:
|
|
351
|
+
replaceBranchInstruction(clazz, offset, branchInstruction);
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
public void visitAnySwitchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SwitchInstruction switchInstruction)
|
|
358
|
+
{
|
|
359
|
+
// First try to simplify it to a simple branch.
|
|
360
|
+
replaceBranchInstruction(clazz, offset, switchInstruction);
|
|
361
|
+
|
|
362
|
+
// Otherwise make sure all branch targets are valid.
|
|
363
|
+
if (!codeAttributeEditor.isModified(offset))
|
|
364
|
+
{
|
|
365
|
+
replaceSwitchInstruction(clazz, offset, switchInstruction);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
// Small utility methods.
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Replaces the push instruction at the given offset by a simpler push
|
|
374
|
+
* instruction, if possible.
|
|
375
|
+
*/
|
|
376
|
+
private void replaceAnyPushInstruction(Clazz clazz,
|
|
377
|
+
int offset,
|
|
378
|
+
Instruction instruction)
|
|
379
|
+
{
|
|
380
|
+
Value pushedValue = partialEvaluator.getStackAfter(offset).getTop(0);
|
|
381
|
+
if (pushedValue.isParticular())
|
|
382
|
+
{
|
|
383
|
+
switch (pushedValue.computationalType())
|
|
384
|
+
{
|
|
385
|
+
case Value.TYPE_INTEGER:
|
|
386
|
+
replaceIntegerPushInstruction(clazz, offset, instruction);
|
|
387
|
+
break;
|
|
388
|
+
case Value.TYPE_LONG:
|
|
389
|
+
replaceLongPushInstruction(clazz, offset, instruction);
|
|
390
|
+
break;
|
|
391
|
+
case Value.TYPE_FLOAT:
|
|
392
|
+
replaceFloatPushInstruction(clazz, offset, instruction);
|
|
393
|
+
break;
|
|
394
|
+
case Value.TYPE_DOUBLE:
|
|
395
|
+
replaceDoublePushInstruction(clazz, offset, instruction);
|
|
396
|
+
break;
|
|
397
|
+
case Value.TYPE_REFERENCE:
|
|
398
|
+
replaceReferencePushInstruction(clazz, offset, instruction);
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Replaces the integer pushing instruction at the given offset by a simpler
|
|
407
|
+
* push instruction, if possible.
|
|
408
|
+
*/
|
|
409
|
+
private void replaceIntegerPushInstruction(Clazz clazz,
|
|
410
|
+
int offset,
|
|
411
|
+
Instruction instruction)
|
|
412
|
+
{
|
|
413
|
+
replaceIntegerPushInstruction(clazz,
|
|
414
|
+
offset,
|
|
415
|
+
instruction,
|
|
416
|
+
partialEvaluator.getVariablesBefore(offset).size());
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Replaces the integer pushing instruction at the given offset by a simpler
|
|
422
|
+
* push instruction, if possible.
|
|
423
|
+
*/
|
|
424
|
+
private void replaceIntegerPushInstruction(Clazz clazz,
|
|
425
|
+
int offset,
|
|
426
|
+
Instruction instruction,
|
|
427
|
+
int maxVariableIndex)
|
|
428
|
+
{
|
|
429
|
+
Value pushedValue = partialEvaluator.getStackAfter(offset).getTop(0);
|
|
430
|
+
if (pushedValue.isParticular())
|
|
431
|
+
{
|
|
432
|
+
int value = pushedValue.integerValue().value();
|
|
433
|
+
if (value << 16 >> 16 == value)
|
|
434
|
+
{
|
|
435
|
+
replaceConstantPushInstruction(clazz,
|
|
436
|
+
offset,
|
|
437
|
+
instruction,
|
|
438
|
+
InstructionConstants.OP_SIPUSH,
|
|
439
|
+
value);
|
|
440
|
+
}
|
|
441
|
+
else
|
|
442
|
+
{
|
|
443
|
+
ConstantPoolEditor constantPoolEditor =
|
|
444
|
+
new ConstantPoolEditor((ProgramClass)clazz);
|
|
445
|
+
|
|
446
|
+
Instruction replacementInstruction =
|
|
447
|
+
new ConstantInstruction(InstructionConstants.OP_LDC,
|
|
448
|
+
constantPoolEditor.addIntegerConstant(value)).shrink();
|
|
449
|
+
|
|
450
|
+
replaceInstruction(clazz, offset, instruction, replacementInstruction);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
else if (pushedValue.isSpecific())
|
|
454
|
+
{
|
|
455
|
+
TracedVariables variables = partialEvaluator.getVariablesBefore(offset);
|
|
456
|
+
for (int variableIndex = 0; variableIndex < maxVariableIndex; variableIndex++)
|
|
457
|
+
{
|
|
458
|
+
if (pushedValue.equals(variables.load(variableIndex)))
|
|
459
|
+
{
|
|
460
|
+
replaceVariablePushInstruction(clazz,
|
|
461
|
+
offset,
|
|
462
|
+
instruction,
|
|
463
|
+
InstructionConstants.OP_ILOAD,
|
|
464
|
+
variableIndex);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Replaces the long pushing instruction at the given offset by a simpler
|
|
473
|
+
* push instruction, if possible.
|
|
474
|
+
*/
|
|
475
|
+
private void replaceLongPushInstruction(Clazz clazz,
|
|
476
|
+
int offset,
|
|
477
|
+
Instruction instruction)
|
|
478
|
+
{
|
|
479
|
+
replaceLongPushInstruction(clazz,
|
|
480
|
+
offset,
|
|
481
|
+
instruction,
|
|
482
|
+
partialEvaluator.getVariablesBefore(offset).size());
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Replaces the long pushing instruction at the given offset by a simpler
|
|
488
|
+
* push instruction, if possible.
|
|
489
|
+
*/
|
|
490
|
+
private void replaceLongPushInstruction(Clazz clazz,
|
|
491
|
+
int offset,
|
|
492
|
+
Instruction instruction,
|
|
493
|
+
int maxVariableIndex)
|
|
494
|
+
{
|
|
495
|
+
Value pushedValue = partialEvaluator.getStackAfter(offset).getTop(0);
|
|
496
|
+
if (pushedValue.isParticular())
|
|
497
|
+
{
|
|
498
|
+
long value = pushedValue.longValue().value();
|
|
499
|
+
if (value == 0L ||
|
|
500
|
+
value == 1L)
|
|
501
|
+
{
|
|
502
|
+
replaceConstantPushInstruction(clazz,
|
|
503
|
+
offset,
|
|
504
|
+
instruction,
|
|
505
|
+
InstructionConstants.OP_LCONST_0,
|
|
506
|
+
(int)value);
|
|
507
|
+
}
|
|
508
|
+
else
|
|
509
|
+
{
|
|
510
|
+
ConstantPoolEditor constantPoolEditor =
|
|
511
|
+
new ConstantPoolEditor((ProgramClass)clazz);
|
|
512
|
+
|
|
513
|
+
Instruction replacementInstruction =
|
|
514
|
+
new ConstantInstruction(InstructionConstants.OP_LDC2_W,
|
|
515
|
+
constantPoolEditor.addLongConstant(value)).shrink();
|
|
516
|
+
|
|
517
|
+
replaceInstruction(clazz, offset, instruction, replacementInstruction);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
else if (pushedValue.isSpecific())
|
|
521
|
+
{
|
|
522
|
+
TracedVariables variables = partialEvaluator.getVariablesBefore(offset);
|
|
523
|
+
for (int variableIndex = 0; variableIndex < maxVariableIndex; variableIndex++)
|
|
524
|
+
{
|
|
525
|
+
if (pushedValue.equals(variables.load(variableIndex)))
|
|
526
|
+
{
|
|
527
|
+
replaceVariablePushInstruction(clazz,
|
|
528
|
+
offset,
|
|
529
|
+
instruction,
|
|
530
|
+
InstructionConstants.OP_LLOAD,
|
|
531
|
+
variableIndex);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Replaces the float pushing instruction at the given offset by a simpler
|
|
540
|
+
* push instruction, if possible.
|
|
541
|
+
*/
|
|
542
|
+
private void replaceFloatPushInstruction(Clazz clazz,
|
|
543
|
+
int offset,
|
|
544
|
+
Instruction instruction)
|
|
545
|
+
{
|
|
546
|
+
replaceFloatPushInstruction(clazz,
|
|
547
|
+
offset,
|
|
548
|
+
instruction,
|
|
549
|
+
partialEvaluator.getVariablesBefore(offset).size());
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Replaces the float pushing instruction at the given offset by a simpler
|
|
555
|
+
* push instruction, if possible.
|
|
556
|
+
*/
|
|
557
|
+
private void replaceFloatPushInstruction(Clazz clazz,
|
|
558
|
+
int offset,
|
|
559
|
+
Instruction instruction,
|
|
560
|
+
int maxVariableIndex)
|
|
561
|
+
{
|
|
562
|
+
Value pushedValue = partialEvaluator.getStackAfter(offset).getTop(0);
|
|
563
|
+
if (pushedValue.isParticular())
|
|
564
|
+
{
|
|
565
|
+
// Make sure to distinguish between +0.0 and -0.0.
|
|
566
|
+
float value = pushedValue.floatValue().value();
|
|
567
|
+
if (value == 0.0f && Float.floatToIntBits(value) == POS_ZERO_FLOAT_BITS ||
|
|
568
|
+
value == 1.0f ||
|
|
569
|
+
value == 2.0f)
|
|
570
|
+
{
|
|
571
|
+
replaceConstantPushInstruction(clazz,
|
|
572
|
+
offset,
|
|
573
|
+
instruction,
|
|
574
|
+
InstructionConstants.OP_FCONST_0,
|
|
575
|
+
(int)value);
|
|
576
|
+
}
|
|
577
|
+
else
|
|
578
|
+
{
|
|
579
|
+
ConstantPoolEditor constantPoolEditor =
|
|
580
|
+
new ConstantPoolEditor((ProgramClass)clazz);
|
|
581
|
+
|
|
582
|
+
Instruction replacementInstruction =
|
|
583
|
+
new ConstantInstruction(InstructionConstants.OP_LDC,
|
|
584
|
+
constantPoolEditor.addFloatConstant(value)).shrink();
|
|
585
|
+
|
|
586
|
+
replaceInstruction(clazz, offset, instruction, replacementInstruction);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
else if (pushedValue.isSpecific())
|
|
590
|
+
{
|
|
591
|
+
TracedVariables variables = partialEvaluator.getVariablesBefore(offset);
|
|
592
|
+
for (int variableIndex = 0; variableIndex < maxVariableIndex; variableIndex++)
|
|
593
|
+
{
|
|
594
|
+
if (pushedValue.equals(variables.load(variableIndex)))
|
|
595
|
+
{
|
|
596
|
+
replaceVariablePushInstruction(clazz,
|
|
597
|
+
offset,
|
|
598
|
+
instruction,
|
|
599
|
+
InstructionConstants.OP_FLOAD,
|
|
600
|
+
variableIndex);
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* Replaces the double pushing instruction at the given offset by a simpler
|
|
609
|
+
* push instruction, if possible.
|
|
610
|
+
*/
|
|
611
|
+
private void replaceDoublePushInstruction(Clazz clazz,
|
|
612
|
+
int offset,
|
|
613
|
+
Instruction instruction)
|
|
614
|
+
{
|
|
615
|
+
replaceDoublePushInstruction(clazz,
|
|
616
|
+
offset,
|
|
617
|
+
instruction,
|
|
618
|
+
partialEvaluator.getVariablesBefore(offset).size());
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Replaces the double pushing instruction at the given offset by a simpler
|
|
624
|
+
* push instruction, if possible.
|
|
625
|
+
*/
|
|
626
|
+
private void replaceDoublePushInstruction(Clazz clazz,
|
|
627
|
+
int offset,
|
|
628
|
+
Instruction instruction,
|
|
629
|
+
int maxVariableIndex)
|
|
630
|
+
{
|
|
631
|
+
Value pushedValue = partialEvaluator.getStackAfter(offset).getTop(0);
|
|
632
|
+
if (pushedValue.isParticular())
|
|
633
|
+
{
|
|
634
|
+
// Make sure to distinguish between +0.0 and -0.0.
|
|
635
|
+
double value = pushedValue.doubleValue().value();
|
|
636
|
+
if (value == 0.0 && Double.doubleToLongBits(value) == POS_ZERO_DOUBLE_BITS ||
|
|
637
|
+
value == 1.0)
|
|
638
|
+
{
|
|
639
|
+
replaceConstantPushInstruction(clazz,
|
|
640
|
+
offset,
|
|
641
|
+
instruction,
|
|
642
|
+
InstructionConstants.OP_DCONST_0,
|
|
643
|
+
(int)value);
|
|
644
|
+
}
|
|
645
|
+
else
|
|
646
|
+
{
|
|
647
|
+
ConstantPoolEditor constantPoolEditor =
|
|
648
|
+
new ConstantPoolEditor((ProgramClass)clazz);
|
|
649
|
+
|
|
650
|
+
Instruction replacementInstruction =
|
|
651
|
+
new ConstantInstruction(InstructionConstants.OP_LDC2_W,
|
|
652
|
+
constantPoolEditor.addDoubleConstant(value)).shrink();
|
|
653
|
+
|
|
654
|
+
replaceInstruction(clazz, offset, instruction, replacementInstruction);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
else if (pushedValue.isSpecific())
|
|
658
|
+
{
|
|
659
|
+
TracedVariables variables = partialEvaluator.getVariablesBefore(offset);
|
|
660
|
+
for (int variableIndex = 0; variableIndex < maxVariableIndex; variableIndex++)
|
|
661
|
+
{
|
|
662
|
+
if (pushedValue.equals(variables.load(variableIndex)))
|
|
663
|
+
{
|
|
664
|
+
replaceVariablePushInstruction(clazz,
|
|
665
|
+
offset,
|
|
666
|
+
instruction,
|
|
667
|
+
InstructionConstants.OP_DLOAD,
|
|
668
|
+
variableIndex);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
/**
|
|
676
|
+
* Replaces the reference pushing instruction at the given offset by a
|
|
677
|
+
* simpler push instruction, if possible.
|
|
678
|
+
*/
|
|
679
|
+
private void replaceReferencePushInstruction(Clazz clazz,
|
|
680
|
+
int offset,
|
|
681
|
+
Instruction instruction)
|
|
682
|
+
{
|
|
683
|
+
Value pushedValue = partialEvaluator.getStackAfter(offset).getTop(0);
|
|
684
|
+
if (pushedValue.isParticular())
|
|
685
|
+
{
|
|
686
|
+
// A reference value can only be specific if it is null.
|
|
687
|
+
replaceConstantPushInstruction(clazz,
|
|
688
|
+
offset,
|
|
689
|
+
instruction,
|
|
690
|
+
InstructionConstants.OP_ACONST_NULL,
|
|
691
|
+
0);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Replaces the instruction at a given offset by a given push instruction
|
|
698
|
+
* of a constant.
|
|
699
|
+
*/
|
|
700
|
+
private void replaceConstantPushInstruction(Clazz clazz,
|
|
701
|
+
int offset,
|
|
702
|
+
Instruction instruction,
|
|
703
|
+
byte replacementOpcode,
|
|
704
|
+
int value)
|
|
705
|
+
{
|
|
706
|
+
Instruction replacementInstruction =
|
|
707
|
+
new SimpleInstruction(replacementOpcode, value).shrink();
|
|
708
|
+
|
|
709
|
+
replaceInstruction(clazz, offset, instruction, replacementInstruction);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Replaces the instruction at a given offset by a given push instruction
|
|
715
|
+
* of a variable.
|
|
716
|
+
*/
|
|
717
|
+
private void replaceVariablePushInstruction(Clazz clazz,
|
|
718
|
+
int offset,
|
|
719
|
+
Instruction instruction,
|
|
720
|
+
byte replacementOpcode,
|
|
721
|
+
int variableIndex)
|
|
722
|
+
{
|
|
723
|
+
Instruction replacementInstruction =
|
|
724
|
+
new VariableInstruction(replacementOpcode, variableIndex).shrink();
|
|
725
|
+
|
|
726
|
+
replaceInstruction(clazz, offset, instruction, replacementInstruction);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
/**
|
|
731
|
+
* Replaces the given 'jsr' instruction by a simpler branch instruction,
|
|
732
|
+
* if it jumps to a subroutine that doesn't return or a subroutine that
|
|
733
|
+
* is only called from one place.
|
|
734
|
+
*/
|
|
735
|
+
private void replaceJsrInstruction(Clazz clazz,
|
|
736
|
+
int offset,
|
|
737
|
+
BranchInstruction branchInstruction)
|
|
738
|
+
{
|
|
739
|
+
// Is the subroutine ever returning?
|
|
740
|
+
int subroutineStart = offset + branchInstruction.branchOffset;
|
|
741
|
+
if (!partialEvaluator.isSubroutineReturning(subroutineStart) ||
|
|
742
|
+
partialEvaluator.branchOrigins(subroutineStart).instructionOffsetCount() == 1)
|
|
743
|
+
{
|
|
744
|
+
// All 'jsr' instructions to this subroutine can be replaced
|
|
745
|
+
// by unconditional branch instructions.
|
|
746
|
+
replaceBranchInstruction(clazz, offset, branchInstruction);
|
|
747
|
+
}
|
|
748
|
+
else if (!partialEvaluator.isTraced(offset + branchInstruction.length(offset)))
|
|
749
|
+
{
|
|
750
|
+
// We have to make sure the instruction after this 'jsr'
|
|
751
|
+
// instruction is valid, even if it is never reached.
|
|
752
|
+
replaceByInfiniteLoop(clazz, offset + branchInstruction.length(offset), branchInstruction);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
/**
|
|
758
|
+
* Deletes the reference popping instruction at the given offset, if
|
|
759
|
+
* it is at the start of a subroutine that doesn't return or a subroutine
|
|
760
|
+
* that is only called from one place.
|
|
761
|
+
*/
|
|
762
|
+
private void deleteReferencePopInstruction(Clazz clazz,
|
|
763
|
+
int offset,
|
|
764
|
+
Instruction instruction)
|
|
765
|
+
{
|
|
766
|
+
if (partialEvaluator.isSubroutineStart(offset) &&
|
|
767
|
+
(!partialEvaluator.isSubroutineReturning(offset) ||
|
|
768
|
+
partialEvaluator.branchOrigins(offset).instructionOffsetCount() == 1))
|
|
769
|
+
{
|
|
770
|
+
if (DEBUG) System.out.println(" Deleting store of subroutine return address "+instruction.toString(offset));
|
|
771
|
+
|
|
772
|
+
// A reference value can only be specific if it is null.
|
|
773
|
+
codeAttributeEditor.deleteInstruction(offset);
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* Deletes the given branch instruction, or replaces it by a simpler branch
|
|
780
|
+
* instruction, if possible.
|
|
781
|
+
*/
|
|
782
|
+
private void replaceBranchInstruction(Clazz clazz,
|
|
783
|
+
int offset,
|
|
784
|
+
Instruction instruction)
|
|
785
|
+
{
|
|
786
|
+
InstructionOffsetValue branchTargets = partialEvaluator.branchTargets(offset);
|
|
787
|
+
|
|
788
|
+
// Is there exactly one branch target (not from a goto or jsr)?
|
|
789
|
+
if (branchTargets != null &&
|
|
790
|
+
branchTargets.instructionOffsetCount() == 1)
|
|
791
|
+
{
|
|
792
|
+
// Is it branching to the next instruction?
|
|
793
|
+
int branchOffset = branchTargets.instructionOffset(0) - offset;
|
|
794
|
+
if (branchOffset == instruction.length(offset))
|
|
795
|
+
{
|
|
796
|
+
if (DEBUG) System.out.println(" Ignoring zero branch instruction at ["+offset+"]");
|
|
797
|
+
}
|
|
798
|
+
else
|
|
799
|
+
{
|
|
800
|
+
// Replace the branch instruction by a simple branch instruction.
|
|
801
|
+
Instruction replacementInstruction =
|
|
802
|
+
new BranchInstruction(InstructionConstants.OP_GOTO_W,
|
|
803
|
+
branchOffset).shrink();
|
|
804
|
+
|
|
805
|
+
replaceInstruction(clazz, offset, instruction, replacementInstruction);
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* Makes sure all branch targets of the given switch instruction are valid.
|
|
813
|
+
*/
|
|
814
|
+
private void replaceSwitchInstruction(Clazz clazz,
|
|
815
|
+
int offset,
|
|
816
|
+
SwitchInstruction switchInstruction)
|
|
817
|
+
{
|
|
818
|
+
// Get the actual branch targets.
|
|
819
|
+
InstructionOffsetValue branchTargets = partialEvaluator.branchTargets(offset);
|
|
820
|
+
|
|
821
|
+
// Get an offset that can serve as a valid default offset.
|
|
822
|
+
int defaultOffset =
|
|
823
|
+
branchTargets.instructionOffset(branchTargets.instructionOffsetCount()-1) -
|
|
824
|
+
offset;
|
|
825
|
+
|
|
826
|
+
Instruction replacementInstruction = null;
|
|
827
|
+
|
|
828
|
+
// Check the jump offsets.
|
|
829
|
+
int[] jumpOffsets = switchInstruction.jumpOffsets;
|
|
830
|
+
for (int index = 0; index < jumpOffsets.length; index++)
|
|
831
|
+
{
|
|
832
|
+
if (!branchTargets.contains(offset + jumpOffsets[index]))
|
|
833
|
+
{
|
|
834
|
+
// Replace the unused offset.
|
|
835
|
+
jumpOffsets[index] = defaultOffset;
|
|
836
|
+
|
|
837
|
+
// Remember to replace the instruction.
|
|
838
|
+
replacementInstruction = switchInstruction;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
// Check the default offset.
|
|
843
|
+
if (!branchTargets.contains(offset + switchInstruction.defaultOffset))
|
|
844
|
+
{
|
|
845
|
+
// Replace the unused offset.
|
|
846
|
+
switchInstruction.defaultOffset = defaultOffset;
|
|
847
|
+
|
|
848
|
+
// Remember to replace the instruction.
|
|
849
|
+
replacementInstruction = switchInstruction;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
if (replacementInstruction != null)
|
|
853
|
+
{
|
|
854
|
+
replaceInstruction(clazz, offset, switchInstruction, replacementInstruction);
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
/**
|
|
860
|
+
* Replaces the given instruction by an infinite loop.
|
|
861
|
+
*/
|
|
862
|
+
private void replaceByInfiniteLoop(Clazz clazz,
|
|
863
|
+
int offset,
|
|
864
|
+
Instruction instruction)
|
|
865
|
+
{
|
|
866
|
+
// Replace the instruction by an infinite loop.
|
|
867
|
+
Instruction replacementInstruction =
|
|
868
|
+
new BranchInstruction(InstructionConstants.OP_GOTO, 0);
|
|
869
|
+
|
|
870
|
+
if (DEBUG) System.out.println(" Replacing unreachable instruction by infinite loop "+replacementInstruction.toString(offset));
|
|
871
|
+
|
|
872
|
+
codeAttributeEditor.replaceInstruction(offset, replacementInstruction);
|
|
873
|
+
|
|
874
|
+
// Visit the instruction, if required.
|
|
875
|
+
if (extraInstructionVisitor != null)
|
|
876
|
+
{
|
|
877
|
+
// Note: we're not passing the right arguments for now, knowing that
|
|
878
|
+
// they aren't used anyway.
|
|
879
|
+
instruction.accept(clazz, null, null, offset, extraInstructionVisitor);
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
|
|
884
|
+
/**
|
|
885
|
+
* Replaces the instruction at a given offset by a given push instruction.
|
|
886
|
+
*/
|
|
887
|
+
private void replaceInstruction(Clazz clazz,
|
|
888
|
+
int offset,
|
|
889
|
+
Instruction instruction,
|
|
890
|
+
Instruction replacementInstruction)
|
|
891
|
+
{
|
|
892
|
+
// Pop unneeded stack entries if necessary.
|
|
893
|
+
int popCount =
|
|
894
|
+
instruction.stackPopCount(clazz) -
|
|
895
|
+
replacementInstruction.stackPopCount(clazz);
|
|
896
|
+
|
|
897
|
+
insertPopInstructions(offset, popCount);
|
|
898
|
+
|
|
899
|
+
if (DEBUG) System.out.println(" Replacing instruction "+instruction.toString(offset)+" -> "+replacementInstruction.toString()+(popCount == 0 ? "" : " ("+popCount+" pops)"));
|
|
900
|
+
|
|
901
|
+
codeAttributeEditor.replaceInstruction(offset, replacementInstruction);
|
|
902
|
+
|
|
903
|
+
// Visit the instruction, if required.
|
|
904
|
+
if (extraInstructionVisitor != null)
|
|
905
|
+
{
|
|
906
|
+
// Note: we're not passing the right arguments for now, knowing that
|
|
907
|
+
// they aren't used anyway.
|
|
908
|
+
instruction.accept(clazz, null, null, offset, extraInstructionVisitor);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
/**
|
|
914
|
+
* Pops the given number of stack entries before the instruction at the
|
|
915
|
+
* given offset.
|
|
916
|
+
*/
|
|
917
|
+
private void insertPopInstructions(int offset, int popCount)
|
|
918
|
+
{
|
|
919
|
+
switch (popCount)
|
|
920
|
+
{
|
|
921
|
+
case 0:
|
|
922
|
+
{
|
|
923
|
+
break;
|
|
924
|
+
}
|
|
925
|
+
case 1:
|
|
926
|
+
{
|
|
927
|
+
// Insert a single pop instruction.
|
|
928
|
+
Instruction popInstruction =
|
|
929
|
+
new SimpleInstruction(InstructionConstants.OP_POP);
|
|
930
|
+
|
|
931
|
+
codeAttributeEditor.insertBeforeInstruction(offset,
|
|
932
|
+
popInstruction);
|
|
933
|
+
break;
|
|
934
|
+
}
|
|
935
|
+
case 2:
|
|
936
|
+
{
|
|
937
|
+
// Insert a single pop2 instruction.
|
|
938
|
+
Instruction popInstruction =
|
|
939
|
+
new SimpleInstruction(InstructionConstants.OP_POP2);
|
|
940
|
+
|
|
941
|
+
codeAttributeEditor.insertBeforeInstruction(offset,
|
|
942
|
+
popInstruction);
|
|
943
|
+
break;
|
|
944
|
+
}
|
|
945
|
+
default:
|
|
946
|
+
{
|
|
947
|
+
// Insert the specified number of pop instructions.
|
|
948
|
+
Instruction[] popInstructions =
|
|
949
|
+
new Instruction[popCount / 2 + popCount % 2];
|
|
950
|
+
|
|
951
|
+
Instruction popInstruction =
|
|
952
|
+
new SimpleInstruction(InstructionConstants.OP_POP2);
|
|
953
|
+
|
|
954
|
+
for (int index = 0; index < popCount / 2; index++)
|
|
955
|
+
{
|
|
956
|
+
popInstructions[index] = popInstruction;
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
if (popCount % 2 == 1)
|
|
960
|
+
{
|
|
961
|
+
popInstruction =
|
|
962
|
+
new SimpleInstruction(InstructionConstants.OP_POP);
|
|
963
|
+
|
|
964
|
+
popInstructions[popCount / 2] = popInstruction;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
codeAttributeEditor.insertBeforeInstruction(offset,
|
|
968
|
+
popInstructions);
|
|
969
|
+
break;
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
}
|