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