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,843 @@
|
|
|
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.classfile.editor;
|
|
22
|
+
|
|
23
|
+
import proguard.classfile.*;
|
|
24
|
+
import proguard.classfile.attribute.*;
|
|
25
|
+
import proguard.classfile.attribute.preverification.*;
|
|
26
|
+
import proguard.classfile.attribute.preverification.visitor.*;
|
|
27
|
+
import proguard.classfile.attribute.visitor.*;
|
|
28
|
+
import proguard.classfile.instruction.*;
|
|
29
|
+
import proguard.classfile.instruction.visitor.InstructionVisitor;
|
|
30
|
+
import proguard.classfile.util.SimplifiedVisitor;
|
|
31
|
+
|
|
32
|
+
import java.util.Arrays;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* This AttributeVisitor accumulates instructions and exceptions, and then
|
|
36
|
+
* copies them into code attributes that it visits.
|
|
37
|
+
*
|
|
38
|
+
* @author Eric Lafortune
|
|
39
|
+
*/
|
|
40
|
+
public class CodeAttributeComposer
|
|
41
|
+
extends SimplifiedVisitor
|
|
42
|
+
implements AttributeVisitor,
|
|
43
|
+
InstructionVisitor,
|
|
44
|
+
ExceptionInfoVisitor,
|
|
45
|
+
StackMapFrameVisitor,
|
|
46
|
+
VerificationTypeVisitor,
|
|
47
|
+
LineNumberInfoVisitor,
|
|
48
|
+
LocalVariableInfoVisitor,
|
|
49
|
+
LocalVariableTypeInfoVisitor
|
|
50
|
+
{
|
|
51
|
+
//*
|
|
52
|
+
private static final boolean DEBUG = false;
|
|
53
|
+
/*/
|
|
54
|
+
public static boolean DEBUG = false;
|
|
55
|
+
//*/
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
private static final int MAXIMUM_LEVELS = 32;
|
|
59
|
+
private static final int INVALID = -1;
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
private boolean allowExternalExceptionHandlers;
|
|
63
|
+
|
|
64
|
+
private int maximumCodeLength;
|
|
65
|
+
private int codeLength;
|
|
66
|
+
private int exceptionTableLength;
|
|
67
|
+
private int level = -1;
|
|
68
|
+
|
|
69
|
+
private byte[] code = new byte[ClassConstants.TYPICAL_CODE_LENGTH];
|
|
70
|
+
private int[] oldInstructionOffsets = new int[ClassConstants.TYPICAL_CODE_LENGTH];
|
|
71
|
+
|
|
72
|
+
private final int[] codeFragmentOffsets = new int[MAXIMUM_LEVELS];
|
|
73
|
+
private final int[] codeFragmentLengths = new int[MAXIMUM_LEVELS];
|
|
74
|
+
private final int[][] instructionOffsetMap = new int[MAXIMUM_LEVELS][ClassConstants.TYPICAL_CODE_LENGTH + 1];
|
|
75
|
+
|
|
76
|
+
private ExceptionInfo[] exceptionTable = new ExceptionInfo[ClassConstants.TYPICAL_EXCEPTION_TABLE_LENGTH];
|
|
77
|
+
|
|
78
|
+
private int expectedStackMapFrameOffset;
|
|
79
|
+
|
|
80
|
+
private final StackSizeUpdater stackSizeUpdater = new StackSizeUpdater();
|
|
81
|
+
private final VariableSizeUpdater variableSizeUpdater = new VariableSizeUpdater();
|
|
82
|
+
// private final InstructionWriter instructionWriter = new InstructionWriter();
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Creates a new CodeAttributeComposer that doesn't allow external exception
|
|
87
|
+
* handlers.
|
|
88
|
+
*/
|
|
89
|
+
public CodeAttributeComposer()
|
|
90
|
+
{
|
|
91
|
+
this(false);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Creates a new CodeAttributeComposer that optionally allows external
|
|
97
|
+
* exception handlers.
|
|
98
|
+
*/
|
|
99
|
+
public CodeAttributeComposer(boolean allowExternalExceptionHandlers)
|
|
100
|
+
{
|
|
101
|
+
this.allowExternalExceptionHandlers = allowExternalExceptionHandlers;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Starts a new code definition.
|
|
107
|
+
*/
|
|
108
|
+
public void reset()
|
|
109
|
+
{
|
|
110
|
+
maximumCodeLength = 0;
|
|
111
|
+
codeLength = 0;
|
|
112
|
+
exceptionTableLength = 0;
|
|
113
|
+
level = -1;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Starts a new code fragment. Branch instructions that are added are
|
|
119
|
+
* assumed to be relative within such code fragments.
|
|
120
|
+
* @param maximumCodeFragmentLength the maximum length of the code that will
|
|
121
|
+
* be added as part of this fragment.
|
|
122
|
+
*/
|
|
123
|
+
public void beginCodeFragment(int maximumCodeFragmentLength)
|
|
124
|
+
{
|
|
125
|
+
level++;
|
|
126
|
+
|
|
127
|
+
if (level >= MAXIMUM_LEVELS)
|
|
128
|
+
{
|
|
129
|
+
throw new IllegalArgumentException("Maximum number of code fragment levels exceeded ["+level+"]");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// // TODO: Figure out some length.
|
|
133
|
+
// if (level == 0)
|
|
134
|
+
// {
|
|
135
|
+
// // Prepare for possible widening of instructions.
|
|
136
|
+
// instructionWriter.reset(2 * maximumCodeFragmentLength);
|
|
137
|
+
// }
|
|
138
|
+
|
|
139
|
+
// Make sure there is sufficient space for adding the code fragment.
|
|
140
|
+
maximumCodeLength += maximumCodeFragmentLength;
|
|
141
|
+
|
|
142
|
+
ensureCodeLength(maximumCodeLength);
|
|
143
|
+
|
|
144
|
+
// Try to reuse the previous array for this code fragment.
|
|
145
|
+
if (instructionOffsetMap[level].length <= maximumCodeFragmentLength)
|
|
146
|
+
{
|
|
147
|
+
instructionOffsetMap[level] = new int[maximumCodeFragmentLength + 1];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Initialize the offset map.
|
|
151
|
+
for (int index = 0; index <= maximumCodeFragmentLength; index++)
|
|
152
|
+
{
|
|
153
|
+
instructionOffsetMap[level][index] = INVALID;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Remember the location of the code fragment.
|
|
157
|
+
codeFragmentOffsets[level] = codeLength;
|
|
158
|
+
codeFragmentLengths[level] = maximumCodeFragmentLength;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Appends the given instruction with the given old offset.
|
|
164
|
+
* @param oldInstructionOffset the old offset of the instruction, to which
|
|
165
|
+
* branches and other references in the current
|
|
166
|
+
* code fragment are pointing.
|
|
167
|
+
* @param instruction the instruction to be appended.
|
|
168
|
+
*/
|
|
169
|
+
public void appendInstruction(int oldInstructionOffset,
|
|
170
|
+
Instruction instruction)
|
|
171
|
+
{
|
|
172
|
+
if (DEBUG)
|
|
173
|
+
{
|
|
174
|
+
println("["+codeLength+"] <- ", instruction.toString(oldInstructionOffset));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Make sure the code array is large enough.
|
|
178
|
+
int newCodeLength = codeLength + instruction.length(codeLength);
|
|
179
|
+
|
|
180
|
+
ensureCodeLength(newCodeLength);
|
|
181
|
+
|
|
182
|
+
// Remember the old offset of the appended instruction.
|
|
183
|
+
oldInstructionOffsets[codeLength] = oldInstructionOffset;
|
|
184
|
+
|
|
185
|
+
// Write the instruction.
|
|
186
|
+
// instruction.accept(null,
|
|
187
|
+
// null,
|
|
188
|
+
// new CodeAttribute(0, 0, 0, 0, code, 0, null, 0, null),
|
|
189
|
+
// codeLength,
|
|
190
|
+
// instructionWriter);
|
|
191
|
+
instruction.write(code, codeLength);
|
|
192
|
+
|
|
193
|
+
// Fill out the new offset of the appended instruction.
|
|
194
|
+
instructionOffsetMap[level][oldInstructionOffset] = codeLength;
|
|
195
|
+
|
|
196
|
+
// Continue appending at the next instruction offset.
|
|
197
|
+
codeLength = newCodeLength;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Appends the given label with the given old offset.
|
|
203
|
+
* @param oldInstructionOffset the old offset of the label, to which
|
|
204
|
+
* branches and other references in the current
|
|
205
|
+
* code fragment are pointing.
|
|
206
|
+
*/
|
|
207
|
+
public void appendLabel(int oldInstructionOffset)
|
|
208
|
+
{
|
|
209
|
+
if (DEBUG)
|
|
210
|
+
{
|
|
211
|
+
println("["+codeLength+"] <- ", "[" + oldInstructionOffset + "] (label)");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Fill out the new offset of the appended instruction.
|
|
215
|
+
instructionOffsetMap[level][oldInstructionOffset] = codeLength;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Appends the given exception to the exception table.
|
|
221
|
+
* @param exceptionInfo the exception to be appended.
|
|
222
|
+
*/
|
|
223
|
+
public void appendException(ExceptionInfo exceptionInfo)
|
|
224
|
+
{
|
|
225
|
+
if (DEBUG)
|
|
226
|
+
{
|
|
227
|
+
print(" ", "Exception ["+exceptionInfo.u2startPC+" -> "+exceptionInfo.u2endPC+": "+exceptionInfo.u2handlerPC+"]");
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Remap the exception right away.
|
|
231
|
+
visitExceptionInfo(null, null, null, exceptionInfo);
|
|
232
|
+
|
|
233
|
+
if (DEBUG)
|
|
234
|
+
{
|
|
235
|
+
System.out.println(" -> ["+exceptionInfo.u2startPC+" -> "+exceptionInfo.u2endPC+": "+exceptionInfo.u2handlerPC+"]");
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Don't add the exception if its instruction range is empty.
|
|
239
|
+
if (exceptionInfo.u2startPC == exceptionInfo.u2endPC)
|
|
240
|
+
{
|
|
241
|
+
if (DEBUG)
|
|
242
|
+
{
|
|
243
|
+
println(" ", " (not added because of empty instruction range)");
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Make sure there is sufficient space in the exception table.
|
|
250
|
+
if (exceptionTable.length <= exceptionTableLength)
|
|
251
|
+
{
|
|
252
|
+
ExceptionInfo[] newExceptionTable = new ExceptionInfo[exceptionTableLength+1];
|
|
253
|
+
System.arraycopy(exceptionTable, 0, newExceptionTable, 0, exceptionTableLength);
|
|
254
|
+
exceptionTable = newExceptionTable;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Add the exception.
|
|
258
|
+
exceptionTable[exceptionTableLength++] = exceptionInfo;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Wraps up the current code fragment, continuing with the previous one on
|
|
264
|
+
* the stack.
|
|
265
|
+
*/
|
|
266
|
+
public void endCodeFragment()
|
|
267
|
+
{
|
|
268
|
+
if (level < 0)
|
|
269
|
+
{
|
|
270
|
+
throw new IllegalArgumentException("Code fragment not begun ["+level+"]");
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Remap the instructions of the code fragment.
|
|
274
|
+
int instructionOffset = codeFragmentOffsets[level];
|
|
275
|
+
while (instructionOffset < codeLength)
|
|
276
|
+
{
|
|
277
|
+
// Get the next instruction.
|
|
278
|
+
Instruction instruction = InstructionFactory.create(code, instructionOffset);
|
|
279
|
+
|
|
280
|
+
// Does this instruction still have to be remapped?
|
|
281
|
+
if (oldInstructionOffsets[instructionOffset] >= 0)
|
|
282
|
+
{
|
|
283
|
+
// Adapt the instruction for its new offset.
|
|
284
|
+
instruction.accept(null, null, null, instructionOffset, this);
|
|
285
|
+
|
|
286
|
+
// Write the instruction back.
|
|
287
|
+
// instruction.accept(null,
|
|
288
|
+
// null,
|
|
289
|
+
// new CodeAttribute(0, 0, 0, 0, code, 0, null, 0, null),
|
|
290
|
+
// instructionOffset,
|
|
291
|
+
// instructionWriter);
|
|
292
|
+
instruction.write(code, instructionOffset);
|
|
293
|
+
|
|
294
|
+
// Don't remap this instruction again.
|
|
295
|
+
oldInstructionOffsets[instructionOffset] = -1;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Continue remapping at the next instruction offset.
|
|
299
|
+
instructionOffset += instruction.length(instructionOffset);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Correct the estimated maximum code length, now that we know the
|
|
303
|
+
// actual length of this code fragment.
|
|
304
|
+
maximumCodeLength += codeLength - codeFragmentOffsets[level] -
|
|
305
|
+
codeFragmentLengths[level];
|
|
306
|
+
|
|
307
|
+
// Try to remap the exception handlers that couldn't be remapped before.
|
|
308
|
+
if (allowExternalExceptionHandlers)
|
|
309
|
+
{
|
|
310
|
+
for (int index = 0; index < exceptionTableLength; index++)
|
|
311
|
+
{
|
|
312
|
+
ExceptionInfo exceptionInfo = exceptionTable[index];
|
|
313
|
+
|
|
314
|
+
// Unmapped exception handlers are still negated.
|
|
315
|
+
int handlerPC = -exceptionInfo.u2handlerPC;
|
|
316
|
+
if (handlerPC > 0)
|
|
317
|
+
{
|
|
318
|
+
if (remappableExceptionHandler(handlerPC))
|
|
319
|
+
{
|
|
320
|
+
exceptionInfo.u2handlerPC = remapInstructionOffset(handlerPC);
|
|
321
|
+
}
|
|
322
|
+
else if (level == 0)
|
|
323
|
+
{
|
|
324
|
+
throw new IllegalStateException("Couldn't remap exception handler offset ["+handlerPC+"]");
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
level--;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
// Implementations for AttributeVisitor.
|
|
335
|
+
|
|
336
|
+
public void visitAnyAttribute(Clazz clazz, Attribute attribute) {}
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
|
|
340
|
+
{
|
|
341
|
+
if (DEBUG)
|
|
342
|
+
{
|
|
343
|
+
System.out.println("CodeAttributeComposer: putting results in ["+clazz.getName()+"."+method.getName(clazz)+method.getDescriptor(clazz)+"]");
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (level != -1)
|
|
347
|
+
{
|
|
348
|
+
throw new IllegalArgumentException("Code fragment not ended ["+level+"]");
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
level++;
|
|
352
|
+
|
|
353
|
+
// Make sure the code attribute has sufficient space for the composed
|
|
354
|
+
// code.
|
|
355
|
+
if (codeAttribute.u4codeLength < codeLength)
|
|
356
|
+
{
|
|
357
|
+
codeAttribute.code = new byte[codeLength];
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// Copy the composed code over into the code attribute.
|
|
361
|
+
codeAttribute.u4codeLength = codeLength;
|
|
362
|
+
System.arraycopy(code, 0, codeAttribute.code, 0, codeLength);
|
|
363
|
+
|
|
364
|
+
// Remove exceptions with empty code blocks (done before).
|
|
365
|
+
//exceptionTableLength =
|
|
366
|
+
// removeEmptyExceptions(exceptionTable, exceptionTableLength);
|
|
367
|
+
|
|
368
|
+
// Make sure the exception table has sufficient space for the composed
|
|
369
|
+
// exceptions.
|
|
370
|
+
if (codeAttribute.exceptionTable.length < exceptionTableLength)
|
|
371
|
+
{
|
|
372
|
+
codeAttribute.exceptionTable = new ExceptionInfo[exceptionTableLength];
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// Copy the exception table.
|
|
376
|
+
codeAttribute.u2exceptionTableLength = exceptionTableLength;
|
|
377
|
+
System.arraycopy(exceptionTable, 0, codeAttribute.exceptionTable, 0, exceptionTableLength);
|
|
378
|
+
|
|
379
|
+
// Update the maximum stack size and local variable frame size.
|
|
380
|
+
stackSizeUpdater.visitCodeAttribute(clazz, method, codeAttribute);
|
|
381
|
+
variableSizeUpdater.visitCodeAttribute(clazz, method, codeAttribute);
|
|
382
|
+
|
|
383
|
+
// Remap the line number table and the local variable table.
|
|
384
|
+
codeAttribute.attributesAccept(clazz, method, this);
|
|
385
|
+
|
|
386
|
+
// Remap the exception table.
|
|
387
|
+
//codeAttribute.exceptionsAccept(clazz, method, this);
|
|
388
|
+
|
|
389
|
+
// Remove exceptions with empty code blocks (done before).
|
|
390
|
+
//codeAttribute.u2exceptionTableLength =
|
|
391
|
+
// removeEmptyExceptions(codeAttribute.exceptionTable,
|
|
392
|
+
// codeAttribute.u2exceptionTableLength);
|
|
393
|
+
|
|
394
|
+
// // Make sure instructions are widened if necessary.
|
|
395
|
+
// instructionWriter.visitCodeAttribute(clazz, method, codeAttribute);
|
|
396
|
+
|
|
397
|
+
level--;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
public void visitStackMapAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapAttribute stackMapAttribute)
|
|
402
|
+
{
|
|
403
|
+
// Remap all stack map entries.
|
|
404
|
+
expectedStackMapFrameOffset = -1;
|
|
405
|
+
stackMapAttribute.stackMapFramesAccept(clazz, method, codeAttribute, this);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
public void visitStackMapTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, StackMapTableAttribute stackMapTableAttribute)
|
|
410
|
+
{
|
|
411
|
+
// Remap all stack map table entries.
|
|
412
|
+
expectedStackMapFrameOffset = 0;
|
|
413
|
+
stackMapTableAttribute.stackMapFramesAccept(clazz, method, codeAttribute, this);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
public void visitLineNumberTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberTableAttribute lineNumberTableAttribute)
|
|
418
|
+
{
|
|
419
|
+
// Remap all line number table entries.
|
|
420
|
+
lineNumberTableAttribute.lineNumbersAccept(clazz, method, codeAttribute, this);
|
|
421
|
+
|
|
422
|
+
// Remove line numbers with empty code blocks.
|
|
423
|
+
lineNumberTableAttribute.u2lineNumberTableLength =
|
|
424
|
+
removeEmptyLineNumbers(lineNumberTableAttribute.lineNumberTable,
|
|
425
|
+
lineNumberTableAttribute.u2lineNumberTableLength,
|
|
426
|
+
codeAttribute.u4codeLength);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
public void visitLocalVariableTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTableAttribute localVariableTableAttribute)
|
|
431
|
+
{
|
|
432
|
+
// Remap all local variable table entries.
|
|
433
|
+
localVariableTableAttribute.localVariablesAccept(clazz, method, codeAttribute, this);
|
|
434
|
+
|
|
435
|
+
// Remove local variables with empty code blocks.
|
|
436
|
+
localVariableTableAttribute.u2localVariableTableLength =
|
|
437
|
+
removeEmptyLocalVariables(localVariableTableAttribute.localVariableTable,
|
|
438
|
+
localVariableTableAttribute.u2localVariableTableLength,
|
|
439
|
+
codeAttribute.u2maxLocals);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
public void visitLocalVariableTypeTableAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeTableAttribute localVariableTypeTableAttribute)
|
|
444
|
+
{
|
|
445
|
+
// Remap all local variable table entries.
|
|
446
|
+
localVariableTypeTableAttribute.localVariablesAccept(clazz, method, codeAttribute, this);
|
|
447
|
+
|
|
448
|
+
// Remove local variables with empty code blocks.
|
|
449
|
+
localVariableTypeTableAttribute.u2localVariableTypeTableLength =
|
|
450
|
+
removeEmptyLocalVariableTypes(localVariableTypeTableAttribute.localVariableTypeTable,
|
|
451
|
+
localVariableTypeTableAttribute.u2localVariableTypeTableLength,
|
|
452
|
+
codeAttribute.u2maxLocals);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
// Implementations for InstructionVisitor.
|
|
457
|
+
|
|
458
|
+
public void visitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction) {}
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
public void visitBranchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, BranchInstruction branchInstruction)
|
|
462
|
+
{
|
|
463
|
+
// Adjust the branch offset.
|
|
464
|
+
branchInstruction.branchOffset = remapBranchOffset(offset,
|
|
465
|
+
branchInstruction.branchOffset);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
public void visitAnySwitchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SwitchInstruction switchInstruction)
|
|
470
|
+
{
|
|
471
|
+
// Adjust the default jump offset.
|
|
472
|
+
switchInstruction.defaultOffset = remapBranchOffset(offset,
|
|
473
|
+
switchInstruction.defaultOffset);
|
|
474
|
+
|
|
475
|
+
// Adjust the jump offsets.
|
|
476
|
+
remapJumpOffsets(offset,
|
|
477
|
+
switchInstruction.jumpOffsets);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
// Implementations for ExceptionInfoVisitor.
|
|
482
|
+
|
|
483
|
+
public void visitExceptionInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, ExceptionInfo exceptionInfo)
|
|
484
|
+
{
|
|
485
|
+
// Remap the code offsets. Note that the instruction offset map also has
|
|
486
|
+
// an entry for the first offset after the code, for u2endPC.
|
|
487
|
+
exceptionInfo.u2startPC = remapInstructionOffset(exceptionInfo.u2startPC);
|
|
488
|
+
exceptionInfo.u2endPC = remapInstructionOffset(exceptionInfo.u2endPC);
|
|
489
|
+
|
|
490
|
+
// See if we can remap the handler right away. Unmapped exception
|
|
491
|
+
// handlers are negated, in order to mark them as external.
|
|
492
|
+
int handlerPC = exceptionInfo.u2handlerPC;
|
|
493
|
+
exceptionInfo.u2handlerPC =
|
|
494
|
+
!allowExternalExceptionHandlers ||
|
|
495
|
+
remappableExceptionHandler(handlerPC) ?
|
|
496
|
+
remapInstructionOffset(handlerPC) :
|
|
497
|
+
-handlerPC;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
// Implementations for StackMapFrameVisitor.
|
|
502
|
+
|
|
503
|
+
public void visitAnyStackMapFrame(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, StackMapFrame stackMapFrame)
|
|
504
|
+
{
|
|
505
|
+
// Remap the stack map frame offset.
|
|
506
|
+
int stackMapFrameOffset = remapInstructionOffset(offset);
|
|
507
|
+
|
|
508
|
+
int offsetDelta = stackMapFrameOffset;
|
|
509
|
+
|
|
510
|
+
// Compute the offset delta if the frame is part of a stack map frame
|
|
511
|
+
// table (for JDK 6.0) instead of a stack map (for Java Micro Edition).
|
|
512
|
+
if (expectedStackMapFrameOffset >= 0)
|
|
513
|
+
{
|
|
514
|
+
offsetDelta -= expectedStackMapFrameOffset;
|
|
515
|
+
|
|
516
|
+
expectedStackMapFrameOffset = stackMapFrameOffset + 1;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
stackMapFrame.u2offsetDelta = offsetDelta;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
public void visitSameOneFrame(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SameOneFrame sameOneFrame)
|
|
524
|
+
{
|
|
525
|
+
// Remap the stack map frame offset.
|
|
526
|
+
visitAnyStackMapFrame(clazz, method, codeAttribute, offset, sameOneFrame);
|
|
527
|
+
|
|
528
|
+
// Remap the verification type offset.
|
|
529
|
+
sameOneFrame.stackItemAccept(clazz, method, codeAttribute, offset, this);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
public void visitMoreZeroFrame(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, MoreZeroFrame moreZeroFrame)
|
|
534
|
+
{
|
|
535
|
+
// Remap the stack map frame offset.
|
|
536
|
+
visitAnyStackMapFrame(clazz, method, codeAttribute, offset, moreZeroFrame);
|
|
537
|
+
|
|
538
|
+
// Remap the verification type offsets.
|
|
539
|
+
moreZeroFrame.additionalVariablesAccept(clazz, method, codeAttribute, offset, this);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
public void visitFullFrame(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, FullFrame fullFrame)
|
|
544
|
+
{
|
|
545
|
+
// Remap the stack map frame offset.
|
|
546
|
+
visitAnyStackMapFrame(clazz, method, codeAttribute, offset, fullFrame);
|
|
547
|
+
|
|
548
|
+
// Remap the verification type offsets.
|
|
549
|
+
fullFrame.variablesAccept(clazz, method, codeAttribute, offset, this);
|
|
550
|
+
fullFrame.stackAccept(clazz, method, codeAttribute, offset, this);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
// Implementations for VerificationTypeVisitor.
|
|
555
|
+
|
|
556
|
+
public void visitAnyVerificationType(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VerificationType verificationType) {}
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
public void visitUninitializedType(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, UninitializedType uninitializedType)
|
|
560
|
+
{
|
|
561
|
+
// Remap the offset of the 'new' instruction.
|
|
562
|
+
uninitializedType.u2newInstructionOffset = remapInstructionOffset(uninitializedType.u2newInstructionOffset);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
// Implementations for LineNumberInfoVisitor.
|
|
567
|
+
|
|
568
|
+
public void visitLineNumberInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LineNumberInfo lineNumberInfo)
|
|
569
|
+
{
|
|
570
|
+
// Remap the code offset.
|
|
571
|
+
lineNumberInfo.u2startPC = remapInstructionOffset(lineNumberInfo.u2startPC);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
// Implementations for LocalVariableInfoVisitor.
|
|
576
|
+
|
|
577
|
+
public void visitLocalVariableInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableInfo localVariableInfo)
|
|
578
|
+
{
|
|
579
|
+
// Remap the code offset and length.
|
|
580
|
+
// TODO: The local variable frame might not be strictly preserved.
|
|
581
|
+
int startPC = remapInstructionOffset(localVariableInfo.u2startPC);
|
|
582
|
+
int endPC = remapInstructionOffset(localVariableInfo.u2startPC + localVariableInfo.u2length);
|
|
583
|
+
|
|
584
|
+
localVariableInfo.u2startPC = startPC;
|
|
585
|
+
localVariableInfo.u2length = endPC - startPC;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
// Implementations for LocalVariableTypeInfoVisitor.
|
|
589
|
+
|
|
590
|
+
public void visitLocalVariableTypeInfo(Clazz clazz, Method method, CodeAttribute codeAttribute, LocalVariableTypeInfo localVariableTypeInfo)
|
|
591
|
+
{
|
|
592
|
+
// Remap the code offset and length.
|
|
593
|
+
// TODO: The local variable frame might not be strictly preserved.
|
|
594
|
+
int startPC = remapInstructionOffset(localVariableTypeInfo.u2startPC);
|
|
595
|
+
int endPC = remapInstructionOffset(localVariableTypeInfo.u2startPC + localVariableTypeInfo.u2length);
|
|
596
|
+
|
|
597
|
+
localVariableTypeInfo.u2startPC = startPC;
|
|
598
|
+
localVariableTypeInfo.u2length = endPC - startPC;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
// Small utility methods.
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Make sure the code arrays have at least the given size.
|
|
606
|
+
*/
|
|
607
|
+
private void ensureCodeLength(int newCodeLength)
|
|
608
|
+
{
|
|
609
|
+
if (code.length < newCodeLength)
|
|
610
|
+
{
|
|
611
|
+
// Add 20% to avoid extending the arrays too often.
|
|
612
|
+
newCodeLength = newCodeLength * 6 / 5;
|
|
613
|
+
|
|
614
|
+
byte[] newCode = new byte[newCodeLength];
|
|
615
|
+
System.arraycopy(code, 0, newCode, 0, codeLength);
|
|
616
|
+
code = newCode;
|
|
617
|
+
|
|
618
|
+
int[] newOldInstructionOffsets = new int[newCodeLength];
|
|
619
|
+
System.arraycopy(oldInstructionOffsets, 0, newOldInstructionOffsets, 0, codeLength);
|
|
620
|
+
oldInstructionOffsets = newOldInstructionOffsets;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* Adjusts the given jump offsets for the instruction at the given offset.
|
|
627
|
+
*/
|
|
628
|
+
private void remapJumpOffsets(int offset, int[] jumpOffsets)
|
|
629
|
+
{
|
|
630
|
+
for (int index = 0; index < jumpOffsets.length; index++)
|
|
631
|
+
{
|
|
632
|
+
jumpOffsets[index] = remapBranchOffset(offset, jumpOffsets[index]);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* Computes the new branch offset for the instruction at the given new offset
|
|
639
|
+
* with the given old branch offset.
|
|
640
|
+
*/
|
|
641
|
+
private int remapBranchOffset(int newInstructionOffset, int branchOffset)
|
|
642
|
+
{
|
|
643
|
+
if (newInstructionOffset < 0 ||
|
|
644
|
+
newInstructionOffset > codeLength)
|
|
645
|
+
{
|
|
646
|
+
throw new IllegalArgumentException("Invalid instruction offset ["+newInstructionOffset +"] in code with length ["+codeLength+"]");
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
int oldInstructionOffset = oldInstructionOffsets[newInstructionOffset];
|
|
650
|
+
|
|
651
|
+
return remapInstructionOffset(oldInstructionOffset + branchOffset) -
|
|
652
|
+
remapInstructionOffset(oldInstructionOffset);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Computes the new instruction offset for the instruction at the given old
|
|
658
|
+
* offset.
|
|
659
|
+
*/
|
|
660
|
+
private int remapInstructionOffset(int oldInstructionOffset)
|
|
661
|
+
{
|
|
662
|
+
if (oldInstructionOffset < 0 ||
|
|
663
|
+
oldInstructionOffset > codeFragmentLengths[level])
|
|
664
|
+
{
|
|
665
|
+
throw new IllegalArgumentException("Instruction offset ["+oldInstructionOffset +"] out of range in code fragment with length ["+codeFragmentLengths[level]+"] at level "+level);
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
int newInstructionOffset = instructionOffsetMap[level][oldInstructionOffset];
|
|
669
|
+
if (newInstructionOffset == INVALID)
|
|
670
|
+
{
|
|
671
|
+
throw new IllegalArgumentException("Invalid instruction offset ["+oldInstructionOffset +"] in code fragment at level "+level);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
return newInstructionOffset;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
/**
|
|
679
|
+
* Returns whether the given old exception handler can be remapped in the
|
|
680
|
+
* current code fragment.
|
|
681
|
+
*/
|
|
682
|
+
private boolean remappableExceptionHandler(int oldInstructionOffset)
|
|
683
|
+
{
|
|
684
|
+
if (oldInstructionOffset > codeFragmentLengths[level])
|
|
685
|
+
{
|
|
686
|
+
return false;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
int newInstructionOffset =
|
|
690
|
+
instructionOffsetMap[level][oldInstructionOffset];
|
|
691
|
+
|
|
692
|
+
return newInstructionOffset > INVALID &&
|
|
693
|
+
newInstructionOffset < codeLength;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* Returns the given list of exceptions, without the ones that have empty
|
|
699
|
+
* code blocks.
|
|
700
|
+
*/
|
|
701
|
+
private int removeEmptyExceptions(ExceptionInfo[] exceptionInfos,
|
|
702
|
+
int exceptionInfoCount)
|
|
703
|
+
{
|
|
704
|
+
// Overwrite all empty exceptions.
|
|
705
|
+
int newIndex = 0;
|
|
706
|
+
for (int index = 0; index < exceptionInfoCount; index++)
|
|
707
|
+
{
|
|
708
|
+
ExceptionInfo exceptionInfo = exceptionInfos[index];
|
|
709
|
+
if (exceptionInfo.u2startPC < exceptionInfo.u2endPC)
|
|
710
|
+
{
|
|
711
|
+
exceptionInfos[newIndex++] = exceptionInfo;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
// Clear the unused array entries.
|
|
716
|
+
Arrays.fill(exceptionInfos, newIndex, exceptionInfoCount, null);
|
|
717
|
+
|
|
718
|
+
return newIndex;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
/**
|
|
723
|
+
* Returns the given list of line numbers, without the ones that have empty
|
|
724
|
+
* code blocks or that exceed the code size.
|
|
725
|
+
*/
|
|
726
|
+
private int removeEmptyLineNumbers(LineNumberInfo[] lineNumberInfos,
|
|
727
|
+
int lineNumberInfoCount,
|
|
728
|
+
int codeLength)
|
|
729
|
+
{
|
|
730
|
+
// Overwrite all empty line number entries.
|
|
731
|
+
int newIndex = 0;
|
|
732
|
+
for (int index = 0; index < lineNumberInfoCount; index++)
|
|
733
|
+
{
|
|
734
|
+
LineNumberInfo lineNumberInfo = lineNumberInfos[index];
|
|
735
|
+
int startPC = lineNumberInfo.u2startPC;
|
|
736
|
+
if (startPC < codeLength &&
|
|
737
|
+
(index == 0 || startPC > lineNumberInfos[index-1].u2startPC))
|
|
738
|
+
{
|
|
739
|
+
lineNumberInfos[newIndex++] = lineNumberInfo;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
// Clear the unused array entries.
|
|
744
|
+
Arrays.fill(lineNumberInfos, newIndex, lineNumberInfoCount, null);
|
|
745
|
+
|
|
746
|
+
return newIndex;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
* Returns the given list of local variables, without the ones that have empty
|
|
752
|
+
* code blocks or that exceed the actual number of local variables.
|
|
753
|
+
*/
|
|
754
|
+
private int removeEmptyLocalVariables(LocalVariableInfo[] localVariableInfos,
|
|
755
|
+
int localVariableInfoCount,
|
|
756
|
+
int maxLocals)
|
|
757
|
+
{
|
|
758
|
+
// Overwrite all empty local variable entries.
|
|
759
|
+
int newIndex = 0;
|
|
760
|
+
for (int index = 0; index < localVariableInfoCount; index++)
|
|
761
|
+
{
|
|
762
|
+
LocalVariableInfo localVariableInfo = localVariableInfos[index];
|
|
763
|
+
if (localVariableInfo.u2length > 0 &&
|
|
764
|
+
localVariableInfo.u2index < maxLocals)
|
|
765
|
+
{
|
|
766
|
+
localVariableInfos[newIndex++] = localVariableInfo;
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
// Clear the unused array entries.
|
|
771
|
+
Arrays.fill(localVariableInfos, newIndex, localVariableInfoCount, null);
|
|
772
|
+
|
|
773
|
+
return newIndex;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
/**
|
|
778
|
+
* Returns the given list of local variable types, without the ones that
|
|
779
|
+
* have empty code blocks or that exceed the actual number of local variables.
|
|
780
|
+
*/
|
|
781
|
+
private int removeEmptyLocalVariableTypes(LocalVariableTypeInfo[] localVariableTypeInfos,
|
|
782
|
+
int localVariableTypeInfoCount,
|
|
783
|
+
int maxLocals)
|
|
784
|
+
{
|
|
785
|
+
// Overwrite all empty local variable type entries.
|
|
786
|
+
int newIndex = 0;
|
|
787
|
+
for (int index = 0; index < localVariableTypeInfoCount; index++)
|
|
788
|
+
{
|
|
789
|
+
LocalVariableTypeInfo localVariableTypeInfo = localVariableTypeInfos[index];
|
|
790
|
+
if (localVariableTypeInfo.u2length > 0 &&
|
|
791
|
+
localVariableTypeInfo.u2index < maxLocals)
|
|
792
|
+
{
|
|
793
|
+
localVariableTypeInfos[newIndex++] = localVariableTypeInfo;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
// Clear the unused array entries.
|
|
798
|
+
Arrays.fill(localVariableTypeInfos, newIndex, localVariableTypeInfoCount, null);
|
|
799
|
+
|
|
800
|
+
return newIndex;
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
private void println(String string1, String string2)
|
|
805
|
+
{
|
|
806
|
+
print(string1, string2);
|
|
807
|
+
|
|
808
|
+
System.out.println();
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
private void print(String string1, String string2)
|
|
812
|
+
{
|
|
813
|
+
System.out.print(string1);
|
|
814
|
+
|
|
815
|
+
for (int index = 0; index < level; index++)
|
|
816
|
+
{
|
|
817
|
+
System.out.print(" ");
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
System.out.print(string2);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
public static void main(String[] args)
|
|
825
|
+
{
|
|
826
|
+
CodeAttributeComposer composer = new CodeAttributeComposer();
|
|
827
|
+
|
|
828
|
+
composer.beginCodeFragment(4);
|
|
829
|
+
composer.appendInstruction(0, new SimpleInstruction(InstructionConstants.OP_ICONST_0));
|
|
830
|
+
composer.appendInstruction(1, new VariableInstruction(InstructionConstants.OP_ISTORE, 0));
|
|
831
|
+
composer.appendInstruction(2, new BranchInstruction(InstructionConstants.OP_GOTO, 1));
|
|
832
|
+
|
|
833
|
+
composer.beginCodeFragment(4);
|
|
834
|
+
composer.appendInstruction(0, new VariableInstruction(InstructionConstants.OP_IINC, 0, 1));
|
|
835
|
+
composer.appendInstruction(1, new VariableInstruction(InstructionConstants.OP_ILOAD, 0));
|
|
836
|
+
composer.appendInstruction(2, new SimpleInstruction(InstructionConstants.OP_ICONST_5));
|
|
837
|
+
composer.appendInstruction(3, new BranchInstruction(InstructionConstants.OP_IFICMPLT, -3));
|
|
838
|
+
composer.endCodeFragment();
|
|
839
|
+
|
|
840
|
+
composer.appendInstruction(3, new SimpleInstruction(InstructionConstants.OP_RETURN));
|
|
841
|
+
composer.endCodeFragment();
|
|
842
|
+
}
|
|
843
|
+
}
|