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,1285 @@
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;
22
+
23
+ import proguard.classfile.ClassConstants;
24
+ import proguard.classfile.util.ClassUtil;
25
+ import proguard.util.ListUtil;
26
+
27
+ import java.io.*;
28
+ import java.net.URL;
29
+ import java.util.*;
30
+
31
+
32
+ /**
33
+ * This class parses ProGuard configurations. Configurations can be read from an
34
+ * array of arguments or from a configuration file or URL.
35
+ *
36
+ * @author Eric Lafortune
37
+ */
38
+ public class ConfigurationParser
39
+ {
40
+ private WordReader reader;
41
+ private String nextWord;
42
+ private String lastComments;
43
+
44
+
45
+ /**
46
+ * Creates a new ConfigurationParser for the given String arguments.
47
+ */
48
+ public ConfigurationParser(String[] args) throws IOException
49
+ {
50
+ this(args, null);
51
+ }
52
+
53
+
54
+ /**
55
+ * Creates a new ConfigurationParser for the given String arguments,
56
+ * with the given base directory.
57
+ */
58
+ public ConfigurationParser(String[] args,
59
+ File baseDir) throws IOException
60
+ {
61
+ this(new ArgumentWordReader(args, baseDir));
62
+ }
63
+
64
+
65
+ /**
66
+ * Creates a new ConfigurationParser for the given lines,
67
+ * with the given base directory.
68
+ */
69
+ public ConfigurationParser(String lines,
70
+ String description,
71
+ File baseDir) throws IOException
72
+ {
73
+ this(new LineWordReader(new LineNumberReader(new StringReader(lines)),
74
+ description,
75
+ baseDir));
76
+ }
77
+
78
+
79
+ /**
80
+ * Creates a new ConfigurationParser for the given file.
81
+ */
82
+ public ConfigurationParser(File file) throws IOException
83
+ {
84
+ this(new FileWordReader(file));
85
+ }
86
+
87
+
88
+ /**
89
+ * Creates a new ConfigurationParser for the given URL.
90
+ */
91
+ public ConfigurationParser(URL url) throws IOException
92
+ {
93
+ this(new FileWordReader(url));
94
+ }
95
+
96
+
97
+ /**
98
+ * Creates a new ConfigurationParser for the given word reader.
99
+ */
100
+ public ConfigurationParser(WordReader reader) throws IOException
101
+ {
102
+ this.reader = reader;
103
+
104
+ readNextWord();
105
+ }
106
+
107
+
108
+ /**
109
+ * Parses and returns the configuration.
110
+ * @param configuration the configuration that is updated as a side-effect.
111
+ * @throws ParseException if the any of the configuration settings contains
112
+ * a syntax error.
113
+ * @throws IOException if an IO error occurs while reading a configuration.
114
+ */
115
+ public void parse(Configuration configuration)
116
+ throws ParseException, IOException
117
+ {
118
+ while (nextWord != null)
119
+ {
120
+ lastComments = reader.lastComments();
121
+
122
+ // First include directives.
123
+ if (ConfigurationConstants.AT_DIRECTIVE .startsWith(nextWord) ||
124
+ ConfigurationConstants.INCLUDE_DIRECTIVE .startsWith(nextWord)) configuration.lastModified = parseIncludeArgument(configuration.lastModified);
125
+ else if (ConfigurationConstants.BASE_DIRECTORY_DIRECTIVE .startsWith(nextWord)) parseBaseDirectoryArgument();
126
+
127
+ // Then configuration options with or without arguments.
128
+ else if (ConfigurationConstants.INJARS_OPTION .startsWith(nextWord)) configuration.programJars = parseClassPathArgument(configuration.programJars, false);
129
+ else if (ConfigurationConstants.OUTJARS_OPTION .startsWith(nextWord)) configuration.programJars = parseClassPathArgument(configuration.programJars, true);
130
+ else if (ConfigurationConstants.LIBRARYJARS_OPTION .startsWith(nextWord)) configuration.libraryJars = parseClassPathArgument(configuration.libraryJars, false);
131
+ else if (ConfigurationConstants.RESOURCEJARS_OPTION .startsWith(nextWord)) throw new ParseException("The '-resourcejars' option is no longer supported. Please use the '-injars' option for all input");
132
+ else if (ConfigurationConstants.SKIP_NON_PUBLIC_LIBRARY_CLASSES_OPTION .startsWith(nextWord)) configuration.skipNonPublicLibraryClasses = parseNoArgument(true);
133
+ else if (ConfigurationConstants.DONT_SKIP_NON_PUBLIC_LIBRARY_CLASSES_OPTION .startsWith(nextWord)) configuration.skipNonPublicLibraryClasses = parseNoArgument(false);
134
+ else if (ConfigurationConstants.DONT_SKIP_NON_PUBLIC_LIBRARY_CLASS_MEMBERS_OPTION.startsWith(nextWord)) configuration.skipNonPublicLibraryClassMembers = parseNoArgument(false);
135
+ else if (ConfigurationConstants.TARGET_OPTION .startsWith(nextWord)) configuration.targetClassVersion = parseClassVersion();
136
+ else if (ConfigurationConstants.FORCE_PROCESSING_OPTION .startsWith(nextWord)) configuration.lastModified = parseNoArgument(Long.MAX_VALUE);
137
+
138
+ else if (ConfigurationConstants.KEEP_OPTION .startsWith(nextWord)) configuration.keep = parseKeepClassSpecificationArguments(configuration.keep, true, false, false);
139
+ else if (ConfigurationConstants.KEEP_CLASS_MEMBERS_OPTION .startsWith(nextWord)) configuration.keep = parseKeepClassSpecificationArguments(configuration.keep, false, false, false);
140
+ else if (ConfigurationConstants.KEEP_CLASSES_WITH_MEMBERS_OPTION .startsWith(nextWord)) configuration.keep = parseKeepClassSpecificationArguments(configuration.keep, false, true, false);
141
+ else if (ConfigurationConstants.KEEP_NAMES_OPTION .startsWith(nextWord)) configuration.keep = parseKeepClassSpecificationArguments(configuration.keep, true, false, true);
142
+ else if (ConfigurationConstants.KEEP_CLASS_MEMBER_NAMES_OPTION .startsWith(nextWord)) configuration.keep = parseKeepClassSpecificationArguments(configuration.keep, false, false, true);
143
+ else if (ConfigurationConstants.KEEP_CLASSES_WITH_MEMBER_NAMES_OPTION .startsWith(nextWord)) configuration.keep = parseKeepClassSpecificationArguments(configuration.keep, false, true, true);
144
+ else if (ConfigurationConstants.PRINT_SEEDS_OPTION .startsWith(nextWord)) configuration.printSeeds = parseOptionalFile();
145
+
146
+ // After '-keep'.
147
+ else if (ConfigurationConstants.KEEP_DIRECTORIES_OPTION .startsWith(nextWord)) configuration.keepDirectories = parseCommaSeparatedList("directory name", true, true, false, true, false, true, false, false, configuration.keepDirectories);
148
+
149
+ else if (ConfigurationConstants.DONT_SHRINK_OPTION .startsWith(nextWord)) configuration.shrink = parseNoArgument(false);
150
+ else if (ConfigurationConstants.PRINT_USAGE_OPTION .startsWith(nextWord)) configuration.printUsage = parseOptionalFile();
151
+ else if (ConfigurationConstants.WHY_ARE_YOU_KEEPING_OPTION .startsWith(nextWord)) configuration.whyAreYouKeeping = parseClassSpecificationArguments(configuration.whyAreYouKeeping);
152
+
153
+ else if (ConfigurationConstants.DONT_OPTIMIZE_OPTION .startsWith(nextWord)) configuration.optimize = parseNoArgument(false);
154
+ else if (ConfigurationConstants.OPTIMIZATION_PASSES .startsWith(nextWord)) configuration.optimizationPasses = parseIntegerArgument();
155
+ else if (ConfigurationConstants.OPTIMIZATIONS .startsWith(nextWord)) configuration.optimizations = parseCommaSeparatedList("optimization name", true, false, false, false, false, false, false, false, configuration.optimizations);
156
+ else if (ConfigurationConstants.ASSUME_NO_SIDE_EFFECTS_OPTION .startsWith(nextWord)) configuration.assumeNoSideEffects = parseClassSpecificationArguments(configuration.assumeNoSideEffects);
157
+ else if (ConfigurationConstants.ALLOW_ACCESS_MODIFICATION_OPTION .startsWith(nextWord)) configuration.allowAccessModification = parseNoArgument(true);
158
+ else if (ConfigurationConstants.MERGE_INTERFACES_AGGRESSIVELY_OPTION .startsWith(nextWord)) configuration.mergeInterfacesAggressively = parseNoArgument(true);
159
+
160
+ else if (ConfigurationConstants.DONT_OBFUSCATE_OPTION .startsWith(nextWord)) configuration.obfuscate = parseNoArgument(false);
161
+ else if (ConfigurationConstants.PRINT_MAPPING_OPTION .startsWith(nextWord)) configuration.printMapping = parseOptionalFile();
162
+ else if (ConfigurationConstants.APPLY_MAPPING_OPTION .startsWith(nextWord)) configuration.applyMapping = parseFile();
163
+ else if (ConfigurationConstants.OBFUSCATION_DICTIONARY_OPTION .startsWith(nextWord)) configuration.obfuscationDictionary = parseFile();
164
+ else if (ConfigurationConstants.CLASS_OBFUSCATION_DICTIONARY_OPTION .startsWith(nextWord)) configuration.classObfuscationDictionary = parseFile();
165
+ else if (ConfigurationConstants.PACKAGE_OBFUSCATION_DICTIONARY_OPTION .startsWith(nextWord)) configuration.packageObfuscationDictionary = parseFile();
166
+ else if (ConfigurationConstants.OVERLOAD_AGGRESSIVELY_OPTION .startsWith(nextWord)) configuration.overloadAggressively = parseNoArgument(true);
167
+ else if (ConfigurationConstants.USE_UNIQUE_CLASS_MEMBER_NAMES_OPTION .startsWith(nextWord)) configuration.useUniqueClassMemberNames = parseNoArgument(true);
168
+ else if (ConfigurationConstants.DONT_USE_MIXED_CASE_CLASS_NAMES_OPTION .startsWith(nextWord)) configuration.useMixedCaseClassNames = parseNoArgument(false);
169
+ else if (ConfigurationConstants.KEEP_PACKAGE_NAMES_OPTION .startsWith(nextWord)) configuration.keepPackageNames = parseCommaSeparatedList("package name", true, true, false, false, true, false, true, false, configuration.keepPackageNames);
170
+ else if (ConfigurationConstants.FLATTEN_PACKAGE_HIERARCHY_OPTION .startsWith(nextWord)) configuration.flattenPackageHierarchy = ClassUtil.internalClassName(parseOptionalArgument());
171
+ else if (ConfigurationConstants.REPACKAGE_CLASSES_OPTION .startsWith(nextWord)) configuration.repackageClasses = ClassUtil.internalClassName(parseOptionalArgument());
172
+ else if (ConfigurationConstants.DEFAULT_PACKAGE_OPTION .startsWith(nextWord)) configuration.repackageClasses = ClassUtil.internalClassName(parseOptionalArgument());
173
+ else if (ConfigurationConstants.KEEP_ATTRIBUTES_OPTION .startsWith(nextWord)) configuration.keepAttributes = parseCommaSeparatedList("attribute name", true, true, false, false, true, false, false, false, configuration.keepAttributes);
174
+ else if (ConfigurationConstants.KEEP_PARAMETER_NAMES_OPTION .startsWith(nextWord)) configuration.keepParameterNames = parseNoArgument(true);
175
+ else if (ConfigurationConstants.RENAME_SOURCE_FILE_ATTRIBUTE_OPTION .startsWith(nextWord)) configuration.newSourceFileAttribute = parseOptionalArgument();
176
+ else if (ConfigurationConstants.ADAPT_CLASS_STRINGS_OPTION .startsWith(nextWord)) configuration.adaptClassStrings = parseCommaSeparatedList("class name", true, true, false, false, true, false, true, false, configuration.adaptClassStrings);
177
+ else if (ConfigurationConstants.ADAPT_RESOURCE_FILE_NAMES_OPTION .startsWith(nextWord)) configuration.adaptResourceFileNames = parseCommaSeparatedList("resource file name", true, true, false, true, false, false, false, false, configuration.adaptResourceFileNames);
178
+ else if (ConfigurationConstants.ADAPT_RESOURCE_FILE_CONTENTS_OPTION .startsWith(nextWord)) configuration.adaptResourceFileContents = parseCommaSeparatedList("resource file name", true, true, false, true, false, false, false, false, configuration.adaptResourceFileContents);
179
+
180
+ else if (ConfigurationConstants.DONT_PREVERIFY_OPTION .startsWith(nextWord)) configuration.preverify = parseNoArgument(false);
181
+ else if (ConfigurationConstants.MICRO_EDITION_OPTION .startsWith(nextWord)) configuration.microEdition = parseNoArgument(true);
182
+
183
+ else if (ConfigurationConstants.VERBOSE_OPTION .startsWith(nextWord)) configuration.verbose = parseNoArgument(true);
184
+ else if (ConfigurationConstants.DONT_NOTE_OPTION .startsWith(nextWord)) configuration.note = parseCommaSeparatedList("class name", true, true, false, false, true, false, true, false, configuration.note);
185
+ else if (ConfigurationConstants.DONT_WARN_OPTION .startsWith(nextWord)) configuration.warn = parseCommaSeparatedList("class name", true, true, false, false, true, false, true, false, configuration.warn);
186
+ else if (ConfigurationConstants.IGNORE_WARNINGS_OPTION .startsWith(nextWord)) configuration.ignoreWarnings = parseNoArgument(true);
187
+ else if (ConfigurationConstants.PRINT_CONFIGURATION_OPTION .startsWith(nextWord)) configuration.printConfiguration = parseOptionalFile();
188
+ else if (ConfigurationConstants.DUMP_OPTION .startsWith(nextWord)) configuration.dump = parseOptionalFile();
189
+ else
190
+ {
191
+ throw new ParseException("Unknown option " + reader.locationDescription());
192
+ }
193
+ }
194
+ }
195
+
196
+
197
+
198
+ /**
199
+ * Closes the configuration.
200
+ * @throws IOException if an IO error occurs while closing the configuration.
201
+ */
202
+ public void close() throws IOException
203
+ {
204
+ if (reader != null)
205
+ {
206
+ reader.close();
207
+ }
208
+ }
209
+
210
+
211
+ private long parseIncludeArgument(long lastModified) throws ParseException, IOException
212
+ {
213
+ // Read the configuation file name.
214
+ readNextWord("configuration file name", true, false);
215
+
216
+ File file = file(nextWord);
217
+ reader.includeWordReader(new FileWordReader(file));
218
+
219
+ readNextWord();
220
+
221
+ return Math.max(lastModified, file.lastModified());
222
+ }
223
+
224
+
225
+ private void parseBaseDirectoryArgument() throws ParseException, IOException
226
+ {
227
+ // Read the base directory name.
228
+ readNextWord("base directory name", true, false);
229
+
230
+ reader.setBaseDir(file(nextWord));
231
+
232
+ readNextWord();
233
+ }
234
+
235
+
236
+ private ClassPath parseClassPathArgument(ClassPath classPath,
237
+ boolean isOutput)
238
+ throws ParseException, IOException
239
+ {
240
+ // Create a new List if necessary.
241
+ if (classPath == null)
242
+ {
243
+ classPath = new ClassPath();
244
+ }
245
+
246
+ while (true)
247
+ {
248
+ // Read the next jar name.
249
+ readNextWord("jar or directory name", true, false);
250
+
251
+ // Create a new class path entry.
252
+ ClassPathEntry entry = new ClassPathEntry(file(nextWord), isOutput);
253
+
254
+ // Read the opening parenthesis or the separator, if any.
255
+ readNextWord();
256
+
257
+ // Read the optional filters.
258
+ if (!configurationEnd() &&
259
+ ConfigurationConstants.OPEN_ARGUMENTS_KEYWORD.equals(nextWord))
260
+ {
261
+ // Read all filters in an array.
262
+ List[] filters = new List[5];
263
+
264
+ int counter = 0;
265
+ do
266
+ {
267
+ // Read the filter.
268
+ filters[counter++] =
269
+ parseCommaSeparatedList("filter", true, false, true, true, false, true, false, false, null);
270
+ }
271
+ while (counter < filters.length &&
272
+ ConfigurationConstants.SEPARATOR_KEYWORD.equals(nextWord));
273
+
274
+ // Make sure there is a closing parenthesis.
275
+ if (!ConfigurationConstants.CLOSE_ARGUMENTS_KEYWORD.equals(nextWord))
276
+ {
277
+ throw new ParseException("Expecting separating '" + ConfigurationConstants.ARGUMENT_SEPARATOR_KEYWORD +
278
+ "' or '" + ConfigurationConstants.SEPARATOR_KEYWORD +
279
+ "', or closing '" + ConfigurationConstants.CLOSE_ARGUMENTS_KEYWORD +
280
+ "' before " + reader.locationDescription());
281
+ }
282
+
283
+ // Set all filters from the array on the entry.
284
+ entry.setFilter(filters[--counter]);
285
+ if (counter > 0)
286
+ {
287
+ entry.setJarFilter(filters[--counter]);
288
+ if (counter > 0)
289
+ {
290
+ entry.setWarFilter(filters[--counter]);
291
+ if (counter > 0)
292
+ {
293
+ entry.setEarFilter(filters[--counter]);
294
+ if (counter > 0)
295
+ {
296
+ entry.setZipFilter(filters[--counter]);
297
+ }
298
+ }
299
+ }
300
+ }
301
+
302
+ // Read the separator, if any.
303
+ readNextWord();
304
+ }
305
+
306
+ // Add the entry to the list.
307
+ classPath.add(entry);
308
+
309
+ if (configurationEnd())
310
+ {
311
+ return classPath;
312
+ }
313
+
314
+ if (!nextWord.equals(ConfigurationConstants.JAR_SEPARATOR_KEYWORD))
315
+ {
316
+ throw new ParseException("Expecting class path separator '" + ConfigurationConstants.JAR_SEPARATOR_KEYWORD +
317
+ "' before " + reader.locationDescription());
318
+ }
319
+ }
320
+ }
321
+
322
+
323
+ private int parseClassVersion()
324
+ throws ParseException, IOException
325
+ {
326
+ // Read the obligatory target.
327
+ readNextWord("java version");
328
+
329
+ int classVersion = ClassUtil.internalClassVersion(nextWord);
330
+ if (classVersion == 0)
331
+ {
332
+ throw new ParseException("Unsupported java version " + reader.locationDescription());
333
+ }
334
+
335
+ readNextWord();
336
+
337
+ return classVersion;
338
+ }
339
+
340
+
341
+ private int parseIntegerArgument()
342
+ throws ParseException, IOException
343
+ {
344
+ try
345
+ {
346
+ // Read the obligatory integer.
347
+ readNextWord("integer");
348
+
349
+ int integer = Integer.parseInt(nextWord);
350
+
351
+ readNextWord();
352
+
353
+ return integer;
354
+ }
355
+ catch (NumberFormatException e)
356
+ {
357
+ throw new ParseException("Expecting integer argument instead of '" + nextWord +
358
+ "' before " + reader.locationDescription());
359
+ }
360
+ }
361
+
362
+
363
+ private File parseFile()
364
+ throws ParseException, IOException
365
+ {
366
+ // Read the obligatory file name.
367
+ readNextWord("file name", true, false);
368
+
369
+ // Make sure the file is properly resolved.
370
+ File file = file(nextWord);
371
+
372
+ readNextWord();
373
+
374
+ return file;
375
+ }
376
+
377
+
378
+ private File parseOptionalFile()
379
+ throws ParseException, IOException
380
+ {
381
+ // Read the optional file name.
382
+ readNextWord(true);
383
+
384
+ // Didn't the user specify a file name?
385
+ if (configurationEnd())
386
+ {
387
+ return new File("");
388
+ }
389
+
390
+ // Make sure the file is properly resolved.
391
+ File file = file(nextWord);
392
+
393
+ readNextWord();
394
+
395
+ return file;
396
+ }
397
+
398
+
399
+ private String parseOptionalArgument() throws IOException
400
+ {
401
+ // Read the optional argument.
402
+ readNextWord();
403
+
404
+ // Didn't the user specify an argument?
405
+ if (configurationEnd())
406
+ {
407
+ return "";
408
+ }
409
+
410
+ String argument = nextWord;
411
+
412
+ readNextWord();
413
+
414
+ return argument;
415
+ }
416
+
417
+
418
+ private boolean parseNoArgument(boolean value) throws IOException
419
+ {
420
+ readNextWord();
421
+
422
+ return value;
423
+ }
424
+
425
+
426
+ private long parseNoArgument(long value) throws IOException
427
+ {
428
+ readNextWord();
429
+
430
+ return value;
431
+ }
432
+
433
+
434
+ private List parseKeepClassSpecificationArguments(List keepClassSpecifications,
435
+ boolean markClasses,
436
+ boolean markConditionally,
437
+ boolean allowShrinking)
438
+ throws ParseException, IOException
439
+ {
440
+ // Create a new List if necessary.
441
+ if (keepClassSpecifications == null)
442
+ {
443
+ keepClassSpecifications = new ArrayList();
444
+ }
445
+
446
+ //boolean allowShrinking = false;
447
+ boolean allowOptimization = false;
448
+ boolean allowObfuscation = false;
449
+
450
+ // Read the keep modifiers.
451
+ while (true)
452
+ {
453
+ readNextWord("keyword '" + ConfigurationConstants.CLASS_KEYWORD +
454
+ "', '" + ClassConstants.EXTERNAL_ACC_INTERFACE +
455
+ "', or '" + ClassConstants.EXTERNAL_ACC_ENUM + "'",
456
+ false, true);
457
+
458
+ if (!ConfigurationConstants.ARGUMENT_SEPARATOR_KEYWORD.equals(nextWord))
459
+ {
460
+ // Not a comma. Stop parsing the keep modifiers.
461
+ break;
462
+ }
463
+
464
+ readNextWord("keyword '" + ConfigurationConstants.ALLOW_SHRINKING_SUBOPTION +
465
+ "', '" + ConfigurationConstants.ALLOW_OPTIMIZATION_SUBOPTION +
466
+ "', or '" + ConfigurationConstants.ALLOW_OBFUSCATION_SUBOPTION + "'");
467
+
468
+ if (ConfigurationConstants.ALLOW_SHRINKING_SUBOPTION .startsWith(nextWord))
469
+ {
470
+ allowShrinking = true;
471
+ }
472
+ else if (ConfigurationConstants.ALLOW_OPTIMIZATION_SUBOPTION.startsWith(nextWord))
473
+ {
474
+ allowOptimization = true;
475
+ }
476
+ else if (ConfigurationConstants.ALLOW_OBFUSCATION_SUBOPTION .startsWith(nextWord))
477
+ {
478
+ allowObfuscation = true;
479
+ }
480
+ else
481
+ {
482
+ throw new ParseException("Expecting keyword '" + ConfigurationConstants.ALLOW_SHRINKING_SUBOPTION +
483
+ "', '" + ConfigurationConstants.ALLOW_OPTIMIZATION_SUBOPTION +
484
+ "', or '" + ConfigurationConstants.ALLOW_OBFUSCATION_SUBOPTION +
485
+ "' before " + reader.locationDescription());
486
+ }
487
+ }
488
+
489
+ // Read the class configuration.
490
+ ClassSpecification classSpecification =
491
+ parseClassSpecificationArguments();
492
+
493
+ // Create and add the keep configuration.
494
+ keepClassSpecifications.add(new KeepClassSpecification(markClasses,
495
+ markConditionally,
496
+ allowShrinking,
497
+ allowOptimization,
498
+ allowObfuscation,
499
+ classSpecification));
500
+ return keepClassSpecifications;
501
+ }
502
+
503
+
504
+ private List parseClassSpecificationArguments(List classSpecifications)
505
+ throws ParseException, IOException
506
+ {
507
+ // Create a new List if necessary.
508
+ if (classSpecifications == null)
509
+ {
510
+ classSpecifications = new ArrayList();
511
+ }
512
+
513
+ // Read and add the class configuration.
514
+ readNextWord("keyword '" + ConfigurationConstants.CLASS_KEYWORD +
515
+ "', '" + ClassConstants.EXTERNAL_ACC_INTERFACE +
516
+ "', or '" + ClassConstants.EXTERNAL_ACC_ENUM + "'",
517
+ false, true);
518
+
519
+ classSpecifications.add(parseClassSpecificationArguments());
520
+
521
+ return classSpecifications;
522
+ }
523
+
524
+
525
+ private ClassSpecification parseClassSpecificationArguments()
526
+ throws ParseException, IOException
527
+ {
528
+ // Clear the annotation type.
529
+ String annotationType = null;
530
+
531
+ // Clear the class access modifiers.
532
+ int requiredSetClassAccessFlags = 0;
533
+ int requiredUnsetClassAccessFlags = 0;
534
+
535
+ // Parse the class annotations and access modifiers until the class keyword.
536
+ while (!ConfigurationConstants.CLASS_KEYWORD.equals(nextWord))
537
+ {
538
+ // Strip the negating sign, if any.
539
+ boolean negated =
540
+ nextWord.startsWith(ConfigurationConstants.NEGATOR_KEYWORD);
541
+
542
+ String strippedWord = negated ?
543
+ nextWord.substring(1) :
544
+ nextWord;
545
+
546
+ // Parse the class access modifiers.
547
+ int accessFlag =
548
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_PUBLIC) ? ClassConstants.INTERNAL_ACC_PUBLIC :
549
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_FINAL) ? ClassConstants.INTERNAL_ACC_FINAL :
550
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_INTERFACE) ? ClassConstants.INTERNAL_ACC_INTERFACE :
551
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_ABSTRACT) ? ClassConstants.INTERNAL_ACC_ABSTRACT :
552
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_SYNTHETIC) ? ClassConstants.INTERNAL_ACC_SYNTHETIC :
553
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_ANNOTATION) ? ClassConstants.INTERNAL_ACC_ANNOTATTION :
554
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_ENUM) ? ClassConstants.INTERNAL_ACC_ENUM :
555
+ unknownAccessFlag();
556
+
557
+ // Is it an annotation modifier?
558
+ if (accessFlag == ClassConstants.INTERNAL_ACC_ANNOTATTION)
559
+ {
560
+ // Already read the next word.
561
+ readNextWord("annotation type or keyword '" + ClassConstants.EXTERNAL_ACC_INTERFACE + "'",
562
+ false, false);
563
+
564
+ // Is the next word actually an annotation type?
565
+ if (!nextWord.equals(ClassConstants.EXTERNAL_ACC_INTERFACE) &&
566
+ !nextWord.equals(ClassConstants.EXTERNAL_ACC_ENUM) &&
567
+ !nextWord.equals(ConfigurationConstants.CLASS_KEYWORD))
568
+ {
569
+ // Parse the annotation type.
570
+ annotationType =
571
+ ListUtil.commaSeparatedString(
572
+ parseCommaSeparatedList("annotation type",
573
+ false, false, false, false, true, false, false, true, null), false);
574
+
575
+ // Continue parsing the access modifier that we just read
576
+ // in the next cycle.
577
+ continue;
578
+ }
579
+
580
+ // Otherwise just handle the annotation modifier.
581
+ }
582
+
583
+ if (!negated)
584
+ {
585
+ requiredSetClassAccessFlags |= accessFlag;
586
+ }
587
+ else
588
+ {
589
+ requiredUnsetClassAccessFlags |= accessFlag;
590
+ }
591
+
592
+ if ((requiredSetClassAccessFlags &
593
+ requiredUnsetClassAccessFlags) != 0)
594
+ {
595
+ throw new ParseException("Conflicting class access modifiers for '" + strippedWord +
596
+ "' before " + reader.locationDescription());
597
+ }
598
+
599
+ if (strippedWord.equals(ClassConstants.EXTERNAL_ACC_INTERFACE) ||
600
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_ENUM) ||
601
+ strippedWord.equals(ConfigurationConstants.CLASS_KEYWORD))
602
+ {
603
+ // The interface or enum keyword. Stop parsing the class flags.
604
+ break;
605
+ }
606
+
607
+ // Should we read the next word?
608
+ if (accessFlag != ClassConstants.INTERNAL_ACC_ANNOTATTION)
609
+ {
610
+ readNextWord("keyword '" + ConfigurationConstants.CLASS_KEYWORD +
611
+ "', '" + ClassConstants.EXTERNAL_ACC_INTERFACE +
612
+ "', or '" + ClassConstants.EXTERNAL_ACC_ENUM + "'",
613
+ false, true);
614
+ }
615
+ }
616
+
617
+ // Parse the class name part.
618
+ String externalClassName =
619
+ ListUtil.commaSeparatedString(
620
+ parseCommaSeparatedList("class name or interface name",
621
+ true, false, false, false, true, false, false, false, null), false);
622
+
623
+ // For backward compatibility, allow a single "*" wildcard to match any
624
+ // class.
625
+ String className = ConfigurationConstants.ANY_CLASS_KEYWORD.equals(externalClassName) ?
626
+ null :
627
+ ClassUtil.internalClassName(externalClassName);
628
+
629
+ // Clear the annotation type and the class name of the extends part.
630
+ String extendsAnnotationType = null;
631
+ String extendsClassName = null;
632
+
633
+ if (!configurationEnd())
634
+ {
635
+ // Parse 'implements ...' or 'extends ...' part, if any.
636
+ if (ConfigurationConstants.IMPLEMENTS_KEYWORD.equals(nextWord) ||
637
+ ConfigurationConstants.EXTENDS_KEYWORD.equals(nextWord))
638
+ {
639
+ readNextWord("class name or interface name", false, true);
640
+
641
+ // Parse the annotation type, if any.
642
+ if (ConfigurationConstants.ANNOTATION_KEYWORD.equals(nextWord))
643
+ {
644
+ extendsAnnotationType =
645
+ ListUtil.commaSeparatedString(
646
+ parseCommaSeparatedList("annotation type",
647
+ true, false, false, false, true, false, false, true, null), false);
648
+ }
649
+
650
+ String externalExtendsClassName =
651
+ ListUtil.commaSeparatedString(
652
+ parseCommaSeparatedList("class name or interface name",
653
+ false, false, false, false, true, false, false, false, null), false);
654
+
655
+ extendsClassName = ConfigurationConstants.ANY_CLASS_KEYWORD.equals(externalExtendsClassName) ?
656
+ null :
657
+ ClassUtil.internalClassName(externalExtendsClassName);
658
+ }
659
+ }
660
+
661
+ // Create the basic class specification.
662
+ ClassSpecification classSpecification =
663
+ new ClassSpecification(lastComments,
664
+ requiredSetClassAccessFlags,
665
+ requiredUnsetClassAccessFlags,
666
+ annotationType,
667
+ className,
668
+ extendsAnnotationType,
669
+ extendsClassName);
670
+
671
+
672
+ // Now add any class members to this class specification.
673
+ if (!configurationEnd())
674
+ {
675
+ // Check the class member opening part.
676
+ if (!ConfigurationConstants.OPEN_KEYWORD.equals(nextWord))
677
+ {
678
+ throw new ParseException("Expecting opening '" + ConfigurationConstants.OPEN_KEYWORD +
679
+ "' at " + reader.locationDescription());
680
+ }
681
+
682
+ // Parse all class members.
683
+ while (true)
684
+ {
685
+ readNextWord("class member description" +
686
+ " or closing '" + ConfigurationConstants.CLOSE_KEYWORD + "'",
687
+ false, true);
688
+
689
+ if (nextWord.equals(ConfigurationConstants.CLOSE_KEYWORD))
690
+ {
691
+ // The closing brace. Stop parsing the class members.
692
+ readNextWord();
693
+
694
+ break;
695
+ }
696
+
697
+ parseMemberSpecificationArguments(externalClassName,
698
+ classSpecification);
699
+ }
700
+ }
701
+
702
+ return classSpecification;
703
+ }
704
+
705
+
706
+ private void parseMemberSpecificationArguments(String externalClassName,
707
+ ClassSpecification classSpecification)
708
+ throws ParseException, IOException
709
+ {
710
+ // Clear the annotation name.
711
+ String annotationType = null;
712
+
713
+ // Parse the class member access modifiers, if any.
714
+ int requiredSetMemberAccessFlags = 0;
715
+ int requiredUnsetMemberAccessFlags = 0;
716
+
717
+ while (!configurationEnd(true))
718
+ {
719
+ // Parse the annotation type, if any.
720
+ if (ConfigurationConstants.ANNOTATION_KEYWORD.equals(nextWord))
721
+ {
722
+ annotationType =
723
+ ListUtil.commaSeparatedString(
724
+ parseCommaSeparatedList("annotation type",
725
+ true, false, false, false, true, false, false, true, null), false);
726
+ continue;
727
+ }
728
+
729
+ String strippedWord = nextWord.startsWith("!") ?
730
+ nextWord.substring(1) :
731
+ nextWord;
732
+
733
+ // Parse the class member access modifiers.
734
+ int accessFlag =
735
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_PUBLIC) ? ClassConstants.INTERNAL_ACC_PUBLIC :
736
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_PRIVATE) ? ClassConstants.INTERNAL_ACC_PRIVATE :
737
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_PROTECTED) ? ClassConstants.INTERNAL_ACC_PROTECTED :
738
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_STATIC) ? ClassConstants.INTERNAL_ACC_STATIC :
739
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_FINAL) ? ClassConstants.INTERNAL_ACC_FINAL :
740
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_SYNCHRONIZED) ? ClassConstants.INTERNAL_ACC_SYNCHRONIZED :
741
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_VOLATILE) ? ClassConstants.INTERNAL_ACC_VOLATILE :
742
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_TRANSIENT) ? ClassConstants.INTERNAL_ACC_TRANSIENT :
743
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_BRIDGE) ? ClassConstants.INTERNAL_ACC_BRIDGE :
744
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_VARARGS) ? ClassConstants.INTERNAL_ACC_VARARGS :
745
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_NATIVE) ? ClassConstants.INTERNAL_ACC_NATIVE :
746
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_ABSTRACT) ? ClassConstants.INTERNAL_ACC_ABSTRACT :
747
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_STRICT) ? ClassConstants.INTERNAL_ACC_STRICT :
748
+ strippedWord.equals(ClassConstants.EXTERNAL_ACC_SYNTHETIC) ? ClassConstants.INTERNAL_ACC_SYNTHETIC :
749
+ 0;
750
+ if (accessFlag == 0)
751
+ {
752
+ // Not a class member access modifier. Stop parsing them.
753
+ break;
754
+ }
755
+
756
+ if (strippedWord.equals(nextWord))
757
+ {
758
+ requiredSetMemberAccessFlags |= accessFlag;
759
+ }
760
+ else
761
+ {
762
+ requiredUnsetMemberAccessFlags |= accessFlag;
763
+ }
764
+
765
+ // Make sure the user doesn't try to set and unset the same
766
+ // access flags simultaneously.
767
+ if ((requiredSetMemberAccessFlags &
768
+ requiredUnsetMemberAccessFlags) != 0)
769
+ {
770
+ throw new ParseException("Conflicting class member access modifiers for " +
771
+ reader.locationDescription());
772
+ }
773
+
774
+ readNextWord("class member description");
775
+ }
776
+
777
+ // Parse the class member type and name part.
778
+
779
+ // Did we get a special wildcard?
780
+ if (ConfigurationConstants.ANY_CLASS_MEMBER_KEYWORD.equals(nextWord) ||
781
+ ConfigurationConstants.ANY_FIELD_KEYWORD .equals(nextWord) ||
782
+ ConfigurationConstants.ANY_METHOD_KEYWORD .equals(nextWord))
783
+ {
784
+ // Act according to the type of wildcard..
785
+ if (ConfigurationConstants.ANY_CLASS_MEMBER_KEYWORD.equals(nextWord))
786
+ {
787
+ checkFieldAccessFlags(requiredSetMemberAccessFlags,
788
+ requiredUnsetMemberAccessFlags);
789
+ checkMethodAccessFlags(requiredSetMemberAccessFlags,
790
+ requiredUnsetMemberAccessFlags);
791
+
792
+ classSpecification.addField(
793
+ new MemberSpecification(requiredSetMemberAccessFlags,
794
+ requiredUnsetMemberAccessFlags,
795
+ annotationType,
796
+ null,
797
+ null));
798
+ classSpecification.addMethod(
799
+ new MemberSpecification(requiredSetMemberAccessFlags,
800
+ requiredUnsetMemberAccessFlags,
801
+ annotationType,
802
+ null,
803
+ null));
804
+ }
805
+ else if (ConfigurationConstants.ANY_FIELD_KEYWORD.equals(nextWord))
806
+ {
807
+ checkFieldAccessFlags(requiredSetMemberAccessFlags,
808
+ requiredUnsetMemberAccessFlags);
809
+
810
+ classSpecification.addField(
811
+ new MemberSpecification(requiredSetMemberAccessFlags,
812
+ requiredUnsetMemberAccessFlags,
813
+ annotationType,
814
+ null,
815
+ null));
816
+ }
817
+ else if (ConfigurationConstants.ANY_METHOD_KEYWORD.equals(nextWord))
818
+ {
819
+ checkMethodAccessFlags(requiredSetMemberAccessFlags,
820
+ requiredUnsetMemberAccessFlags);
821
+
822
+ classSpecification.addMethod(
823
+ new MemberSpecification(requiredSetMemberAccessFlags,
824
+ requiredUnsetMemberAccessFlags,
825
+ annotationType,
826
+ null,
827
+ null));
828
+ }
829
+
830
+ // We still have to read the closing separator.
831
+ readNextWord("separator '" + ConfigurationConstants.SEPARATOR_KEYWORD + "'");
832
+
833
+ if (!ConfigurationConstants.SEPARATOR_KEYWORD.equals(nextWord))
834
+ {
835
+ throw new ParseException("Expecting separator '" + ConfigurationConstants.SEPARATOR_KEYWORD +
836
+ "' before " + reader.locationDescription());
837
+ }
838
+ }
839
+ else
840
+ {
841
+ // Make sure we have a proper type.
842
+ checkJavaIdentifier("java type");
843
+ String type = nextWord;
844
+
845
+ readNextWord("class member name");
846
+ String name = nextWord;
847
+
848
+ // Did we get just one word before the opening parenthesis?
849
+ if (ConfigurationConstants.OPEN_ARGUMENTS_KEYWORD.equals(name))
850
+ {
851
+ // This must be a constructor then.
852
+ // Make sure the type is a proper constructor name.
853
+ if (!(type.equals(ClassConstants.INTERNAL_METHOD_NAME_INIT) ||
854
+ type.equals(externalClassName) ||
855
+ type.equals(ClassUtil.externalShortClassName(externalClassName))))
856
+ {
857
+ throw new ParseException("Expecting type and name " +
858
+ "instead of just '" + type +
859
+ "' before " + reader.locationDescription());
860
+ }
861
+
862
+ // Assign the fixed constructor type and name.
863
+ type = ClassConstants.EXTERNAL_TYPE_VOID;
864
+ name = ClassConstants.INTERNAL_METHOD_NAME_INIT;
865
+ }
866
+ else
867
+ {
868
+ // It's not a constructor.
869
+ // Make sure we have a proper name.
870
+ checkJavaIdentifier("class member name");
871
+
872
+ // Read the opening parenthesis or the separating
873
+ // semi-colon.
874
+ readNextWord("opening '" + ConfigurationConstants.OPEN_ARGUMENTS_KEYWORD +
875
+ "' or separator '" + ConfigurationConstants.SEPARATOR_KEYWORD + "'");
876
+ }
877
+
878
+ // Are we looking at a field, a method, or something else?
879
+ if (ConfigurationConstants.SEPARATOR_KEYWORD.equals(nextWord))
880
+ {
881
+ // It's a field.
882
+ checkFieldAccessFlags(requiredSetMemberAccessFlags,
883
+ requiredUnsetMemberAccessFlags);
884
+
885
+ // We already have a field descriptor.
886
+ String descriptor = ClassUtil.internalType(type);
887
+
888
+ // Add the field.
889
+ classSpecification.addField(
890
+ new MemberSpecification(requiredSetMemberAccessFlags,
891
+ requiredUnsetMemberAccessFlags,
892
+ annotationType,
893
+ name,
894
+ descriptor));
895
+ }
896
+ else if (ConfigurationConstants.OPEN_ARGUMENTS_KEYWORD.equals(nextWord))
897
+ {
898
+ // It's a method.
899
+ checkMethodAccessFlags(requiredSetMemberAccessFlags,
900
+ requiredUnsetMemberAccessFlags);
901
+
902
+ // Parse the method arguments.
903
+ String descriptor =
904
+ ClassUtil.internalMethodDescriptor(type,
905
+ parseCommaSeparatedList("argument", true, true, true, false, true, false, false, false, null));
906
+
907
+ if (!ConfigurationConstants.CLOSE_ARGUMENTS_KEYWORD.equals(nextWord))
908
+ {
909
+ throw new ParseException("Expecting separating '" + ConfigurationConstants.ARGUMENT_SEPARATOR_KEYWORD +
910
+ "' or closing '" + ConfigurationConstants.CLOSE_ARGUMENTS_KEYWORD +
911
+ "' before " + reader.locationDescription());
912
+ }
913
+
914
+ // Read the separator after the closing parenthesis.
915
+ readNextWord("separator '" + ConfigurationConstants.SEPARATOR_KEYWORD + "'");
916
+
917
+ if (!ConfigurationConstants.SEPARATOR_KEYWORD.equals(nextWord))
918
+ {
919
+ throw new ParseException("Expecting separator '" + ConfigurationConstants.SEPARATOR_KEYWORD +
920
+ "' before " + reader.locationDescription());
921
+ }
922
+
923
+ // Add the method.
924
+ classSpecification.addMethod(
925
+ new MemberSpecification(requiredSetMemberAccessFlags,
926
+ requiredUnsetMemberAccessFlags,
927
+ annotationType,
928
+ name,
929
+ descriptor));
930
+ }
931
+ else
932
+ {
933
+ // It doesn't look like a field or a method.
934
+ throw new ParseException("Expecting opening '" + ConfigurationConstants.OPEN_ARGUMENTS_KEYWORD +
935
+ "' or separator '" + ConfigurationConstants.SEPARATOR_KEYWORD +
936
+ "' before " + reader.locationDescription());
937
+ }
938
+ }
939
+ }
940
+
941
+
942
+ /**
943
+ * Reads a comma-separated list of java identifiers or of file names. If an
944
+ * empty list is allowed, the reading will end after a closing parenthesis
945
+ * or semi-colon.
946
+ */
947
+ private List parseCommaSeparatedList(String expectedDescription,
948
+ boolean readFirstWord,
949
+ boolean allowEmptyList,
950
+ boolean expectClosingParenthesis,
951
+ boolean isFileName,
952
+ boolean checkJavaIdentifiers,
953
+ boolean replaceSystemProperties,
954
+ boolean replaceExternalClassNames,
955
+ boolean replaceExternalTypes,
956
+ List list)
957
+ throws ParseException, IOException
958
+ {
959
+ if (list == null)
960
+ {
961
+ list = new ArrayList();
962
+ }
963
+
964
+ if (readFirstWord)
965
+ {
966
+ if (expectClosingParenthesis || !allowEmptyList)
967
+ {
968
+ // Read the first list entry.
969
+ readNextWord(expectedDescription, isFileName, false);
970
+ }
971
+ else
972
+ {
973
+ // Read the first list entry, if there is any.
974
+ readNextWord(isFileName);
975
+
976
+ // Check if the list is empty.
977
+ if (configurationEnd() ||
978
+ nextWord.equals(ConfigurationConstants.ANY_ATTRIBUTE_KEYWORD))
979
+ {
980
+ return list;
981
+ }
982
+ }
983
+ }
984
+
985
+ while (true)
986
+ {
987
+ if (expectClosingParenthesis &&
988
+ list.size() == 0 &&
989
+ (ConfigurationConstants.CLOSE_ARGUMENTS_KEYWORD.equals(nextWord) ||
990
+ ConfigurationConstants.SEPARATOR_KEYWORD.equals(nextWord)))
991
+ {
992
+ break;
993
+ }
994
+
995
+ if (checkJavaIdentifiers)
996
+ {
997
+ checkJavaIdentifier("java type");
998
+ }
999
+
1000
+ if (replaceSystemProperties)
1001
+ {
1002
+ nextWord = replaceSystemProperties(nextWord);
1003
+ }
1004
+
1005
+ if (replaceExternalClassNames)
1006
+ {
1007
+ nextWord = ClassUtil.internalClassName(nextWord);
1008
+ }
1009
+
1010
+ if (replaceExternalTypes)
1011
+ {
1012
+ nextWord = ClassUtil.internalType(nextWord);
1013
+ }
1014
+
1015
+ list.add(nextWord);
1016
+
1017
+ if (expectClosingParenthesis)
1018
+ {
1019
+ // Read a comma (or a closing parenthesis, or a different word).
1020
+ readNextWord("separating '" + ConfigurationConstants.ARGUMENT_SEPARATOR_KEYWORD +
1021
+ "' or closing '" + ConfigurationConstants.CLOSE_ARGUMENTS_KEYWORD +
1022
+ "'");
1023
+ }
1024
+ else
1025
+ {
1026
+ // Read a comma (or a different word).
1027
+ readNextWord();
1028
+ }
1029
+
1030
+ if (!ConfigurationConstants.ARGUMENT_SEPARATOR_KEYWORD.equals(nextWord))
1031
+ {
1032
+ break;
1033
+ }
1034
+
1035
+ // Read the next list entry.
1036
+ readNextWord(expectedDescription, isFileName, false);
1037
+ }
1038
+
1039
+ return list;
1040
+ }
1041
+
1042
+
1043
+ /**
1044
+ * Throws a ParseException for an unexpected keyword.
1045
+ */
1046
+ private int unknownAccessFlag() throws ParseException
1047
+ {
1048
+ throw new ParseException("Unexpected keyword " + reader.locationDescription());
1049
+ }
1050
+
1051
+
1052
+ /**
1053
+ * Creates a properly resolved File, based on the given word.
1054
+ */
1055
+ private File file(String word) throws ParseException
1056
+ {
1057
+ String fileName = replaceSystemProperties(word);
1058
+ File file = new File(fileName);
1059
+
1060
+ // Try to get an absolute file.
1061
+ if (!file.isAbsolute())
1062
+ {
1063
+ file = new File(reader.getBaseDir(), fileName);
1064
+ }
1065
+
1066
+ return file;
1067
+ }
1068
+
1069
+
1070
+ /**
1071
+ * Replaces any system properties in the given word by their values
1072
+ * (e.g. the substring "<java.home>" is replaced by its value).
1073
+ */
1074
+ private String replaceSystemProperties(String word) throws ParseException
1075
+ {
1076
+ int fromIndex = 0;
1077
+ while (true)
1078
+ {
1079
+ fromIndex = word.indexOf(ConfigurationConstants.OPEN_SYSTEM_PROPERTY, fromIndex);
1080
+ if (fromIndex < 0)
1081
+ {
1082
+ break;
1083
+ }
1084
+
1085
+ int toIndex = word.indexOf(ConfigurationConstants.CLOSE_SYSTEM_PROPERTY, fromIndex+1);
1086
+ if (toIndex < 0)
1087
+ {
1088
+ throw new ParseException("Expecting closing '" + ConfigurationConstants.CLOSE_SYSTEM_PROPERTY +
1089
+ "' after opening '" + ConfigurationConstants.OPEN_SYSTEM_PROPERTY +
1090
+ "' in " + reader.locationDescription());
1091
+ }
1092
+
1093
+ String propertyName = word.substring(fromIndex+1, toIndex);
1094
+ String propertyValue = System.getProperty(propertyName);
1095
+ if (propertyValue == null)
1096
+ {
1097
+ throw new ParseException("Value of system property '" + propertyName +
1098
+ "' is undefined in " + reader.locationDescription());
1099
+ }
1100
+
1101
+ word = word.substring(0, fromIndex) +
1102
+ propertyValue +
1103
+ word.substring(toIndex+1);
1104
+ }
1105
+
1106
+ return word;
1107
+ }
1108
+
1109
+
1110
+ /**
1111
+ * Reads the next word of the configuration in the 'nextWord' field,
1112
+ * throwing an exception if there is no next word.
1113
+ */
1114
+ private void readNextWord(String expectedDescription)
1115
+ throws ParseException, IOException
1116
+ {
1117
+ readNextWord(expectedDescription, false, false);
1118
+ }
1119
+
1120
+
1121
+ /**
1122
+ * Reads the next word of the configuration in the 'nextWord' field,
1123
+ * throwing an exception if there is no next word.
1124
+ */
1125
+ private void readNextWord(String expectedDescription,
1126
+ boolean isFileName,
1127
+ boolean expectingAtCharacter)
1128
+ throws ParseException, IOException
1129
+ {
1130
+ readNextWord(isFileName);
1131
+ if (configurationEnd(expectingAtCharacter))
1132
+ {
1133
+ throw new ParseException("Expecting " + expectedDescription +
1134
+ " before " + reader.locationDescription());
1135
+ }
1136
+ }
1137
+
1138
+
1139
+ /**
1140
+ * Reads the next word of the configuration in the 'nextWord' field.
1141
+ */
1142
+ private void readNextWord() throws IOException
1143
+ {
1144
+ readNextWord(false);
1145
+ }
1146
+
1147
+
1148
+ /**
1149
+ * Reads the next word of the configuration in the 'nextWord' field.
1150
+ */
1151
+ private void readNextWord(boolean isFileName) throws IOException
1152
+ {
1153
+ nextWord = reader.nextWord(isFileName);
1154
+ }
1155
+
1156
+
1157
+ /**
1158
+ * Returns whether the end of the configuration has been reached.
1159
+ */
1160
+ private boolean configurationEnd()
1161
+ {
1162
+ return configurationEnd(false);
1163
+ }
1164
+
1165
+
1166
+ /**
1167
+ * Returns whether the end of the configuration has been reached.
1168
+ */
1169
+ private boolean configurationEnd(boolean expectingAtCharacter)
1170
+ {
1171
+ return nextWord == null ||
1172
+ nextWord.startsWith(ConfigurationConstants.OPTION_PREFIX) ||
1173
+ (!expectingAtCharacter &&
1174
+ nextWord.equals(ConfigurationConstants.AT_DIRECTIVE));
1175
+ }
1176
+
1177
+
1178
+ /**
1179
+ * Checks whether the given word is a valid Java identifier and throws
1180
+ * a ParseException if it isn't. Wildcard characters are accepted.
1181
+ */
1182
+ private void checkJavaIdentifier(String expectedDescription)
1183
+ throws ParseException
1184
+ {
1185
+ if (!isJavaIdentifier(nextWord))
1186
+ {
1187
+ throw new ParseException("Expecting " + expectedDescription +
1188
+ " before " + reader.locationDescription());
1189
+ }
1190
+ }
1191
+
1192
+
1193
+ /**
1194
+ * Returns whether the given word is a valid Java identifier.
1195
+ * Wildcard characters are accepted.
1196
+ */
1197
+ private boolean isJavaIdentifier(String aWord)
1198
+ {
1199
+ for (int index = 0; index < aWord.length(); index++)
1200
+ {
1201
+ char c = aWord.charAt(index);
1202
+ if (!(Character.isJavaIdentifierPart(c) ||
1203
+ c == '.' ||
1204
+ c == '[' ||
1205
+ c == ']' ||
1206
+ c == '<' ||
1207
+ c == '>' ||
1208
+ c == '-' ||
1209
+ c == '!' ||
1210
+ c == '*' ||
1211
+ c == '?' ||
1212
+ c == '%'))
1213
+ {
1214
+ return false;
1215
+ }
1216
+ }
1217
+
1218
+ return true;
1219
+ }
1220
+
1221
+
1222
+ /**
1223
+ * Checks whether the given access flags are valid field access flags,
1224
+ * throwing a ParseException if they aren't.
1225
+ */
1226
+ private void checkFieldAccessFlags(int requiredSetMemberAccessFlags,
1227
+ int requiredUnsetMemberAccessFlags)
1228
+ throws ParseException
1229
+ {
1230
+ if (((requiredSetMemberAccessFlags |
1231
+ requiredUnsetMemberAccessFlags) &
1232
+ ~ClassConstants.VALID_INTERNAL_ACC_FIELD) != 0)
1233
+ {
1234
+ throw new ParseException("Invalid method access modifier for field before " +
1235
+ reader.locationDescription());
1236
+ }
1237
+ }
1238
+
1239
+
1240
+ /**
1241
+ * Checks whether the given access flags are valid method access flags,
1242
+ * throwing a ParseException if they aren't.
1243
+ */
1244
+ private void checkMethodAccessFlags(int requiredSetMemberAccessFlags,
1245
+ int requiredUnsetMemberAccessFlags)
1246
+ throws ParseException
1247
+ {
1248
+ if (((requiredSetMemberAccessFlags |
1249
+ requiredUnsetMemberAccessFlags) &
1250
+ ~ClassConstants.VALID_INTERNAL_ACC_METHOD) != 0)
1251
+ {
1252
+ throw new ParseException("Invalid field access modifier for method before " +
1253
+ reader.locationDescription());
1254
+ }
1255
+ }
1256
+
1257
+
1258
+ /**
1259
+ * A main method for testing configuration parsing.
1260
+ */
1261
+ public static void main(String[] args)
1262
+ {
1263
+ try
1264
+ {
1265
+ ConfigurationParser parser = new ConfigurationParser(args);
1266
+
1267
+ try
1268
+ {
1269
+ parser.parse(new Configuration());
1270
+ }
1271
+ catch (ParseException ex)
1272
+ {
1273
+ ex.printStackTrace();
1274
+ }
1275
+ finally
1276
+ {
1277
+ parser.close();
1278
+ }
1279
+ }
1280
+ catch (IOException ex)
1281
+ {
1282
+ ex.printStackTrace();
1283
+ }
1284
+ }
1285
+ }