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,103 @@
|
|
|
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.peephole;
|
|
22
|
+
|
|
23
|
+
import proguard.classfile.*;
|
|
24
|
+
import proguard.classfile.editor.MethodInvocationFixer;
|
|
25
|
+
import proguard.classfile.util.*;
|
|
26
|
+
import proguard.classfile.visitor.MemberVisitor;
|
|
27
|
+
import proguard.optimize.info.NonPrivateMemberMarker;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* This MemberVisitor makes all class members that it visits private, unless
|
|
31
|
+
* they have been marked by a NonPrivateMemberMarker. The invocations of
|
|
32
|
+
* privatized methods still have to be fixed.
|
|
33
|
+
*
|
|
34
|
+
* @see NonPrivateMemberMarker
|
|
35
|
+
* @see MethodInvocationFixer
|
|
36
|
+
* @author Eric Lafortune
|
|
37
|
+
*/
|
|
38
|
+
public class MemberPrivatizer
|
|
39
|
+
extends SimplifiedVisitor
|
|
40
|
+
implements MemberVisitor
|
|
41
|
+
{
|
|
42
|
+
private final MemberVisitor extraMemberVisitor;
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Creates a new MemberPrivatizer.
|
|
47
|
+
*/
|
|
48
|
+
public MemberPrivatizer()
|
|
49
|
+
{
|
|
50
|
+
this(null);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Creates a new MemberPrivatizer.
|
|
56
|
+
* @param extraMemberVisitor an optional extra visitor for all privatized
|
|
57
|
+
* class members.
|
|
58
|
+
*/
|
|
59
|
+
public MemberPrivatizer(MemberVisitor extraMemberVisitor)
|
|
60
|
+
{
|
|
61
|
+
this.extraMemberVisitor = extraMemberVisitor;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
// Implementations for MemberVisitor.
|
|
66
|
+
|
|
67
|
+
public void visitProgramField(ProgramClass programClass, ProgramField programField)
|
|
68
|
+
{
|
|
69
|
+
// Is the field unmarked?
|
|
70
|
+
if (NonPrivateMemberMarker.canBeMadePrivate(programField))
|
|
71
|
+
{
|
|
72
|
+
// Make the field private.
|
|
73
|
+
programField.u2accessFlags =
|
|
74
|
+
AccessUtil.replaceAccessFlags(programField.u2accessFlags,
|
|
75
|
+
ClassConstants.INTERNAL_ACC_PRIVATE);
|
|
76
|
+
|
|
77
|
+
// Visit the field, if required.
|
|
78
|
+
if (extraMemberVisitor != null)
|
|
79
|
+
{
|
|
80
|
+
extraMemberVisitor.visitProgramField(programClass, programField);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
|
|
87
|
+
{
|
|
88
|
+
// Is the method unmarked?
|
|
89
|
+
if (NonPrivateMemberMarker.canBeMadePrivate(programMethod))
|
|
90
|
+
{
|
|
91
|
+
// Make the method private.
|
|
92
|
+
programMethod.u2accessFlags =
|
|
93
|
+
AccessUtil.replaceAccessFlags(programMethod.u2accessFlags,
|
|
94
|
+
ClassConstants.INTERNAL_ACC_PRIVATE);
|
|
95
|
+
|
|
96
|
+
// Visit the method, if required.
|
|
97
|
+
if (extraMemberVisitor != null)
|
|
98
|
+
{
|
|
99
|
+
extraMemberVisitor.visitProgramMethod(programClass, programMethod);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
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.peephole;
|
|
22
|
+
|
|
23
|
+
import proguard.classfile.*;
|
|
24
|
+
import proguard.classfile.util.*;
|
|
25
|
+
import proguard.classfile.visitor.*;
|
|
26
|
+
import proguard.optimize.KeepMarker;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* This <code>MemberVisitor</code> makes the program methods that it visits
|
|
30
|
+
* final, if possible.
|
|
31
|
+
*
|
|
32
|
+
* @author Eric Lafortune
|
|
33
|
+
*/
|
|
34
|
+
public class MethodFinalizer
|
|
35
|
+
extends SimplifiedVisitor
|
|
36
|
+
implements MemberVisitor
|
|
37
|
+
{
|
|
38
|
+
private final MemberVisitor extraMemberVisitor;
|
|
39
|
+
|
|
40
|
+
private final MemberFinder memberFinder = new MemberFinder();
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Creates a new ClassFinalizer.
|
|
45
|
+
*/
|
|
46
|
+
public MethodFinalizer()
|
|
47
|
+
{
|
|
48
|
+
this(null);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Creates a new ClassFinalizer.
|
|
54
|
+
* @param extraMemberVisitor an optional extra visitor for all finalized
|
|
55
|
+
* methods.
|
|
56
|
+
*/
|
|
57
|
+
public MethodFinalizer(MemberVisitor extraMemberVisitor)
|
|
58
|
+
{
|
|
59
|
+
this.extraMemberVisitor = extraMemberVisitor;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
// Implementations for MemberVisitor.
|
|
64
|
+
|
|
65
|
+
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
|
|
66
|
+
{
|
|
67
|
+
String name = programMethod.getName(programClass);
|
|
68
|
+
|
|
69
|
+
// If the method is not already private/static/final/abstract,
|
|
70
|
+
// and it is not a constructor,
|
|
71
|
+
// and its class is final,
|
|
72
|
+
// or it is not being kept and it is not overridden,
|
|
73
|
+
// then make it final.
|
|
74
|
+
if ((programMethod.u2accessFlags & (ClassConstants.INTERNAL_ACC_PRIVATE |
|
|
75
|
+
ClassConstants.INTERNAL_ACC_STATIC |
|
|
76
|
+
ClassConstants.INTERNAL_ACC_FINAL |
|
|
77
|
+
ClassConstants.INTERNAL_ACC_ABSTRACT)) == 0 &&
|
|
78
|
+
!name.equals(ClassConstants.INTERNAL_METHOD_NAME_INIT) &&
|
|
79
|
+
((programClass.u2accessFlags & ClassConstants.INTERNAL_ACC_FINAL) != 0 ||
|
|
80
|
+
(!KeepMarker.isKept(programMethod) &&
|
|
81
|
+
(programClass.subClasses == null ||
|
|
82
|
+
!memberFinder.isOverriden(programClass, programMethod)))))
|
|
83
|
+
{
|
|
84
|
+
programMethod.u2accessFlags |= ClassConstants.INTERNAL_ACC_FINAL;
|
|
85
|
+
|
|
86
|
+
// Visit the method, if required.
|
|
87
|
+
if (extraMemberVisitor != null)
|
|
88
|
+
{
|
|
89
|
+
extraMemberVisitor.visitProgramMethod(programClass, programMethod);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,597 @@
|
|
|
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.peephole;
|
|
22
|
+
|
|
23
|
+
import proguard.classfile.*;
|
|
24
|
+
import proguard.classfile.attribute.*;
|
|
25
|
+
import proguard.classfile.attribute.visitor.*;
|
|
26
|
+
import proguard.classfile.constant.*;
|
|
27
|
+
import proguard.classfile.constant.visitor.ConstantVisitor;
|
|
28
|
+
import proguard.classfile.editor.*;
|
|
29
|
+
import proguard.classfile.instruction.*;
|
|
30
|
+
import proguard.classfile.instruction.visitor.InstructionVisitor;
|
|
31
|
+
import proguard.classfile.util.*;
|
|
32
|
+
import proguard.classfile.visitor.*;
|
|
33
|
+
import proguard.optimize.info.*;
|
|
34
|
+
|
|
35
|
+
import java.util.*;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This AttributeVisitor inlines short methods or methods that are only invoked
|
|
39
|
+
* once, in the code attributes that it visits.
|
|
40
|
+
*
|
|
41
|
+
* @author Eric Lafortune
|
|
42
|
+
*/
|
|
43
|
+
public class MethodInliner
|
|
44
|
+
extends SimplifiedVisitor
|
|
45
|
+
implements AttributeVisitor,
|
|
46
|
+
InstructionVisitor,
|
|
47
|
+
ConstantVisitor,
|
|
48
|
+
MemberVisitor
|
|
49
|
+
{
|
|
50
|
+
private static final int MAXIMUM_INLINED_CODE_LENGTH = Integer.parseInt(System.getProperty("maximum.inlined.code.length", "8"));
|
|
51
|
+
private static final int MAXIMUM_RESULTING_CODE_LENGTH_JSE = Integer.parseInt(System.getProperty("maximum.resulting.code.length", "7000"));
|
|
52
|
+
private static final int MAXIMUM_RESULTING_CODE_LENGTH_JME = Integer.parseInt(System.getProperty("maximum.resulting.code.length", "2000"));
|
|
53
|
+
private static final int MAXIMUM_CODE_EXPANSION = 2;
|
|
54
|
+
private static final int MAXIMUM_EXTRA_CODE_LENGTH = 128;
|
|
55
|
+
|
|
56
|
+
//*
|
|
57
|
+
private static final boolean DEBUG = false;
|
|
58
|
+
/*/
|
|
59
|
+
private static boolean DEBUG = true;
|
|
60
|
+
//*/
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
private final boolean microEdition;
|
|
64
|
+
private final boolean allowAccessModification;
|
|
65
|
+
private final boolean inlineSingleInvocations;
|
|
66
|
+
private final InstructionVisitor extraInlinedInvocationVisitor;
|
|
67
|
+
|
|
68
|
+
private final CodeAttributeComposer codeAttributeComposer = new CodeAttributeComposer();
|
|
69
|
+
private final AccessMethodMarker accessMethodMarker = new AccessMethodMarker();
|
|
70
|
+
private final CatchExceptionMarker catchExceptionMarker = new CatchExceptionMarker();
|
|
71
|
+
private final StackSizeComputer stackSizeComputer = new StackSizeComputer();
|
|
72
|
+
|
|
73
|
+
private ProgramClass targetClass;
|
|
74
|
+
private ProgramMethod targetMethod;
|
|
75
|
+
private ConstantAdder constantAdder;
|
|
76
|
+
private ExceptionInfoAdder exceptionInfoAdder;
|
|
77
|
+
private int estimatedResultingCodeLength;
|
|
78
|
+
private boolean inlining;
|
|
79
|
+
private Stack inliningMethods = new Stack();
|
|
80
|
+
private boolean emptyInvokingStack;
|
|
81
|
+
private int uninitializedObjectCount;
|
|
82
|
+
private int variableOffset;
|
|
83
|
+
private boolean inlined;
|
|
84
|
+
private boolean inlinedAny;
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Creates a new MethodInliner.
|
|
89
|
+
* @param microEdition indicates whether the resulting code is
|
|
90
|
+
* targeted at Java Micro Edition.
|
|
91
|
+
* @param allowAccessModification indicates whether the access modifiers of
|
|
92
|
+
* classes and class members can be changed
|
|
93
|
+
* in order to inline methods.
|
|
94
|
+
* @param inlineSingleInvocations indicates whether the single invocations
|
|
95
|
+
* should be inlined, or, alternatively,
|
|
96
|
+
* short methods.
|
|
97
|
+
*/
|
|
98
|
+
public MethodInliner(boolean microEdition,
|
|
99
|
+
boolean allowAccessModification,
|
|
100
|
+
boolean inlineSingleInvocations)
|
|
101
|
+
{
|
|
102
|
+
this(microEdition,
|
|
103
|
+
allowAccessModification,
|
|
104
|
+
inlineSingleInvocations,
|
|
105
|
+
null);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Creates a new MethodInliner.
|
|
111
|
+
* @param microEdition indicates whether the resulting code is
|
|
112
|
+
* targeted at Java Micro Edition.
|
|
113
|
+
* @param allowAccessModification indicates whether the access modifiers of
|
|
114
|
+
* classes and class members can be changed
|
|
115
|
+
* in order to inline methods.
|
|
116
|
+
* @param inlineSingleInvocations indicates whether the single invocations
|
|
117
|
+
* should be inlined, or, alternatively,
|
|
118
|
+
* short methods.
|
|
119
|
+
* @param extraInlinedInvocationVisitor an optional extra visitor for all
|
|
120
|
+
* inlined invocation instructions.
|
|
121
|
+
*/
|
|
122
|
+
public MethodInliner(boolean microEdition,
|
|
123
|
+
boolean allowAccessModification,
|
|
124
|
+
boolean inlineSingleInvocations,
|
|
125
|
+
InstructionVisitor extraInlinedInvocationVisitor)
|
|
126
|
+
{
|
|
127
|
+
this.microEdition = microEdition;
|
|
128
|
+
this.allowAccessModification = allowAccessModification;
|
|
129
|
+
this.inlineSingleInvocations = inlineSingleInvocations;
|
|
130
|
+
this.extraInlinedInvocationVisitor = extraInlinedInvocationVisitor;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
// Implementations for AttributeVisitor.
|
|
135
|
+
|
|
136
|
+
public void visitAnyAttribute(Clazz clazz, Attribute attribute) {}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
|
140
|
+
{
|
|
141
|
+
// TODO: Remove this when the method inliner has stabilized.
|
|
142
|
+
// Catch any unexpected exceptions from the actual visiting method.
|
|
143
|
+
try
|
|
144
|
+
{
|
|
145
|
+
// Process the code.
|
|
146
|
+
visitCodeAttribute0(clazz, method, codeAttribute);
|
|
147
|
+
}
|
|
148
|
+
catch (RuntimeException ex)
|
|
149
|
+
{
|
|
150
|
+
System.err.println("Unexpected error while inlining method:");
|
|
151
|
+
System.err.println(" Target class = ["+targetClass.getName()+"]");
|
|
152
|
+
System.err.println(" Target method = ["+targetMethod.getName(targetClass)+targetMethod.getDescriptor(targetClass)+"]");
|
|
153
|
+
if (inlining)
|
|
154
|
+
{
|
|
155
|
+
System.err.println(" Inlined class = ["+clazz.getName()+"]");
|
|
156
|
+
System.err.println(" Inlined method = ["+method.getName(clazz)+method.getDescriptor(clazz)+"]");
|
|
157
|
+
}
|
|
158
|
+
System.err.println(" Exception = ["+ex.getClass().getName()+"] ("+ex.getMessage()+")");
|
|
159
|
+
System.err.println("Not inlining this method");
|
|
160
|
+
|
|
161
|
+
if (DEBUG)
|
|
162
|
+
{
|
|
163
|
+
targetMethod.accept(targetClass, new ClassPrinter());
|
|
164
|
+
if (inlining)
|
|
165
|
+
{
|
|
166
|
+
method.accept(clazz, new ClassPrinter());
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
throw ex;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
public void visitCodeAttribute0(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
|
176
|
+
{
|
|
177
|
+
if (!inlining)
|
|
178
|
+
{
|
|
179
|
+
// codeAttributeComposer.DEBUG = DEBUG =
|
|
180
|
+
// clazz.getName().equals("abc/Def") &&
|
|
181
|
+
// method.getName(clazz).equals("abc");
|
|
182
|
+
|
|
183
|
+
targetClass = (ProgramClass)clazz;
|
|
184
|
+
targetMethod = (ProgramMethod)method;
|
|
185
|
+
constantAdder = new ConstantAdder(targetClass);
|
|
186
|
+
exceptionInfoAdder = new ExceptionInfoAdder(targetClass, codeAttributeComposer);
|
|
187
|
+
estimatedResultingCodeLength = codeAttribute.u4codeLength;
|
|
188
|
+
inliningMethods.clear();
|
|
189
|
+
uninitializedObjectCount = method.getName(clazz).equals(ClassConstants.INTERNAL_METHOD_NAME_INIT) ? 1 : 0;
|
|
190
|
+
inlinedAny = false;
|
|
191
|
+
codeAttributeComposer.reset();
|
|
192
|
+
stackSizeComputer.visitCodeAttribute(clazz, method, codeAttribute);
|
|
193
|
+
|
|
194
|
+
// Append the body of the code.
|
|
195
|
+
copyCode(clazz, method, codeAttribute);
|
|
196
|
+
|
|
197
|
+
targetClass = null;
|
|
198
|
+
targetMethod = null;
|
|
199
|
+
constantAdder = null;
|
|
200
|
+
|
|
201
|
+
// Update the code attribute if any code has been inlined.
|
|
202
|
+
if (inlinedAny)
|
|
203
|
+
{
|
|
204
|
+
codeAttributeComposer.visitCodeAttribute(clazz, method, codeAttribute);
|
|
205
|
+
|
|
206
|
+
// Update the accessing flags.
|
|
207
|
+
codeAttribute.instructionsAccept(clazz, method, accessMethodMarker);
|
|
208
|
+
|
|
209
|
+
// Update the exception catching flags.
|
|
210
|
+
catchExceptionMarker.visitCodeAttribute(clazz, method, codeAttribute);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Only inline the method if it is invoked once or if it is short.
|
|
215
|
+
else if ((inlineSingleInvocations ?
|
|
216
|
+
MethodInvocationMarker.getInvocationCount(method) == 1 :
|
|
217
|
+
codeAttribute.u4codeLength <= MAXIMUM_INLINED_CODE_LENGTH) &&
|
|
218
|
+
estimatedResultingCodeLength + codeAttribute.u4codeLength <
|
|
219
|
+
(microEdition ?
|
|
220
|
+
MAXIMUM_RESULTING_CODE_LENGTH_JME :
|
|
221
|
+
MAXIMUM_RESULTING_CODE_LENGTH_JSE))
|
|
222
|
+
{
|
|
223
|
+
if (DEBUG)
|
|
224
|
+
{
|
|
225
|
+
System.out.println("MethodInliner: inlining ["+
|
|
226
|
+
clazz.getName()+"."+method.getName(clazz)+method.getDescriptor(clazz)+"] in ["+
|
|
227
|
+
targetClass.getName()+"."+targetMethod.getName(targetClass)+targetMethod.getDescriptor(targetClass)+"]");
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Ignore the removal of the original method invocation,
|
|
231
|
+
// the addition of the parameter setup, and
|
|
232
|
+
// the modification of a few inlined instructions.
|
|
233
|
+
estimatedResultingCodeLength += codeAttribute.u4codeLength;
|
|
234
|
+
|
|
235
|
+
// Append instructions to store the parameters.
|
|
236
|
+
storeParameters(clazz, method);
|
|
237
|
+
|
|
238
|
+
// Inline the body of the code.
|
|
239
|
+
copyCode(clazz, method, codeAttribute);
|
|
240
|
+
|
|
241
|
+
inlined = true;
|
|
242
|
+
inlinedAny = true;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Appends instructions to pop the parameters for the given method, storing
|
|
249
|
+
* them in new local variables.
|
|
250
|
+
*/
|
|
251
|
+
private void storeParameters(Clazz clazz, Method method)
|
|
252
|
+
{
|
|
253
|
+
String descriptor = method.getDescriptor(clazz);
|
|
254
|
+
|
|
255
|
+
boolean isStatic =
|
|
256
|
+
(method.getAccessFlags() & ClassConstants.INTERNAL_ACC_STATIC) != 0;
|
|
257
|
+
|
|
258
|
+
// Count the number of parameters, taking into account their categories.
|
|
259
|
+
int parameterCount = ClassUtil.internalMethodParameterCount(descriptor);
|
|
260
|
+
int parameterSize = ClassUtil.internalMethodParameterSize(descriptor);
|
|
261
|
+
int parameterOffset = isStatic ? 0 : 1;
|
|
262
|
+
|
|
263
|
+
// Store the parameter types.
|
|
264
|
+
String[] parameterTypes = new String[parameterSize];
|
|
265
|
+
|
|
266
|
+
InternalTypeEnumeration internalTypeEnumeration =
|
|
267
|
+
new InternalTypeEnumeration(descriptor);
|
|
268
|
+
|
|
269
|
+
for (int parameterIndex = 0; parameterIndex < parameterSize; parameterIndex++)
|
|
270
|
+
{
|
|
271
|
+
String parameterType = internalTypeEnumeration.nextType();
|
|
272
|
+
parameterTypes[parameterIndex] = parameterType;
|
|
273
|
+
if (ClassUtil.internalTypeSize(parameterType) == 2)
|
|
274
|
+
{
|
|
275
|
+
parameterIndex++;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
codeAttributeComposer.beginCodeFragment(parameterSize+1);
|
|
280
|
+
|
|
281
|
+
// Go over the parameter types backward, storing the stack entries
|
|
282
|
+
// in their corresponding variables.
|
|
283
|
+
for (int parameterIndex = parameterSize-1; parameterIndex >= 0; parameterIndex--)
|
|
284
|
+
{
|
|
285
|
+
String parameterType = parameterTypes[parameterIndex];
|
|
286
|
+
if (parameterType != null)
|
|
287
|
+
{
|
|
288
|
+
byte opcode;
|
|
289
|
+
switch (parameterType.charAt(0))
|
|
290
|
+
{
|
|
291
|
+
case ClassConstants.INTERNAL_TYPE_BOOLEAN:
|
|
292
|
+
case ClassConstants.INTERNAL_TYPE_BYTE:
|
|
293
|
+
case ClassConstants.INTERNAL_TYPE_CHAR:
|
|
294
|
+
case ClassConstants.INTERNAL_TYPE_SHORT:
|
|
295
|
+
case ClassConstants.INTERNAL_TYPE_INT:
|
|
296
|
+
opcode = InstructionConstants.OP_ISTORE;
|
|
297
|
+
break;
|
|
298
|
+
|
|
299
|
+
case ClassConstants.INTERNAL_TYPE_LONG:
|
|
300
|
+
opcode = InstructionConstants.OP_LSTORE;
|
|
301
|
+
break;
|
|
302
|
+
|
|
303
|
+
case ClassConstants.INTERNAL_TYPE_FLOAT:
|
|
304
|
+
opcode = InstructionConstants.OP_FSTORE;
|
|
305
|
+
break;
|
|
306
|
+
|
|
307
|
+
case ClassConstants.INTERNAL_TYPE_DOUBLE:
|
|
308
|
+
opcode = InstructionConstants.OP_DSTORE;
|
|
309
|
+
break;
|
|
310
|
+
|
|
311
|
+
default:
|
|
312
|
+
opcode = InstructionConstants.OP_ASTORE;
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
codeAttributeComposer.appendInstruction(parameterSize-parameterIndex-1,
|
|
317
|
+
new VariableInstruction(opcode, variableOffset + parameterOffset + parameterIndex).shrink());
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Put the 'this' reference in variable 0 (plus offset).
|
|
322
|
+
if (!isStatic)
|
|
323
|
+
{
|
|
324
|
+
codeAttributeComposer.appendInstruction(parameterSize,
|
|
325
|
+
new VariableInstruction(InstructionConstants.OP_ASTORE, variableOffset).shrink());
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
codeAttributeComposer.endCodeFragment();
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Appends the code of the given code attribute.
|
|
334
|
+
*/
|
|
335
|
+
private void copyCode(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
|
336
|
+
{
|
|
337
|
+
// The code may expand, due to expanding constant and variable
|
|
338
|
+
// instructions.
|
|
339
|
+
codeAttributeComposer.beginCodeFragment(codeAttribute.u4codeLength);
|
|
340
|
+
|
|
341
|
+
// Copy the instructions.
|
|
342
|
+
codeAttribute.instructionsAccept(clazz, method, this);
|
|
343
|
+
|
|
344
|
+
// Append a label just after the code.
|
|
345
|
+
codeAttributeComposer.appendLabel(codeAttribute.u4codeLength);
|
|
346
|
+
|
|
347
|
+
// Copy the exceptions.
|
|
348
|
+
codeAttribute.exceptionsAccept(clazz, method, exceptionInfoAdder);
|
|
349
|
+
|
|
350
|
+
codeAttributeComposer.endCodeFragment();
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
// Implementations for InstructionVisitor.
|
|
355
|
+
|
|
356
|
+
public void visitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction)
|
|
357
|
+
{
|
|
358
|
+
codeAttributeComposer.appendInstruction(offset, instruction.shrink());
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
public void visitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction)
|
|
363
|
+
{
|
|
364
|
+
// Are we inlining this instruction?
|
|
365
|
+
if (inlining)
|
|
366
|
+
{
|
|
367
|
+
// Replace any return instructions by branches to the end of the code.
|
|
368
|
+
switch (simpleInstruction.opcode)
|
|
369
|
+
{
|
|
370
|
+
case InstructionConstants.OP_IRETURN:
|
|
371
|
+
case InstructionConstants.OP_LRETURN:
|
|
372
|
+
case InstructionConstants.OP_FRETURN:
|
|
373
|
+
case InstructionConstants.OP_DRETURN:
|
|
374
|
+
case InstructionConstants.OP_ARETURN:
|
|
375
|
+
case InstructionConstants.OP_RETURN:
|
|
376
|
+
// Are we not at the last instruction?
|
|
377
|
+
if (offset < codeAttribute.u4codeLength-1)
|
|
378
|
+
{
|
|
379
|
+
// Replace the return instruction by a branch instruction.
|
|
380
|
+
Instruction branchInstruction =
|
|
381
|
+
new BranchInstruction(InstructionConstants.OP_GOTO_W,
|
|
382
|
+
codeAttribute.u4codeLength - offset);
|
|
383
|
+
|
|
384
|
+
codeAttributeComposer.appendInstruction(offset,
|
|
385
|
+
branchInstruction.shrink());
|
|
386
|
+
}
|
|
387
|
+
else
|
|
388
|
+
{
|
|
389
|
+
// Just leave out the instruction, but put in a label,
|
|
390
|
+
// for the sake of any other branch instructions.
|
|
391
|
+
codeAttributeComposer.appendLabel(offset);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
codeAttributeComposer.appendInstruction(offset, simpleInstruction.shrink());
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
|
|
403
|
+
{
|
|
404
|
+
// Are we inlining this instruction?
|
|
405
|
+
if (inlining)
|
|
406
|
+
{
|
|
407
|
+
// Update the variable index.
|
|
408
|
+
variableInstruction.variableIndex += variableOffset;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
codeAttributeComposer.appendInstruction(offset, variableInstruction.shrink());
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
public void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction)
|
|
416
|
+
{
|
|
417
|
+
// Is it a method invocation?
|
|
418
|
+
switch (constantInstruction.opcode)
|
|
419
|
+
{
|
|
420
|
+
case InstructionConstants.OP_NEW:
|
|
421
|
+
uninitializedObjectCount++;
|
|
422
|
+
break;
|
|
423
|
+
|
|
424
|
+
case InstructionConstants.OP_INVOKEVIRTUAL:
|
|
425
|
+
case InstructionConstants.OP_INVOKESPECIAL:
|
|
426
|
+
case InstructionConstants.OP_INVOKESTATIC:
|
|
427
|
+
case InstructionConstants.OP_INVOKEINTERFACE:
|
|
428
|
+
// See if we can inline it.
|
|
429
|
+
inlined = false;
|
|
430
|
+
|
|
431
|
+
// Append a label, in case the invocation will be inlined.
|
|
432
|
+
codeAttributeComposer.appendLabel(offset);
|
|
433
|
+
|
|
434
|
+
emptyInvokingStack =
|
|
435
|
+
!inlining &&
|
|
436
|
+
stackSizeComputer.isReachable(offset) &&
|
|
437
|
+
stackSizeComputer.getStackSize(offset) == 0;
|
|
438
|
+
|
|
439
|
+
variableOffset += codeAttribute.u2maxLocals;
|
|
440
|
+
|
|
441
|
+
clazz.constantPoolEntryAccept(constantInstruction.constantIndex, this);
|
|
442
|
+
|
|
443
|
+
variableOffset -= codeAttribute.u2maxLocals;
|
|
444
|
+
|
|
445
|
+
// Was the method inlined?
|
|
446
|
+
if (inlined)
|
|
447
|
+
{
|
|
448
|
+
if (extraInlinedInvocationVisitor != null)
|
|
449
|
+
{
|
|
450
|
+
extraInlinedInvocationVisitor.visitConstantInstruction(clazz, method, codeAttribute, offset, constantInstruction);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// The invocation itself is no longer necessary.
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
break;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// Are we inlining this instruction?
|
|
461
|
+
if (inlining)
|
|
462
|
+
{
|
|
463
|
+
// Make sure the constant is present in the constant pool of the
|
|
464
|
+
// target class.
|
|
465
|
+
constantInstruction.constantIndex =
|
|
466
|
+
constantAdder.addConstant(clazz, constantInstruction.constantIndex);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
codeAttributeComposer.appendInstruction(offset, constantInstruction.shrink());
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
// Implementations for ConstantVisitor.
|
|
474
|
+
|
|
475
|
+
public void visitInterfaceMethodrefConstant(Clazz clazz, InterfaceMethodrefConstant interfaceMethodrefConstant) {}
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
public void visitMethodrefConstant(Clazz clazz, MethodrefConstant methodrefConstant)
|
|
479
|
+
{
|
|
480
|
+
methodrefConstant.referencedMemberAccept(this);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
// Implementations for MemberVisitor.
|
|
485
|
+
|
|
486
|
+
public void visitAnyMember(Clazz Clazz, Member member) {}
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
|
|
490
|
+
{
|
|
491
|
+
int accessFlags = programMethod.getAccessFlags();
|
|
492
|
+
|
|
493
|
+
if (// Only inline the method if it is private, static, or final.
|
|
494
|
+
(accessFlags & (ClassConstants.INTERNAL_ACC_PRIVATE |
|
|
495
|
+
ClassConstants.INTERNAL_ACC_STATIC |
|
|
496
|
+
ClassConstants.INTERNAL_ACC_FINAL)) != 0 &&
|
|
497
|
+
|
|
498
|
+
// Only inline the method if it is not synchronized, etc.
|
|
499
|
+
(accessFlags & (ClassConstants.INTERNAL_ACC_SYNCHRONIZED |
|
|
500
|
+
ClassConstants.INTERNAL_ACC_NATIVE |
|
|
501
|
+
ClassConstants.INTERNAL_ACC_INTERFACE |
|
|
502
|
+
ClassConstants.INTERNAL_ACC_ABSTRACT)) == 0 &&
|
|
503
|
+
|
|
504
|
+
// Don't inline an <init> method, except in an <init> method in the
|
|
505
|
+
// same class.
|
|
506
|
+
// (!programMethod.getName(programClass).equals(ClassConstants.INTERNAL_METHOD_NAME_INIT) ||
|
|
507
|
+
// (programClass.equals(targetClass) &&
|
|
508
|
+
// targetMethod.getName(targetClass).equals(ClassConstants.INTERNAL_METHOD_NAME_INIT))) &&
|
|
509
|
+
!programMethod.getName(programClass).equals(ClassConstants.INTERNAL_METHOD_NAME_INIT) &&
|
|
510
|
+
|
|
511
|
+
// Don't inline a method into itself.
|
|
512
|
+
(!programMethod.equals(targetMethod) ||
|
|
513
|
+
!programClass.equals(targetClass)) &&
|
|
514
|
+
|
|
515
|
+
// Only inline the method if it isn't recursing.
|
|
516
|
+
!inliningMethods.contains(programMethod) &&
|
|
517
|
+
|
|
518
|
+
// Only inline the method if its target class has at least the
|
|
519
|
+
// same version number as the source class, in order to avoid
|
|
520
|
+
// introducing incompatible constructs.
|
|
521
|
+
targetClass.u4version >= programClass.u4version &&
|
|
522
|
+
|
|
523
|
+
// Only inline the method if it doesn't invoke a super method, or if
|
|
524
|
+
// it is in the same class.
|
|
525
|
+
(!SuperInvocationMarker.invokesSuperMethods(programMethod) ||
|
|
526
|
+
programClass.equals(targetClass)) &&
|
|
527
|
+
|
|
528
|
+
// Only inline the method if it doesn't branch backward while there
|
|
529
|
+
// are uninitialized objects.
|
|
530
|
+
(!BackwardBranchMarker.branchesBackward(programMethod) ||
|
|
531
|
+
uninitializedObjectCount == 0) &&
|
|
532
|
+
|
|
533
|
+
// Only inline if the code access of the inlined method allows it.
|
|
534
|
+
(allowAccessModification ||
|
|
535
|
+
((!AccessMethodMarker.accessesPrivateCode(programMethod) ||
|
|
536
|
+
programClass.equals(targetClass)) &&
|
|
537
|
+
|
|
538
|
+
(!AccessMethodMarker.accessesPackageCode(programMethod) ||
|
|
539
|
+
ClassUtil.internalPackageName(programClass.getName()).equals(
|
|
540
|
+
ClassUtil.internalPackageName(targetClass.getName()))))) &&
|
|
541
|
+
|
|
542
|
+
// (!AccessMethodMarker.accessesProtectedCode(programMethod) ||
|
|
543
|
+
// targetClass.extends_(programClass) ||
|
|
544
|
+
// targetClass.implements_(programClass)) ||
|
|
545
|
+
(!AccessMethodMarker.accessesProtectedCode(programMethod) ||
|
|
546
|
+
programClass.equals(targetClass)) &&
|
|
547
|
+
|
|
548
|
+
// Only inline the method if it doesn't catch exceptions, or if it
|
|
549
|
+
// is invoked with an empty stack.
|
|
550
|
+
(!CatchExceptionMarker.catchesExceptions(programMethod) ||
|
|
551
|
+
emptyInvokingStack) &&
|
|
552
|
+
|
|
553
|
+
// Only inline the method if it comes from the a class with at most
|
|
554
|
+
// a subset of the initialized superclasses.
|
|
555
|
+
(programClass.equals(targetClass) ||
|
|
556
|
+
initializedSuperClasses(targetClass).containsAll(initializedSuperClasses(programClass))))
|
|
557
|
+
{ boolean oldInlining = inlining;
|
|
558
|
+
inlining = true;
|
|
559
|
+
inliningMethods.push(programMethod);
|
|
560
|
+
|
|
561
|
+
// Inline the method body.
|
|
562
|
+
programMethod.attributesAccept(programClass, this);
|
|
563
|
+
|
|
564
|
+
// Update the optimization information of the target method.
|
|
565
|
+
MethodOptimizationInfo info =
|
|
566
|
+
MethodOptimizationInfo.getMethodOptimizationInfo(targetMethod);
|
|
567
|
+
if (info != null)
|
|
568
|
+
{
|
|
569
|
+
info.merge(MethodOptimizationInfo.getMethodOptimizationInfo(programMethod));
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
inlining = oldInlining;
|
|
573
|
+
inliningMethods.pop();
|
|
574
|
+
}
|
|
575
|
+
else if (programMethod.getName(programClass).equals(ClassConstants.INTERNAL_METHOD_NAME_INIT))
|
|
576
|
+
{
|
|
577
|
+
uninitializedObjectCount--;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
/**
|
|
583
|
+
* Returns the set of superclasses and interfaces that are initialized.
|
|
584
|
+
*/
|
|
585
|
+
private Set initializedSuperClasses(Clazz clazz)
|
|
586
|
+
{
|
|
587
|
+
Set set = new HashSet();
|
|
588
|
+
|
|
589
|
+
// Visit all superclasses and interfaces, collecting the ones that have
|
|
590
|
+
// static initializers.
|
|
591
|
+
clazz.hierarchyAccept(true, true, true, false,
|
|
592
|
+
new StaticInitializerContainingClassFilter(
|
|
593
|
+
new ClassCollector(set)));
|
|
594
|
+
|
|
595
|
+
return set;
|
|
596
|
+
}
|
|
597
|
+
}
|