sometsome 1.0.2 → 3.10.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/proguard4.7/README +33 -0
- data/lib/proguard4.7/bin/proguard.bat +14 -0
- data/lib/proguard4.7/bin/proguard.sh +11 -0
- data/lib/proguard4.7/bin/proguardgui.bat +14 -0
- data/lib/proguard4.7/bin/proguardgui.sh +15 -0
- data/lib/proguard4.7/bin/retrace.bat +14 -0
- data/lib/proguard4.7/bin/retrace.sh +12 -0
- data/lib/proguard4.7/build/build.sh +94 -0
- data/lib/proguard4.7/build/build.xml +171 -0
- data/lib/proguard4.7/build/makefile +94 -0
- data/lib/proguard4.7/docs/FAQ.html +253 -0
- data/lib/proguard4.7/docs/GPL.html +406 -0
- data/lib/proguard4.7/docs/GPL_exception.html +56 -0
- data/lib/proguard4.7/docs/acknowledgements.html +76 -0
- data/lib/proguard4.7/docs/alternatives.html +699 -0
- data/lib/proguard4.7/docs/checkmark.gif +0 -0
- data/lib/proguard4.7/docs/downloads.html +623 -0
- data/lib/proguard4.7/docs/drop1.gif +0 -0
- data/lib/proguard4.7/docs/drop2.gif +0 -0
- data/lib/proguard4.7/docs/drop3.gif +0 -0
- data/lib/proguard4.7/docs/favicon.ico +0 -0
- data/lib/proguard4.7/docs/feedback.html +120 -0
- data/lib/proguard4.7/docs/index.html +92 -0
- data/lib/proguard4.7/docs/license.html +60 -0
- data/lib/proguard4.7/docs/main.html +102 -0
- data/lib/proguard4.7/docs/manual/ant.html +634 -0
- data/lib/proguard4.7/docs/manual/attention.gif +0 -0
- data/lib/proguard4.7/docs/manual/examples.html +1504 -0
- data/lib/proguard4.7/docs/manual/gui.html +479 -0
- data/lib/proguard4.7/docs/manual/index.html +51 -0
- data/lib/proguard4.7/docs/manual/introduction.html +173 -0
- data/lib/proguard4.7/docs/manual/limitations.html +69 -0
- data/lib/proguard4.7/docs/manual/optimizations.html +172 -0
- data/lib/proguard4.7/docs/manual/refcard.html +486 -0
- data/lib/proguard4.7/docs/manual/retrace/examples.html +345 -0
- data/lib/proguard4.7/docs/manual/retrace/index.html +37 -0
- data/lib/proguard4.7/docs/manual/retrace/introduction.html +79 -0
- data/lib/proguard4.7/docs/manual/retrace/usage.html +127 -0
- data/lib/proguard4.7/docs/manual/sections.html +60 -0
- data/lib/proguard4.7/docs/manual/style.css +105 -0
- data/lib/proguard4.7/docs/manual/troubleshooting.html +729 -0
- data/lib/proguard4.7/docs/manual/usage.html +1243 -0
- data/lib/proguard4.7/docs/manual/wtk.html +70 -0
- data/lib/proguard4.7/docs/quality.html +56 -0
- data/lib/proguard4.7/docs/results.html +170 -0
- data/lib/proguard4.7/docs/saikoalogo.png +0 -0
- data/lib/proguard4.7/docs/screenshot_console.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_console_small.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui1.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui2.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui3.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui4.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui5.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui6.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui7.gif +0 -0
- data/lib/proguard4.7/docs/screenshot_gui8.gif +0 -0
- data/lib/proguard4.7/docs/screenshots.html +67 -0
- data/lib/proguard4.7/docs/screenshots_gui_small.gif +0 -0
- data/lib/proguard4.7/docs/sections.html +64 -0
- data/lib/proguard4.7/docs/sflogo.png +0 -0
- data/lib/proguard4.7/docs/steel.gif +0 -0
- data/lib/proguard4.7/docs/style.css +223 -0
- data/lib/proguard4.7/docs/testimonials.html +133 -0
- data/lib/proguard4.7/docs/title.gif +0 -0
- data/lib/proguard4.7/docs/title.html +17 -0
- data/lib/proguard4.7/examples/android.pro +149 -0
- data/lib/proguard4.7/examples/annotations/examples.pro +60 -0
- data/lib/proguard4.7/examples/annotations/examples/Applet.java +22 -0
- data/lib/proguard4.7/examples/annotations/examples/Application.java +20 -0
- data/lib/proguard4.7/examples/annotations/examples/Bean.java +56 -0
- data/lib/proguard4.7/examples/annotations/examples/NativeCallBack.java +44 -0
- data/lib/proguard4.7/examples/annotations/lib/annotations.jar +0 -0
- data/lib/proguard4.7/examples/annotations/lib/annotations.pro +118 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/Keep.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepApplication.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMemberNames.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMembers.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepGettersSetters.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepImplementations.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepName.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMemberNames.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMembers.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicGettersSetters.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicImplementations.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMemberNames.java +18 -0
- data/lib/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMembers.java +19 -0
- data/lib/proguard4.7/examples/ant/android-8.xml +177 -0
- data/lib/proguard4.7/examples/ant/applets.xml +88 -0
- data/lib/proguard4.7/examples/ant/applications1.xml +15 -0
- data/lib/proguard4.7/examples/ant/applications2.xml +74 -0
- data/lib/proguard4.7/examples/ant/applications3.xml +98 -0
- data/lib/proguard4.7/examples/ant/library.xml +102 -0
- data/lib/proguard4.7/examples/ant/midlets.xml +52 -0
- data/lib/proguard4.7/examples/ant/proguard.xml +78 -0
- data/lib/proguard4.7/examples/ant/servlets.xml +88 -0
- data/lib/proguard4.7/examples/applets.pro +69 -0
- data/lib/proguard4.7/examples/applications.pro +75 -0
- data/lib/proguard4.7/examples/dictionaries/compact.txt +18 -0
- data/lib/proguard4.7/examples/dictionaries/keywords.txt +58 -0
- data/lib/proguard4.7/examples/dictionaries/shakespeare.txt +23 -0
- data/lib/proguard4.7/examples/dictionaries/windows.txt +209 -0
- data/lib/proguard4.7/examples/library.pro +79 -0
- data/lib/proguard4.7/examples/midlets.pro +67 -0
- data/lib/proguard4.7/examples/proguard.pro +57 -0
- data/lib/proguard4.7/examples/proguardall.pro +62 -0
- data/lib/proguard4.7/examples/proguardgui.pro +50 -0
- data/lib/proguard4.7/examples/retrace.pro +43 -0
- data/lib/proguard4.7/examples/scala.pro +132 -0
- data/lib/proguard4.7/examples/servlets.pro +70 -0
- data/lib/proguard4.7/lib/proguard.jar +0 -0
- data/lib/proguard4.7/lib/proguardgui.jar +0 -0
- data/lib/proguard4.7/lib/retrace.jar +0 -0
- data/lib/proguard4.7/src/proguard/ArgumentWordReader.java +111 -0
- data/lib/proguard4.7/src/proguard/ClassPath.java +94 -0
- data/lib/proguard4.7/src/proguard/ClassPathEntry.java +282 -0
- data/lib/proguard4.7/src/proguard/ClassSpecification.java +259 -0
- data/lib/proguard4.7/src/proguard/ClassSpecificationVisitorFactory.java +503 -0
- data/lib/proguard4.7/src/proguard/Configuration.java +328 -0
- data/lib/proguard4.7/src/proguard/ConfigurationConstants.java +123 -0
- data/lib/proguard4.7/src/proguard/ConfigurationParser.java +1285 -0
- data/lib/proguard4.7/src/proguard/ConfigurationWriter.java +651 -0
- data/lib/proguard4.7/src/proguard/DataEntryReaderFactory.java +141 -0
- data/lib/proguard4.7/src/proguard/DataEntryWriterFactory.java +150 -0
- data/lib/proguard4.7/src/proguard/DescriptorKeepChecker.java +169 -0
- data/lib/proguard4.7/src/proguard/DuplicateClassPrinter.java +63 -0
- data/lib/proguard4.7/src/proguard/FileWordReader.java +55 -0
- data/lib/proguard4.7/src/proguard/FullyQualifiedClassNameChecker.java +191 -0
- data/lib/proguard4.7/src/proguard/GPL.java +197 -0
- data/lib/proguard4.7/src/proguard/Initializer.java +424 -0
- data/lib/proguard4.7/src/proguard/InputReader.java +233 -0
- data/lib/proguard4.7/src/proguard/KeepClassMemberChecker.java +87 -0
- data/lib/proguard4.7/src/proguard/KeepClassSpecification.java +137 -0
- data/lib/proguard4.7/src/proguard/LineWordReader.java +74 -0
- data/lib/proguard4.7/src/proguard/MANIFEST.MF +2 -0
- data/lib/proguard4.7/src/proguard/MemberSpecification.java +114 -0
- data/lib/proguard4.7/src/proguard/OutputWriter.java +296 -0
- data/lib/proguard4.7/src/proguard/ParseException.java +51 -0
- data/lib/proguard4.7/src/proguard/ProGuard.java +512 -0
- data/lib/proguard4.7/src/proguard/SeedPrinter.java +97 -0
- data/lib/proguard4.7/src/proguard/SubclassedClassFilter.java +62 -0
- data/lib/proguard4.7/src/proguard/Targeter.java +88 -0
- data/lib/proguard4.7/src/proguard/UpToDateChecker.java +232 -0
- data/lib/proguard4.7/src/proguard/WordReader.java +387 -0
- data/lib/proguard4.7/src/proguard/ant/ClassPathElement.java +191 -0
- data/lib/proguard4.7/src/proguard/ant/ClassSpecificationElement.java +258 -0
- data/lib/proguard4.7/src/proguard/ant/ConfigurationElement.java +53 -0
- data/lib/proguard4.7/src/proguard/ant/ConfigurationTask.java +441 -0
- data/lib/proguard4.7/src/proguard/ant/FilterElement.java +85 -0
- data/lib/proguard4.7/src/proguard/ant/KeepSpecificationElement.java +87 -0
- data/lib/proguard4.7/src/proguard/ant/MemberSpecificationElement.java +218 -0
- data/lib/proguard4.7/src/proguard/ant/ProGuardTask.java +352 -0
- data/lib/proguard4.7/src/proguard/ant/package.html +3 -0
- data/lib/proguard4.7/src/proguard/ant/task.properties +2 -0
- data/lib/proguard4.7/src/proguard/classfile/ClassConstants.java +316 -0
- data/lib/proguard4.7/src/proguard/classfile/ClassPool.java +152 -0
- data/lib/proguard4.7/src/proguard/classfile/Clazz.java +261 -0
- data/lib/proguard4.7/src/proguard/classfile/Field.java +32 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryClass.java +548 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryField.java +77 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryMember.java +108 -0
- data/lib/proguard4.7/src/proguard/classfile/LibraryMethod.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/Member.java +57 -0
- data/lib/proguard4.7/src/proguard/classfile/Method.java +32 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramClass.java +572 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramField.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramMember.java +168 -0
- data/lib/proguard4.7/src/proguard/classfile/ProgramMethod.java +99 -0
- data/lib/proguard4.7/src/proguard/classfile/VisitorAccepter.java +47 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/Attribute.java +142 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodInfo.java +89 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/BootstrapMethodsAttribute.java +95 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/CodeAttribute.java +202 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/ConstantValueAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/DeprecatedAttribute.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/EnclosingMethodAttribute.java +132 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionInfo.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/ExceptionsAttribute.java +80 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesAttribute.java +80 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/InnerClassesInfo.java +119 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberInfo.java +50 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LineNumberTableAttribute.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableInfo.java +99 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTableAttribute.java +79 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeInfo.java +107 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/LocalVariableTypeTableAttribute.java +79 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SignatureAttribute.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SourceDirAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SourceFileAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/SyntheticAttribute.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/UnknownAttribute.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/Annotation.java +143 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationDefaultAttribute.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationElementValue.java +76 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/AnnotationsAttribute.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ArrayElementValue.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ClassElementValue.java +95 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ConstantElementValue.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ElementValue.java +126 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/EnumConstantElementValue.java +99 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/ParameterAnnotationsAttribute.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleAnnotationsAttribute.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeInvisibleParameterAnnotationsAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleAnnotationsAttribute.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/RuntimeVisibleParameterAnnotationsAttribute.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/package.html +4 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AllAnnotationVisitor.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotatedClassVisitor.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationToMemberVisitor.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationTypeFilter.java +102 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/AnnotationVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/ElementValueVisitor.java +51 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/annotation/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/DoubleType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FloatType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/FullFrame.java +202 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/IntegerType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LessZeroFrame.java +103 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/LongType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/MoreZeroFrame.java +161 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/NullType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/ObjectType.java +107 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameOneFrame.java +115 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/SameZeroFrame.java +74 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapAttribute.java +91 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapFrame.java +117 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/StackMapTableAttribute.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/TopType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedThisType.java +66 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/UninitializedType.java +106 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationType.java +103 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/VerificationTypeFactory.java +112 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/StackMapFrameVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/preverification/visitor/VerificationTypeVisitor.java +65 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllAttributeVisitor.java +117 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllBootstrapMethodInfoVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllExceptionInfoVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AllInnerClassesInfoVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeNameFilter.java +368 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/AttributeVisitor.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/BootstrapMethodInfoVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/ExceptionInfoVisitor.java +37 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/InnerClassesInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LineNumberInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/LocalVariableTypeInfoVisitor.java +38 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/MultiAttributeVisitor.java +365 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/NonEmptyAttributeFilter.java +293 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/RequiredAttributeFilter.java +360 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/StackSizeComputer.java +378 -0
- data/lib/proguard4.7/src/proguard/classfile/attribute/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/ClassConstant.java +105 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/Constant.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/DoubleConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/FieldrefConstant.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/FloatConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/IntegerConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/InterfaceMethodrefConstant.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/InvokeDynamicConstant.java +148 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/LongConstant.java +82 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodHandleConstant.java +124 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodTypeConstant.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/MethodrefConstant.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/NameAndTypeConstant.java +119 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/RefConstant.java +130 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/StringConstant.java +135 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/Utf8Constant.java +285 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/AllConstantVisitor.java +53 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/BootstrapMethodHandleTraveler.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantTagFilter.java +86 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ConstantVisitor.java +49 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/ExceptClassConstantFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/MethodrefTraveler.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/constant/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AccessFixer.java +180 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationAdder.java +153 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AnnotationsAttributeEditor.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributeAdder.java +457 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributeSorter.java +89 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/AttributesEditor.java +269 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/BridgeMethodFixer.java +117 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassEditor.java +255 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassElementSorter.java +52 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassMemberSorter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ClassReferenceFixer.java +546 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeComposer.java +843 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditor.java +1104 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/CodeAttributeEditorResetter.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ComparableConstant.java +249 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantAdder.java +239 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolEditor.java +782 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolRemapper.java +662 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolShrinker.java +578 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ConstantPoolSorter.java +123 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ElementValueAdder.java +217 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ElementValuesEditor.java +238 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionAdder.java +65 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionInfoAdder.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ExceptionsAttributeEditor.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InnerClassesAccessFixer.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InstructionAdder.java +76 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InstructionWriter.java +278 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceAdder.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfaceSorter.java +152 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/InterfacesEditor.java +122 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberInfoAdder.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LineNumberTableAttributeEditor.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableInfoAdder.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTableAttributeEditor.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeInfoAdder.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/LocalVariableTypeTableAttributeEditor.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/MemberAdder.java +288 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/MemberReferenceFixer.java +447 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/MethodInvocationFixer.java +243 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/NameAndTypeShrinker.java +188 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/NamedAttributeDeleter.java +54 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/ParameterAnnotationsAttributeEditor.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/StackSizeUpdater.java +54 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/SubclassAdder.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/SubclassToAdder.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/Utf8Shrinker.java +455 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableCleaner.java +267 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableEditor.java +130 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableRemapper.java +156 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/VariableSizeUpdater.java +105 -0
- data/lib/proguard4.7/src/proguard/classfile/editor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/BranchInstruction.java +180 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/ConstantInstruction.java +309 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/Instruction.java +920 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionConstants.java +449 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionFactory.java +300 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/InstructionUtil.java +67 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/LookUpSwitchInstruction.java +135 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/SimpleInstruction.java +255 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/SwitchInstruction.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/TableSwitchInstruction.java +139 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/VariableInstruction.java +372 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/package.html +9 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/AllInstructionVisitor.java +56 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionCounter.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/InstructionVisitor.java +42 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/MultiInstructionVisitor.java +131 -0
- data/lib/proguard4.7/src/proguard/classfile/instruction/visitor/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/io/LibraryClassReader.java +383 -0
- data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassReader.java +919 -0
- data/lib/proguard4.7/src/proguard/classfile/io/ProgramClassWriter.java +735 -0
- data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataInput.java +223 -0
- data/lib/proguard4.7/src/proguard/classfile/io/RuntimeDataOutput.java +224 -0
- data/lib/proguard4.7/src/proguard/classfile/io/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/package.html +15 -0
- data/lib/proguard4.7/src/proguard/classfile/util/AccessUtil.java +105 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassReferenceInitializer.java +559 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassSubHierarchyInitializer.java +77 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassSuperHierarchyInitializer.java +163 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ClassUtil.java +1227 -0
- data/lib/proguard4.7/src/proguard/classfile/util/DescriptorClassEnumeration.java +236 -0
- data/lib/proguard4.7/src/proguard/classfile/util/DynamicClassReferenceInitializer.java +485 -0
- data/lib/proguard4.7/src/proguard/classfile/util/DynamicMemberReferenceInitializer.java +944 -0
- data/lib/proguard4.7/src/proguard/classfile/util/ExternalTypeEnumeration.java +106 -0
- data/lib/proguard4.7/src/proguard/classfile/util/InstructionSequenceMatcher.java +754 -0
- data/lib/proguard4.7/src/proguard/classfile/util/InternalTypeEnumeration.java +204 -0
- data/lib/proguard4.7/src/proguard/classfile/util/MemberFinder.java +197 -0
- data/lib/proguard4.7/src/proguard/classfile/util/MethodLinker.java +160 -0
- data/lib/proguard4.7/src/proguard/classfile/util/SimplifiedVisitor.java +834 -0
- data/lib/proguard4.7/src/proguard/classfile/util/StringReferenceInitializer.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/util/StringSharer.java +172 -0
- data/lib/proguard4.7/src/proguard/classfile/util/WarningPrinter.java +136 -0
- data/lib/proguard4.7/src/proguard/classfile/util/package.html +3 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllClassVisitor.java +47 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllFieldVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllMemberVisitor.java +57 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/AllMethodVisitor.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/BottomClassFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassAccessFilter.java +88 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCleaner.java +275 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCollector.java +58 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassCounter.java +56 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassHierarchyTraveler.java +91 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassNameFilter.java +112 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolFiller.java +55 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPoolVisitor.java +37 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPresenceFilter.java +93 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassPrinter.java +1011 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionFilter.java +85 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVersionSetter.java +83 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ClassVisitor.java +36 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ConcreteClassDownTraveler.java +100 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/DotClassClassVisitor.java +89 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptClassesFilter.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionCounter.java +52 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionExcludedOffsetFilter.java +64 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerConstantVisitor.java +62 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionHandlerFilter.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionOffsetFilter.java +64 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ExceptionRangeFilter.java +68 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassConstantFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementedClassFilter.java +71 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ImplementingClassConstantFilter.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryClassFilter.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/LibraryMemberFilter.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberAccessFilter.java +122 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberClassAccessFilter.java +106 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCollector.java +59 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberCounter.java +72 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberDescriptorFilter.java +113 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberNameFilter.java +113 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberToClassVisitor.java +90 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MemberVisitor.java +40 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationFilter.java +70 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MethodImplementationTraveler.java +128 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassPoolVisitor.java +88 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiClassVisitor.java +97 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/MultiMemberVisitor.java +113 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedClassVisitor.java +49 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedFieldVisitor.java +61 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/NamedMethodVisitor.java +61 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramClassFilter.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ProgramMemberFilter.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedClassVisitor.java +255 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/ReferencedMemberVisitor.java +73 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SimilarMemberVisitor.java +125 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SimpleClassPrinter.java +167 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassFilter.java +91 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/SubclassTraveler.java +60 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/VariableClassVisitor.java +78 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/VariableMemberVisitor.java +96 -0
- data/lib/proguard4.7/src/proguard/classfile/visitor/package.html +40 -0
- data/lib/proguard4.7/src/proguard/evaluation/BasicBranchUnit.java +126 -0
- data/lib/proguard4.7/src/proguard/evaluation/BasicInvocationUnit.java +425 -0
- data/lib/proguard4.7/src/proguard/evaluation/BranchUnit.java +63 -0
- data/lib/proguard4.7/src/proguard/evaluation/ClassConstantValueFactory.java +53 -0
- data/lib/proguard4.7/src/proguard/evaluation/ConstantValueFactory.java +113 -0
- data/lib/proguard4.7/src/proguard/evaluation/InvocationUnit.java +62 -0
- data/lib/proguard4.7/src/proguard/evaluation/Processor.java +908 -0
- data/lib/proguard4.7/src/proguard/evaluation/Stack.java +560 -0
- data/lib/proguard4.7/src/proguard/evaluation/TracedStack.java +342 -0
- data/lib/proguard4.7/src/proguard/evaluation/TracedVariables.java +199 -0
- data/lib/proguard4.7/src/proguard/evaluation/Variables.java +347 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/Category1Value.java +41 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/Category2Value.java +41 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ComparisonValue.java +69 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeDoubleValue.java +81 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeFloatValue.java +81 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeIntegerValue.java +87 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/CompositeLongValue.java +87 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedByteValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedCharacterValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedDoubleValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedFloatValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedIntegerValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedLongValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ConvertedShortValue.java +64 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/DoubleValue.java +359 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/FloatValue.java +359 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedDoubleValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedFloatValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedIntegerValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedLongValue.java +67 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedReferenceValue.java +102 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IdentifiedValueFactory.java +75 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/InstructionOffsetValue.java +307 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/IntegerValue.java +1002 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/LongValue.java +554 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedDoubleValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedFloatValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedIntegerValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/NegatedLongValue.java +71 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularDoubleValue.java +216 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularFloatValue.java +216 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularIntegerValue.java +383 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ParticularLongValue.java +271 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ReferenceValue.java +540 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificDoubleValue.java +186 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificFloatValue.java +186 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificIntegerValue.java +354 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificLongValue.java +259 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/SpecificValueFactory.java +97 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/TopValue.java +79 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownDoubleValue.java +125 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownFloatValue.java +125 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownIntegerValue.java +216 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/UnknownLongValue.java +160 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/Value.java +169 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/ValueFactory.java +193 -0
- data/lib/proguard4.7/src/proguard/evaluation/value/package.html +3 -0
- data/lib/proguard4.7/src/proguard/gui/ClassPathPanel.java +441 -0
- data/lib/proguard4.7/src/proguard/gui/ClassSpecificationDialog.java +546 -0
- data/lib/proguard4.7/src/proguard/gui/ClassSpecificationsPanel.java +231 -0
- data/lib/proguard4.7/src/proguard/gui/ExtensionFileFilter.java +78 -0
- data/lib/proguard4.7/src/proguard/gui/FilterBuilder.java +208 -0
- data/lib/proguard4.7/src/proguard/gui/FilterDialog.java +320 -0
- data/lib/proguard4.7/src/proguard/gui/GUIResources.java +56 -0
- data/lib/proguard4.7/src/proguard/gui/GUIResources.properties +643 -0
- data/lib/proguard4.7/src/proguard/gui/KeepSpecificationsPanel.java +81 -0
- data/lib/proguard4.7/src/proguard/gui/ListPanel.java +341 -0
- data/lib/proguard4.7/src/proguard/gui/MANIFEST.MF +3 -0
- data/lib/proguard4.7/src/proguard/gui/MemberSpecificationDialog.java +509 -0
- data/lib/proguard4.7/src/proguard/gui/MemberSpecificationsPanel.java +304 -0
- data/lib/proguard4.7/src/proguard/gui/MessageDialogRunnable.java +90 -0
- data/lib/proguard4.7/src/proguard/gui/OptimizationsDialog.java +251 -0
- data/lib/proguard4.7/src/proguard/gui/ProGuardGUI.java +1777 -0
- data/lib/proguard4.7/src/proguard/gui/ProGuardRunnable.java +154 -0
- data/lib/proguard4.7/src/proguard/gui/ReTraceRunnable.java +149 -0
- data/lib/proguard4.7/src/proguard/gui/SwingUtil.java +82 -0
- data/lib/proguard4.7/src/proguard/gui/TabbedPane.java +229 -0
- data/lib/proguard4.7/src/proguard/gui/TextAreaOutputStream.java +81 -0
- data/lib/proguard4.7/src/proguard/gui/arrow.gif +0 -0
- data/lib/proguard4.7/src/proguard/gui/boilerplate.pro +410 -0
- data/lib/proguard4.7/src/proguard/gui/default.pro +318 -0
- data/lib/proguard4.7/src/proguard/gui/package.html +3 -0
- data/lib/proguard4.7/src/proguard/gui/splash/BufferedSprite.java +145 -0
- data/lib/proguard4.7/src/proguard/gui/splash/CircleSprite.java +74 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ClipSprite.java +85 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ColorSprite.java +65 -0
- data/lib/proguard4.7/src/proguard/gui/splash/CompositeSprite.java +56 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantColor.java +51 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantDouble.java +49 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantFont.java +46 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantInt.java +49 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantString.java +49 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ConstantTiming.java +57 -0
- data/lib/proguard4.7/src/proguard/gui/splash/FontSprite.java +65 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ImageSprite.java +76 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearColor.java +72 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearDouble.java +55 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearInt.java +55 -0
- data/lib/proguard4.7/src/proguard/gui/splash/LinearTiming.java +55 -0
- data/lib/proguard4.7/src/proguard/gui/splash/OverrideGraphics2D.java +598 -0
- data/lib/proguard4.7/src/proguard/gui/splash/RectangleSprite.java +114 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SawToothTiming.java +53 -0
- data/lib/proguard4.7/src/proguard/gui/splash/ShadowedSprite.java +109 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SineTiming.java +53 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SmoothTiming.java +66 -0
- data/lib/proguard4.7/src/proguard/gui/splash/SplashPanel.java +235 -0
- data/lib/proguard4.7/src/proguard/gui/splash/Sprite.java +41 -0
- data/lib/proguard4.7/src/proguard/gui/splash/TextSprite.java +89 -0
- data/lib/proguard4.7/src/proguard/gui/splash/TimeSwitchSprite.java +75 -0
- data/lib/proguard4.7/src/proguard/gui/splash/Timing.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/TypeWriterString.java +71 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableColor.java +36 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableDouble.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableFont.java +36 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableInt.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableSizeFont.java +65 -0
- data/lib/proguard4.7/src/proguard/gui/splash/VariableString.java +34 -0
- data/lib/proguard4.7/src/proguard/gui/splash/package.html +4 -0
- data/lib/proguard4.7/src/proguard/gui/vtitle.png +0 -0
- data/lib/proguard4.7/src/proguard/io/CascadingDataEntryWriter.java +94 -0
- data/lib/proguard4.7/src/proguard/io/ClassFilter.java +59 -0
- data/lib/proguard4.7/src/proguard/io/ClassReader.java +115 -0
- data/lib/proguard4.7/src/proguard/io/ClassRewriter.java +80 -0
- data/lib/proguard4.7/src/proguard/io/DataEntry.java +62 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryClassWriter.java +85 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryCopier.java +247 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryDirectoryFilter.java +40 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryFilter.java +38 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryNameFilter.java +54 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryObfuscator.java +150 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryParentFilter.java +51 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryPump.java +43 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryReader.java +38 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryRenamer.java +104 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryRewriter.java +148 -0
- data/lib/proguard4.7/src/proguard/io/DataEntryWriter.java +73 -0
- data/lib/proguard4.7/src/proguard/io/DirectoryFilter.java +58 -0
- data/lib/proguard4.7/src/proguard/io/DirectoryPump.java +78 -0
- data/lib/proguard4.7/src/proguard/io/DirectoryWriter.java +165 -0
- data/lib/proguard4.7/src/proguard/io/FileDataEntry.java +96 -0
- data/lib/proguard4.7/src/proguard/io/FilteredDataEntryReader.java +90 -0
- data/lib/proguard4.7/src/proguard/io/FilteredDataEntryWriter.java +125 -0
- data/lib/proguard4.7/src/proguard/io/Finisher.java +37 -0
- data/lib/proguard4.7/src/proguard/io/JarReader.java +75 -0
- data/lib/proguard4.7/src/proguard/io/JarWriter.java +235 -0
- data/lib/proguard4.7/src/proguard/io/ManifestRewriter.java +216 -0
- data/lib/proguard4.7/src/proguard/io/NameFilter.java +83 -0
- data/lib/proguard4.7/src/proguard/io/ParentDataEntryWriter.java +75 -0
- data/lib/proguard4.7/src/proguard/io/RenamedDataEntry.java +83 -0
- data/lib/proguard4.7/src/proguard/io/ZipDataEntry.java +98 -0
- data/lib/proguard4.7/src/proguard/io/package.html +4 -0
- data/lib/proguard4.7/src/proguard/obfuscate/AttributeShrinker.java +120 -0
- data/lib/proguard4.7/src/proguard/obfuscate/AttributeUsageMarker.java +71 -0
- data/lib/proguard4.7/src/proguard/obfuscate/ClassObfuscator.java +533 -0
- data/lib/proguard4.7/src/proguard/obfuscate/ClassRenamer.java +109 -0
- data/lib/proguard4.7/src/proguard/obfuscate/DictionaryNameFactory.java +189 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MapCleaner.java +57 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingKeeper.java +177 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingPrinter.java +147 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingProcessor.java +79 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MappingReader.java +199 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCleaner.java +60 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameCollector.java +106 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameConflictFixer.java +159 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberNameFilter.java +120 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberObfuscator.java +230 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MemberSpecialNameFilter.java +101 -0
- data/lib/proguard4.7/src/proguard/obfuscate/MultiMappingProcessor.java +96 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NameFactory.java +34 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NameFactoryResetter.java +59 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NameMarker.java +166 -0
- data/lib/proguard4.7/src/proguard/obfuscate/NumericNameFactory.java +49 -0
- data/lib/proguard4.7/src/proguard/obfuscate/Obfuscator.java +445 -0
- data/lib/proguard4.7/src/proguard/obfuscate/ParameterNameMarker.java +128 -0
- data/lib/proguard4.7/src/proguard/obfuscate/SimpleNameFactory.java +156 -0
- data/lib/proguard4.7/src/proguard/obfuscate/SourceFileRenamer.java +84 -0
- data/lib/proguard4.7/src/proguard/obfuscate/SpecialNameFactory.java +83 -0
- data/lib/proguard4.7/src/proguard/obfuscate/package.html +3 -0
- data/lib/proguard4.7/src/proguard/optimize/BootstrapMethodArgumentShrinker.java +103 -0
- data/lib/proguard4.7/src/proguard/optimize/ChangedCodePrinter.java +297 -0
- data/lib/proguard4.7/src/proguard/optimize/ConstantMemberFilter.java +77 -0
- data/lib/proguard4.7/src/proguard/optimize/ConstantParameterFilter.java +79 -0
- data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerFixer.java +215 -0
- data/lib/proguard4.7/src/proguard/optimize/DuplicateInitializerInvocationFixer.java +161 -0
- data/lib/proguard4.7/src/proguard/optimize/KeepMarker.java +95 -0
- data/lib/proguard4.7/src/proguard/optimize/KeptClassFilter.java +69 -0
- data/lib/proguard4.7/src/proguard/optimize/KeptMemberFilter.java +88 -0
- data/lib/proguard4.7/src/proguard/optimize/MemberDescriptorSpecializer.java +138 -0
- data/lib/proguard4.7/src/proguard/optimize/MethodDescriptorShrinker.java +317 -0
- data/lib/proguard4.7/src/proguard/optimize/MethodStaticizer.java +87 -0
- data/lib/proguard4.7/src/proguard/optimize/OptimizationInfoMemberFilter.java +94 -0
- data/lib/proguard4.7/src/proguard/optimize/Optimizer.java +963 -0
- data/lib/proguard4.7/src/proguard/optimize/ParameterShrinker.java +146 -0
- data/lib/proguard4.7/src/proguard/optimize/TailRecursionSimplifier.java +356 -0
- data/lib/proguard4.7/src/proguard/optimize/WriteOnlyFieldFilter.java +65 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationShrinker.java +2082 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/EvaluationSimplifier.java +973 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/LivenessAnalyzer.java +526 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/LoadingInvocationUnit.java +195 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/PartialEvaluator.java +1282 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/StoringInvocationUnit.java +207 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/TracedBranchUnit.java +59 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/VariableOptimizer.java +345 -0
- data/lib/proguard4.7/src/proguard/optimize/evaluation/package.html +4 -0
- data/lib/proguard4.7/src/proguard/optimize/info/AccessMethodMarker.java +202 -0
- data/lib/proguard4.7/src/proguard/optimize/info/BackwardBranchMarker.java +90 -0
- data/lib/proguard4.7/src/proguard/optimize/info/CatchExceptionMarker.java +69 -0
- data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassFilter.java +63 -0
- data/lib/proguard4.7/src/proguard/optimize/info/CaughtClassMarker.java +64 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfo.java +165 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ClassOptimizationInfoSetter.java +47 -0
- data/lib/proguard4.7/src/proguard/optimize/info/DotClassFilter.java +63 -0
- data/lib/proguard4.7/src/proguard/optimize/info/DotClassMarker.java +96 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ExceptionInstructionChecker.java +193 -0
- data/lib/proguard4.7/src/proguard/optimize/info/FieldOptimizationInfo.java +204 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassFilter.java +63 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstanceofClassMarker.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassFilter.java +62 -0
- data/lib/proguard4.7/src/proguard/optimize/info/InstantiationClassMarker.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/info/MemberOptimizationInfoSetter.java +59 -0
- data/lib/proguard4.7/src/proguard/optimize/info/MethodInvocationMarker.java +107 -0
- data/lib/proguard4.7/src/proguard/optimize/info/MethodOptimizationInfo.java +302 -0
- data/lib/proguard4.7/src/proguard/optimize/info/NoSideEffectMethodMarker.java +91 -0
- data/lib/proguard4.7/src/proguard/optimize/info/NonPrivateMemberMarker.java +171 -0
- data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberContainingClassMarker.java +85 -0
- data/lib/proguard4.7/src/proguard/optimize/info/PackageVisibleMemberInvokingClassMarker.java +129 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ParameterUsageMarker.java +285 -0
- data/lib/proguard4.7/src/proguard/optimize/info/ReadWriteFieldMarker.java +163 -0
- data/lib/proguard4.7/src/proguard/optimize/info/SideEffectInstructionChecker.java +245 -0
- data/lib/proguard4.7/src/proguard/optimize/info/SideEffectMethodMarker.java +175 -0
- data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassFilter.java +62 -0
- data/lib/proguard4.7/src/proguard/optimize/info/StaticInitializerContainingClassMarker.java +65 -0
- data/lib/proguard4.7/src/proguard/optimize/info/SuperInvocationMarker.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/info/VariableUsageMarker.java +96 -0
- data/lib/proguard4.7/src/proguard/optimize/info/package.html +4 -0
- data/lib/proguard4.7/src/proguard/optimize/package.html +4 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/BranchTargetFinder.java +687 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/ClassFinalizer.java +84 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/ClassMerger.java +576 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoCommonCodeReplacer.java +266 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoGotoReplacer.java +115 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/GotoReturnReplacer.java +115 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/HorizontalClassMerger.java +90 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceConstants.java +4424 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequenceReplacer.java +420 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/InstructionSequencesReplacer.java +138 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/MemberPrivatizer.java +103 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/MethodFinalizer.java +93 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/MethodInliner.java +597 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/NopRemover.java +89 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/PeepholeOptimizer.java +103 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/ReachableCodeMarker.java +262 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/RetargetedInnerClassAttributeRemover.java +170 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/TargetClassChanger.java +455 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableCodeRemover.java +143 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/UnreachableExceptionRemover.java +163 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/VariableShrinker.java +129 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/VerticalClassMerger.java +88 -0
- data/lib/proguard4.7/src/proguard/optimize/peephole/package.html +3 -0
- data/lib/proguard4.7/src/proguard/package.html +5 -0
- data/lib/proguard4.7/src/proguard/preverify/CodePreverifier.java +611 -0
- data/lib/proguard4.7/src/proguard/preverify/CodeSubroutineInliner.java +406 -0
- data/lib/proguard4.7/src/proguard/preverify/Preverifier.java +73 -0
- data/lib/proguard4.7/src/proguard/preverify/SubroutineInliner.java +73 -0
- data/lib/proguard4.7/src/proguard/retrace/MANIFEST.MF +3 -0
- data/lib/proguard4.7/src/proguard/retrace/ReTrace.java +749 -0
- data/lib/proguard4.7/src/proguard/retrace/package.html +4 -0
- data/lib/proguard4.7/src/proguard/shrink/AnnotationUsageMarker.java +333 -0
- data/lib/proguard4.7/src/proguard/shrink/ClassShrinker.java +458 -0
- data/lib/proguard4.7/src/proguard/shrink/InnerUsageMarker.java +174 -0
- data/lib/proguard4.7/src/proguard/shrink/InterfaceUsageMarker.java +152 -0
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMark.java +183 -0
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsageMarker.java +277 -0
- data/lib/proguard4.7/src/proguard/shrink/ShortestUsagePrinter.java +210 -0
- data/lib/proguard4.7/src/proguard/shrink/Shrinker.java +181 -0
- data/lib/proguard4.7/src/proguard/shrink/UsageMarker.java +1036 -0
- data/lib/proguard4.7/src/proguard/shrink/UsagePrinter.java +177 -0
- data/lib/proguard4.7/src/proguard/shrink/UsedClassFilter.java +74 -0
- data/lib/proguard4.7/src/proguard/shrink/UsedMemberFilter.java +93 -0
- data/lib/proguard4.7/src/proguard/shrink/package.html +3 -0
- data/lib/proguard4.7/src/proguard/util/AndMatcher.java +49 -0
- data/lib/proguard4.7/src/proguard/util/ClassNameParser.java +216 -0
- data/lib/proguard4.7/src/proguard/util/ConstantMatcher.java +48 -0
- data/lib/proguard4.7/src/proguard/util/EmptyStringMatcher.java +36 -0
- data/lib/proguard4.7/src/proguard/util/ExtensionMatcher.java +63 -0
- data/lib/proguard4.7/src/proguard/util/FileNameParser.java +121 -0
- data/lib/proguard4.7/src/proguard/util/FixedStringMatcher.java +56 -0
- data/lib/proguard4.7/src/proguard/util/ListMatcher.java +69 -0
- data/lib/proguard4.7/src/proguard/util/ListParser.java +137 -0
- data/lib/proguard4.7/src/proguard/util/ListUtil.java +180 -0
- data/lib/proguard4.7/src/proguard/util/NameParser.java +106 -0
- data/lib/proguard4.7/src/proguard/util/NotMatcher.java +46 -0
- data/lib/proguard4.7/src/proguard/util/OrMatcher.java +49 -0
- data/lib/proguard4.7/src/proguard/util/SettableMatcher.java +46 -0
- data/lib/proguard4.7/src/proguard/util/StringMatcher.java +38 -0
- data/lib/proguard4.7/src/proguard/util/StringParser.java +35 -0
- data/lib/proguard4.7/src/proguard/util/VariableStringMatcher.java +126 -0
- data/lib/proguard4.7/src/proguard/util/package.html +3 -0
- data/lib/proguard4.7/src/proguard/wtk/ProGuardObfuscator.java +141 -0
- data/lib/proguard4.7/src/proguard/wtk/default.pro +114 -0
- data/lib/proguard4.7/src/proguard/wtk/package.html +3 -0
- metadata +960 -10
|
@@ -0,0 +1,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
|
+
}
|