From 2270795fbe0b277bfd49f40950ecaa78583175cc Mon Sep 17 00:00:00 2001 From: Brian Carlstrom Date: Thu, 8 Jan 2015 08:24:06 -0800 Subject: Upgrade Proguard to 5.1. Downloaded from: http://sourceforge.net/projects/proguard/files/proguard/5.1/ Bug: 17550647 Change-Id: I2b4eab16eb7821fc232b294ab7f433aae08f71e1 --- NOTICE | 79 +- README | 4 +- bin/proguard.bat | 2 +- bin/proguard.sh | 18 +- bin/proguardgui.bat | 2 +- bin/proguardgui.sh | 14 +- bin/retrace.bat | 2 +- bin/retrace.sh | 14 +- build/README | 2 +- build/build.sh | 9 +- build/build.xml | 11 +- build/makefile | 9 +- build/maven/ant/pom.xml | 2 +- build/maven/base/pom.xml | 2 +- build/maven/gradle/pom.xml | 14 +- build/maven/gui/pom.xml | 2 +- build/maven/pom.xml | 2 +- build/maven/retrace/pom.xml | 2 +- build/maven/wtk/pom.xml | 2 +- docs/FAQ.html | 40 +- docs/GPL_exception.html | 9 +- docs/acknowledgements.html | 33 +- docs/alternatives.html | 67 +- docs/downloads.html | 75 +- docs/feedback.html | 29 +- docs/index.html | 4 +- docs/license.html | 39 +- docs/main.html | 28 +- docs/manual/ant.html | 57 +- docs/manual/attributes.html | 217 ++++++ docs/manual/examples.html | 91 ++- docs/manual/gradle.html | 62 +- docs/manual/gui.html | 38 +- docs/manual/index.html | 15 +- docs/manual/introduction.html | 35 +- docs/manual/limitations.html | 23 +- docs/manual/optimizations.html | 26 +- docs/manual/refcard.html | 34 +- docs/manual/retrace/examples.html | 23 +- docs/manual/retrace/index.html | 15 +- docs/manual/retrace/introduction.html | 23 +- docs/manual/retrace/usage.html | 25 +- docs/manual/style.css | 10 + docs/manual/troubleshooting.html | 140 +++- docs/manual/usage.html | 205 +++--- docs/manual/wtk.html | 23 +- docs/proguard.appdata.xml | 32 + docs/quality.html | 25 +- docs/results.html | 25 +- docs/screenshots.html | 23 +- docs/sections.html | 8 - docs/style.css | 10 + docs/testimonials.html | 23 +- docs/title.html | 2 +- examples/android.pro | 4 +- examples/annotations/examples.pro | 4 +- examples/annotations/examples/Applet.java | 3 +- examples/annotations/examples/Application.java | 3 +- examples/annotations/examples/Bean.java | 3 +- examples/annotations/examples/NativeCallBack.java | 14 +- examples/annotations/lib/annotations.jar | Bin 6126 -> 6122 bytes examples/ant/applets.xml | 4 +- examples/ant/applications2.xml | 2 +- examples/ant/applications3.xml | 4 +- examples/ant/library.xml | 4 +- examples/ant/midlets.xml | 2 +- examples/ant/proguard.xml | 9 +- examples/ant/servlets.xml | 4 +- examples/applets.pro | 4 +- examples/applications.pro | 4 +- examples/gradle/android.gradle | 4 +- examples/gradle/applets.gradle | 4 +- examples/gradle/applications.gradle | 4 +- examples/gradle/library.gradle | 4 +- examples/gradle/midlets.gradle | 2 +- examples/gradle/proguard.gradle | 9 +- examples/gradle/proguardall.gradle | 9 +- examples/gradle/scala.gradle | 4 +- examples/gradle/servlets.gradle | 4 +- examples/library.pro | 4 +- examples/midlets.pro | 2 +- examples/scala.pro | 4 +- examples/servlets.pro | 4 +- lib/proguard.jar | Bin 742666 -> 853203 bytes lib/proguardgui.jar | Bin 138885 -> 139582 bytes lib/retrace.jar | Bin 6974 -> 6973 bytes src/proguard/ArgumentWordReader.java | 2 +- src/proguard/AssumeNoSideEffectsChecker.java | 98 +++ src/proguard/ClassMemberChecker.java | 158 ++++ src/proguard/ClassPath.java | 2 +- src/proguard/ClassPathEntry.java | 114 ++- src/proguard/ClassSpecification.java | 2 +- src/proguard/ClassSpecificationVisitorFactory.java | 54 +- src/proguard/Configuration.java | 2 +- src/proguard/ConfigurationChecker.java | 224 ++++++ src/proguard/ConfigurationConstants.java | 5 +- src/proguard/ConfigurationParser.java | 171 +++-- src/proguard/ConfigurationWriter.java | 20 +- src/proguard/DataEntryReaderFactory.java | 44 +- src/proguard/DataEntryWriterFactory.java | 26 +- src/proguard/DescriptorKeepChecker.java | 3 +- src/proguard/DuplicateClassPrinter.java | 2 +- src/proguard/FileWordReader.java | 2 +- src/proguard/FullyQualifiedClassNameChecker.java | 15 +- src/proguard/GPL.java | 9 +- src/proguard/GetAnnotationChecker.java | 80 ++ src/proguard/GetEnclosingClassChecker.java | 76 ++ src/proguard/GetEnclosingMethodChecker.java | 76 ++ src/proguard/GetSignatureChecker.java | 78 ++ src/proguard/Initializer.java | 156 +++- src/proguard/InputReader.java | 48 +- src/proguard/KeepClassMemberChecker.java | 10 +- src/proguard/KeepClassSpecification.java | 98 +-- src/proguard/LibraryKeepChecker.java | 115 +++ src/proguard/LineWordReader.java | 2 +- src/proguard/MemberSpecification.java | 2 +- src/proguard/OutputWriter.java | 131 +--- src/proguard/ParseException.java | 2 +- src/proguard/ProGuard.java | 35 +- src/proguard/SeedPrinter.java | 8 +- src/proguard/SubclassedClassFilter.java | 2 +- src/proguard/Targeter.java | 2 +- src/proguard/UpToDateChecker.java | 2 +- src/proguard/WordReader.java | 2 +- src/proguard/ant/ClassPathElement.java | 18 +- src/proguard/ant/ClassSpecificationElement.java | 29 +- src/proguard/ant/ConfigurationElement.java | 3 +- src/proguard/ant/ConfigurationTask.java | 2 +- src/proguard/ant/FilterElement.java | 2 +- src/proguard/ant/KeepSpecificationElement.java | 10 +- src/proguard/ant/MemberSpecificationElement.java | 38 +- src/proguard/ant/ProGuardTask.java | 14 +- src/proguard/classfile/ClassConstants.java | 457 ++++++------ src/proguard/classfile/ClassPool.java | 3 +- src/proguard/classfile/Clazz.java | 7 +- src/proguard/classfile/Field.java | 2 +- src/proguard/classfile/JavaConstants.java | 89 +++ src/proguard/classfile/LibraryClass.java | 19 +- src/proguard/classfile/LibraryField.java | 2 +- src/proguard/classfile/LibraryMember.java | 6 +- src/proguard/classfile/LibraryMethod.java | 2 +- src/proguard/classfile/Member.java | 2 +- src/proguard/classfile/Method.java | 2 +- src/proguard/classfile/ProgramClass.java | 24 +- src/proguard/classfile/ProgramField.java | 4 +- src/proguard/classfile/ProgramMember.java | 4 +- src/proguard/classfile/ProgramMethod.java | 4 +- src/proguard/classfile/VisitorAccepter.java | 2 +- src/proguard/classfile/attribute/Attribute.java | 9 +- .../classfile/attribute/BootstrapMethodInfo.java | 2 +- .../attribute/BootstrapMethodsAttribute.java | 12 +- .../classfile/attribute/CodeAttribute.java | 2 +- .../attribute/ConstantValueAttribute.java | 2 +- .../classfile/attribute/DeprecatedAttribute.java | 2 +- .../attribute/EnclosingMethodAttribute.java | 2 +- .../classfile/attribute/ExceptionInfo.java | 2 +- .../classfile/attribute/ExceptionsAttribute.java | 2 +- .../classfile/attribute/InnerClassesAttribute.java | 2 +- .../classfile/attribute/InnerClassesInfo.java | 2 +- .../classfile/attribute/LineNumberInfo.java | 2 +- .../attribute/LineNumberTableAttribute.java | 2 +- .../classfile/attribute/LocalVariableInfo.java | 20 +- .../attribute/LocalVariableTableAttribute.java | 2 +- .../classfile/attribute/LocalVariableTypeInfo.java | 20 +- .../attribute/LocalVariableTypeTableAttribute.java | 2 +- .../attribute/MethodParametersAttribute.java | 80 ++ .../classfile/attribute/ParameterInfo.java | 81 ++ .../classfile/attribute/SignatureAttribute.java | 11 +- .../classfile/attribute/SourceDirAttribute.java | 2 +- .../classfile/attribute/SourceFileAttribute.java | 2 +- .../classfile/attribute/SyntheticAttribute.java | 2 +- .../classfile/attribute/UnknownAttribute.java | 12 +- .../classfile/attribute/annotation/Annotation.java | 2 +- .../annotation/AnnotationDefaultAttribute.java | 2 +- .../annotation/AnnotationElementValue.java | 2 +- .../attribute/annotation/AnnotationsAttribute.java | 20 +- .../attribute/annotation/ArrayElementValue.java | 2 +- .../attribute/annotation/ClassElementValue.java | 11 +- .../attribute/annotation/ConstantElementValue.java | 2 +- .../attribute/annotation/ElementValue.java | 2 +- .../annotation/EnumConstantElementValue.java | 2 +- .../annotation/ParameterAnnotationsAttribute.java | 12 +- .../RuntimeInvisibleAnnotationsAttribute.java | 2 +- ...timeInvisibleParameterAnnotationsAttribute.java | 6 +- .../RuntimeInvisibleTypeAnnotationsAttribute.java | 77 ++ .../RuntimeVisibleAnnotationsAttribute.java | 2 +- ...untimeVisibleParameterAnnotationsAttribute.java | 6 +- .../RuntimeVisibleTypeAnnotationsAttribute.java | 77 ++ .../attribute/annotation/TypeAnnotation.java | 162 ++++ .../annotation/TypeAnnotationsAttribute.java | 98 +++ .../attribute/annotation/TypePathInfo.java | 50 ++ .../annotation/target/CatchTargetInfo.java | 82 +++ .../annotation/target/EmptyTargetInfo.java | 72 ++ .../target/FormalParameterTargetInfo.java | 81 ++ .../target/LocalVariableTargetElement.java | 53 ++ .../annotation/target/LocalVariableTargetInfo.java | 99 +++ .../annotation/target/OffsetTargetInfo.java | 82 +++ .../annotation/target/SuperTypeTargetInfo.java | 72 ++ .../attribute/annotation/target/TargetInfo.java | 97 +++ .../annotation/target/ThrowsTargetInfo.java | 81 ++ .../annotation/target/TypeArgumentTargetInfo.java | 85 +++ .../target/TypeParameterBoundTargetInfo.java | 87 +++ .../annotation/target/TypeParameterTargetInfo.java | 79 ++ .../visitor/LocalVariableTargetElementVisitor.java | 37 + .../target/visitor/TargetInfoVisitor.java | 50 ++ .../annotation/visitor/AllAnnotationVisitor.java | 60 +- .../annotation/visitor/AllElementValueVisitor.java | 11 +- .../annotation/visitor/AnnotatedClassVisitor.java | 2 +- .../visitor/AnnotationToMemberVisitor.java | 2 +- .../annotation/visitor/AnnotationTypeFilter.java | 13 +- .../annotation/visitor/AnnotationVisitor.java | 12 +- .../annotation/visitor/ElementValueVisitor.java | 2 +- .../annotation/visitor/TypeAnnotationVisitor.java | 41 ++ .../annotation/visitor/TypePathInfoVisitor.java | 41 ++ .../attribute/preverification/DoubleType.java | 2 +- .../attribute/preverification/FloatType.java | 2 +- .../attribute/preverification/FullFrame.java | 2 +- .../attribute/preverification/IntegerType.java | 2 +- .../attribute/preverification/LessZeroFrame.java | 2 +- .../attribute/preverification/LongType.java | 2 +- .../attribute/preverification/MoreZeroFrame.java | 2 +- .../attribute/preverification/NullType.java | 2 +- .../attribute/preverification/ObjectType.java | 2 +- .../attribute/preverification/SameOneFrame.java | 2 +- .../attribute/preverification/SameZeroFrame.java | 2 +- .../preverification/StackMapAttribute.java | 2 +- .../attribute/preverification/StackMapFrame.java | 2 +- .../preverification/StackMapTableAttribute.java | 2 +- .../attribute/preverification/TopType.java | 2 +- .../preverification/UninitializedThisType.java | 2 +- .../preverification/UninitializedType.java | 2 +- .../preverification/VerificationType.java | 2 +- .../preverification/VerificationTypeFactory.java | 2 +- .../visitor/StackMapFrameVisitor.java | 2 +- .../visitor/VerificationTypeVisitor.java | 2 +- .../attribute/visitor/AllAttributeVisitor.java | 2 +- .../visitor/AllBootstrapMethodInfoVisitor.java | 4 +- .../attribute/visitor/AllExceptionInfoVisitor.java | 2 +- .../visitor/AllInnerClassesInfoVisitor.java | 4 +- .../attribute/visitor/AttributeNameFilter.java | 147 +++- .../attribute/visitor/AttributeVisitor.java | 17 +- .../visitor/BootstrapMethodInfoVisitor.java | 8 +- .../attribute/visitor/ExceptionInfoVisitor.java | 2 +- .../attribute/visitor/InnerClassesInfoVisitor.java | 2 +- .../attribute/visitor/LineNumberInfoVisitor.java | 2 +- .../visitor/LocalVariableInfoVisitor.java | 2 +- .../visitor/LocalVariableTypeInfoVisitor.java | 2 +- .../attribute/visitor/MultiAttributeVisitor.java | 83 ++- .../attribute/visitor/NonEmptyAttributeFilter.java | 152 +++- .../attribute/visitor/ParameterInfoVisitor.java | 37 + .../attribute/visitor/RequiredAttributeFilter.java | 147 +++- .../attribute/visitor/StackSizeComputer.java | 4 +- src/proguard/classfile/constant/ClassConstant.java | 2 +- src/proguard/classfile/constant/Constant.java | 2 +- .../classfile/constant/DoubleConstant.java | 2 +- .../classfile/constant/FieldrefConstant.java | 2 +- src/proguard/classfile/constant/FloatConstant.java | 2 +- .../classfile/constant/IntegerConstant.java | 2 +- .../constant/InterfaceMethodrefConstant.java | 2 +- .../classfile/constant/InvokeDynamicConstant.java | 4 +- src/proguard/classfile/constant/LongConstant.java | 2 +- .../classfile/constant/MethodHandleConstant.java | 12 +- .../classfile/constant/MethodTypeConstant.java | 31 +- .../classfile/constant/MethodrefConstant.java | 2 +- .../classfile/constant/NameAndTypeConstant.java | 2 +- src/proguard/classfile/constant/RefConstant.java | 2 +- .../classfile/constant/StringConstant.java | 2 +- src/proguard/classfile/constant/Utf8Constant.java | 2 +- .../constant/visitor/AllConstantVisitor.java | 2 +- .../visitor/BootstrapMethodArgumentVisitor.java | 56 ++ .../visitor/BootstrapMethodHandleTraveler.java | 8 +- .../constant/visitor/ConstantTagFilter.java | 4 +- .../constant/visitor/ConstantVisitor.java | 2 +- .../visitor/ExceptClassConstantFilter.java | 9 +- .../constant/visitor/MethodrefTraveler.java | 3 +- src/proguard/classfile/editor/AccessFixer.java | 234 +++--- src/proguard/classfile/editor/AnnotationAdder.java | 2 +- .../editor/AnnotationsAttributeEditor.java | 2 +- src/proguard/classfile/editor/AttributeAdder.java | 42 +- src/proguard/classfile/editor/AttributeSorter.java | 2 +- .../classfile/editor/AttributesEditor.java | 71 +- .../classfile/editor/BootstrapMethodInfoAdder.java | 86 +++ .../classfile/editor/BootstrapMethodRemapper.java | 88 +++ .../editor/BootstrapMethodsAttributeAdder.java | 91 +++ .../editor/BootstrapMethodsAttributeEditor.java | 60 ++ .../classfile/editor/BridgeMethodFixer.java | 12 +- src/proguard/classfile/editor/ClassEditor.java | 2 +- .../classfile/editor/ClassElementSorter.java | 2 +- .../classfile/editor/ClassMemberSorter.java | 2 +- .../classfile/editor/ClassReferenceFixer.java | 93 ++- .../classfile/editor/CodeAttributeComposer.java | 73 +- .../classfile/editor/CodeAttributeEditor.java | 142 +++- .../editor/CodeAttributeEditorResetter.java | 2 +- .../classfile/editor/ComparableConstant.java | 77 +- src/proguard/classfile/editor/ConstantAdder.java | 28 +- .../classfile/editor/ConstantPoolEditor.java | 2 +- .../classfile/editor/ConstantPoolRemapper.java | 36 +- .../classfile/editor/ConstantPoolShrinker.java | 34 +- .../classfile/editor/ConstantPoolSorter.java | 2 +- .../classfile/editor/ElementValueAdder.java | 2 +- .../classfile/editor/ElementValuesEditor.java | 4 +- src/proguard/classfile/editor/ExceptionAdder.java | 2 +- .../classfile/editor/ExceptionInfoAdder.java | 2 +- .../editor/ExceptionsAttributeEditor.java | 2 +- .../classfile/editor/InnerClassesAccessFixer.java | 6 +- .../classfile/editor/InstructionAdder.java | 6 +- .../classfile/editor/InstructionWriter.java | 2 +- src/proguard/classfile/editor/InterfaceAdder.java | 5 +- .../classfile/editor/InterfaceDeleter.java | 190 +++++ src/proguard/classfile/editor/InterfaceSorter.java | 48 +- .../classfile/editor/InterfacesEditor.java | 33 +- .../classfile/editor/LineNumberInfoAdder.java | 6 +- .../editor/LineNumberTableAttributeEditor.java | 2 +- .../classfile/editor/LocalVariableInfoAdder.java | 16 +- .../editor/LocalVariableTableAttributeEditor.java | 28 +- .../editor/LocalVariableTypeInfoAdder.java | 16 +- .../LocalVariableTypeTableAttributeEditor.java | 30 +- src/proguard/classfile/editor/MemberAdder.java | 18 +- .../classfile/editor/MemberReferenceFixer.java | 4 +- .../classfile/editor/MethodInvocationFixer.java | 12 +- .../classfile/editor/NameAndTypeShrinker.java | 17 +- .../classfile/editor/NamedAttributeDeleter.java | 36 +- .../ParameterAnnotationsAttributeEditor.java | 25 +- .../classfile/editor/ParameterInfoAdder.java | 62 ++ .../classfile/editor/StackSizeUpdater.java | 2 +- src/proguard/classfile/editor/SubclassAdder.java | 2 +- src/proguard/classfile/editor/SubclassToAdder.java | 2 +- src/proguard/classfile/editor/Utf8Shrinker.java | 38 +- src/proguard/classfile/editor/VariableCleaner.java | 2 +- src/proguard/classfile/editor/VariableEditor.java | 2 +- .../classfile/editor/VariableRemapper.java | 62 +- .../classfile/editor/VariableSizeUpdater.java | 2 +- .../classfile/instruction/BranchInstruction.java | 2 +- .../classfile/instruction/ConstantInstruction.java | 2 +- .../classfile/instruction/Instruction.java | 219 +++++- .../instruction/InstructionConstants.java | 2 +- .../classfile/instruction/InstructionFactory.java | 2 +- .../classfile/instruction/InstructionUtil.java | 34 +- .../instruction/LookUpSwitchInstruction.java | 2 +- .../classfile/instruction/SimpleInstruction.java | 2 +- .../classfile/instruction/SwitchInstruction.java | 2 +- .../instruction/TableSwitchInstruction.java | 2 +- .../classfile/instruction/VariableInstruction.java | 2 +- .../instruction/visitor/AllInstructionVisitor.java | 2 +- .../visitor/InstructionConstantVisitor.java | 4 +- .../instruction/visitor/InstructionCounter.java | 2 +- .../instruction/visitor/InstructionVisitor.java | 2 +- .../visitor/MultiInstructionVisitor.java | 2 +- src/proguard/classfile/io/LibraryClassReader.java | 4 +- src/proguard/classfile/io/ProgramClassReader.java | 235 +++++- src/proguard/classfile/io/ProgramClassWriter.java | 144 +++- src/proguard/classfile/io/RuntimeDataInput.java | 2 +- src/proguard/classfile/io/RuntimeDataOutput.java | 2 +- src/proguard/classfile/util/AccessUtil.java | 26 +- .../classfile/util/AllParameterVisitor.java | 239 ++++++ .../classfile/util/ClassReferenceInitializer.java | 38 +- .../util/ClassSubHierarchyInitializer.java | 2 +- .../util/ClassSuperHierarchyInitializer.java | 2 +- src/proguard/classfile/util/ClassUtil.java | 496 +++++++------ .../classfile/util/DescriptorClassEnumeration.java | 49 +- .../util/DynamicClassReferenceInitializer.java | 61 +- .../util/DynamicMemberReferenceInitializer.java | 81 +- .../util/EnumFieldReferenceInitializer.java | 17 +- .../classfile/util/ExternalTypeEnumeration.java | 12 +- .../classfile/util/InstructionSequenceMatcher.java | 10 +- .../classfile/util/InternalTypeEnumeration.java | 31 +- src/proguard/classfile/util/MemberFinder.java | 6 +- src/proguard/classfile/util/MethodLinker.java | 7 +- src/proguard/classfile/util/SimplifiedVisitor.java | 282 ++++++- .../classfile/util/StringReferenceInitializer.java | 2 +- src/proguard/classfile/util/StringSharer.java | 2 +- src/proguard/classfile/util/WarningPrinter.java | 2 +- .../classfile/visitor/AllClassVisitor.java | 2 +- .../classfile/visitor/AllFieldVisitor.java | 2 +- .../classfile/visitor/AllMemberVisitor.java | 2 +- .../classfile/visitor/AllMethodVisitor.java | 2 +- .../classfile/visitor/BottomClassFilter.java | 2 +- .../classfile/visitor/ClassAccessFilter.java | 2 +- src/proguard/classfile/visitor/ClassCleaner.java | 91 ++- src/proguard/classfile/visitor/ClassCollector.java | 2 +- src/proguard/classfile/visitor/ClassCounter.java | 2 +- .../classfile/visitor/ClassHierarchyTraveler.java | 2 +- .../classfile/visitor/ClassNameFilter.java | 2 +- .../classfile/visitor/ClassPoolFiller.java | 2 +- .../classfile/visitor/ClassPoolVisitor.java | 2 +- .../classfile/visitor/ClassPresenceFilter.java | 2 +- src/proguard/classfile/visitor/ClassPrinter.java | 226 +++++- .../classfile/visitor/ClassVersionFilter.java | 2 +- .../classfile/visitor/ClassVersionSetter.java | 2 +- src/proguard/classfile/visitor/ClassVisitor.java | 2 +- .../visitor/ConcreteClassDownTraveler.java | 10 +- .../classfile/visitor/DotClassClassVisitor.java | 2 +- .../visitor/DynamicReturnedClassVisitor.java | 68 ++ .../classfile/visitor/ExceptClassFilter.java | 2 +- .../classfile/visitor/ExceptClassesFilter.java | 2 +- .../classfile/visitor/ExceptionCounter.java | 2 +- .../visitor/ExceptionExcludedOffsetFilter.java | 2 +- .../visitor/ExceptionHandlerConstantVisitor.java | 4 +- .../classfile/visitor/ExceptionHandlerFilter.java | 2 +- .../classfile/visitor/ExceptionOffsetFilter.java | 2 +- .../classfile/visitor/ExceptionRangeFilter.java | 2 +- .../visitor/ImplementedClassConstantFilter.java | 6 +- .../classfile/visitor/ImplementedClassFilter.java | 2 +- .../visitor/ImplementingClassConstantFilter.java | 6 +- .../classfile/visitor/LibraryClassFilter.java | 2 +- .../classfile/visitor/LibraryMemberFilter.java | 2 +- .../classfile/visitor/MemberAccessFilter.java | 8 +- .../classfile/visitor/MemberClassAccessFilter.java | 2 +- .../classfile/visitor/MemberCollector.java | 2 +- src/proguard/classfile/visitor/MemberCounter.java | 2 +- .../classfile/visitor/MemberDescriptorFilter.java | 2 +- .../MemberDescriptorReferencedClassVisitor.java | 65 ++ .../classfile/visitor/MemberNameFilter.java | 2 +- .../classfile/visitor/MemberToClassVisitor.java | 2 +- src/proguard/classfile/visitor/MemberVisitor.java | 2 +- .../visitor/MethodImplementationFilter.java | 2 +- .../visitor/MethodImplementationTraveler.java | 16 +- .../classfile/visitor/MultiClassPoolVisitor.java | 2 +- .../classfile/visitor/MultiClassVisitor.java | 2 +- .../classfile/visitor/MultiMemberVisitor.java | 2 +- .../classfile/visitor/NamedClassVisitor.java | 2 +- .../classfile/visitor/NamedFieldVisitor.java | 2 +- .../classfile/visitor/NamedMethodVisitor.java | 2 +- .../classfile/visitor/ParameterVisitor.java | 56 ++ .../classfile/visitor/ProgramClassFilter.java | 2 +- .../classfile/visitor/ProgramMemberFilter.java | 2 +- .../classfile/visitor/ReferencedClassVisitor.java | 18 +- .../classfile/visitor/ReferencedMemberVisitor.java | 2 +- .../classfile/visitor/SimilarMemberVisitor.java | 2 +- .../classfile/visitor/SimpleClassPrinter.java | 2 +- src/proguard/classfile/visitor/SubclassFilter.java | 2 +- .../classfile/visitor/SubclassTraveler.java | 2 +- .../classfile/visitor/VariableClassVisitor.java | 2 +- .../classfile/visitor/VariableMemberVisitor.java | 2 +- src/proguard/evaluation/BasicBranchUnit.java | 2 +- src/proguard/evaluation/BasicInvocationUnit.java | 13 +- src/proguard/evaluation/BranchUnit.java | 2 +- .../evaluation/ClassConstantValueFactory.java | 10 +- src/proguard/evaluation/ConstantValueFactory.java | 8 +- src/proguard/evaluation/InvocationUnit.java | 2 +- src/proguard/evaluation/Processor.java | 103 +-- src/proguard/evaluation/Stack.java | 2 +- src/proguard/evaluation/TracedStack.java | 158 ++-- src/proguard/evaluation/TracedVariables.java | 2 +- src/proguard/evaluation/Variables.java | 2 +- .../evaluation/value/ArrayReferenceValue.java | 165 +++++ src/proguard/evaluation/value/Category1Value.java | 2 +- src/proguard/evaluation/value/Category2Value.java | 2 +- src/proguard/evaluation/value/ComparisonValue.java | 2 +- .../evaluation/value/CompositeDoubleValue.java | 2 +- .../evaluation/value/CompositeFloatValue.java | 2 +- .../evaluation/value/CompositeIntegerValue.java | 2 +- .../evaluation/value/CompositeLongValue.java | 2 +- .../evaluation/value/ConvertedByteValue.java | 2 +- .../evaluation/value/ConvertedCharacterValue.java | 2 +- .../evaluation/value/ConvertedDoubleValue.java | 2 +- .../evaluation/value/ConvertedFloatValue.java | 2 +- .../evaluation/value/ConvertedIntegerValue.java | 2 +- .../evaluation/value/ConvertedLongValue.java | 2 +- .../evaluation/value/ConvertedShortValue.java | 2 +- .../value/DetailedArrayReferenceValue.java | 301 ++++++++ .../evaluation/value/DetailedValueFactory.java | 48 ++ src/proguard/evaluation/value/DoubleValue.java | 4 +- src/proguard/evaluation/value/FloatValue.java | 4 +- .../value/IdentifiedArrayReferenceValue.java | 159 ++++ .../evaluation/value/IdentifiedDoubleValue.java | 2 +- .../evaluation/value/IdentifiedFloatValue.java | 2 +- .../evaluation/value/IdentifiedIntegerValue.java | 2 +- .../evaluation/value/IdentifiedLongValue.java | 2 +- .../evaluation/value/IdentifiedReferenceValue.java | 81 +- .../evaluation/value/IdentifiedValueFactory.java | 37 +- .../evaluation/value/InitialValueFactory.java | 79 ++ .../evaluation/value/InstructionOffsetValue.java | 65 +- src/proguard/evaluation/value/IntegerValue.java | 4 +- src/proguard/evaluation/value/LongValue.java | 4 +- .../evaluation/value/NegatedDoubleValue.java | 2 +- .../evaluation/value/NegatedFloatValue.java | 2 +- .../evaluation/value/NegatedIntegerValue.java | 2 +- .../evaluation/value/NegatedLongValue.java | 2 +- .../evaluation/value/ParticularDoubleValue.java | 8 +- .../evaluation/value/ParticularFloatValue.java | 8 +- .../evaluation/value/ParticularIntegerValue.java | 2 +- .../evaluation/value/ParticularLongValue.java | 2 +- .../evaluation/value/ParticularValueFactory.java | 111 +++ src/proguard/evaluation/value/ReferenceValue.java | 553 ++++---------- .../evaluation/value/SpecificDoubleValue.java | 4 +- .../evaluation/value/SpecificFloatValue.java | 4 +- .../evaluation/value/SpecificIntegerValue.java | 8 +- .../evaluation/value/SpecificLongValue.java | 8 +- .../evaluation/value/SpecificValueFactory.java | 97 --- src/proguard/evaluation/value/TopValue.java | 2 +- .../evaluation/value/TypedReferenceValue.java | 613 +++++++++++++++ .../evaluation/value/UnknownDoubleValue.java | 2 +- .../evaluation/value/UnknownFloatValue.java | 2 +- .../evaluation/value/UnknownIntegerValue.java | 2 +- .../evaluation/value/UnknownLongValue.java | 2 +- src/proguard/evaluation/value/Value.java | 36 +- src/proguard/evaluation/value/ValueFactory.java | 63 +- src/proguard/gradle/ProGuardTask.java | 180 +++-- src/proguard/gui/ClassPathPanel.java | 14 +- src/proguard/gui/ClassSpecificationDialog.java | 86 ++- src/proguard/gui/ClassSpecificationsPanel.java | 2 +- src/proguard/gui/ExtensionFileFilter.java | 2 +- src/proguard/gui/FilterBuilder.java | 2 +- src/proguard/gui/FilterDialog.java | 57 +- src/proguard/gui/GUIResources.java | 2 +- src/proguard/gui/GUIResources.properties | 44 +- src/proguard/gui/KeepSpecificationsPanel.java | 24 +- src/proguard/gui/ListPanel.java | 9 +- src/proguard/gui/MemberSpecificationDialog.java | 62 +- src/proguard/gui/MemberSpecificationsPanel.java | 6 +- src/proguard/gui/MessageDialogRunnable.java | 3 +- src/proguard/gui/OptimizationsDialog.java | 2 +- src/proguard/gui/ProGuardGUI.java | 6 +- src/proguard/gui/ProGuardRunnable.java | 2 +- src/proguard/gui/ReTraceRunnable.java | 2 +- src/proguard/gui/SwingUtil.java | 2 +- src/proguard/gui/TabbedPane.java | 2 +- src/proguard/gui/TextAreaOutputStream.java | 3 +- src/proguard/gui/boilerplate.pro | 2 +- src/proguard/gui/default.pro | 2 +- src/proguard/gui/splash/BufferedSprite.java | 2 +- src/proguard/gui/splash/CircleSprite.java | 2 +- src/proguard/gui/splash/ClipSprite.java | 2 +- src/proguard/gui/splash/ColorSprite.java | 2 +- src/proguard/gui/splash/CompositeSprite.java | 2 +- src/proguard/gui/splash/ConstantColor.java | 2 +- src/proguard/gui/splash/ConstantDouble.java | 2 +- src/proguard/gui/splash/ConstantFont.java | 2 +- src/proguard/gui/splash/ConstantInt.java | 2 +- src/proguard/gui/splash/ConstantString.java | 2 +- src/proguard/gui/splash/ConstantTiming.java | 2 +- src/proguard/gui/splash/FontSprite.java | 2 +- src/proguard/gui/splash/ImageSprite.java | 2 +- src/proguard/gui/splash/LinearColor.java | 2 +- src/proguard/gui/splash/LinearDouble.java | 2 +- src/proguard/gui/splash/LinearInt.java | 2 +- src/proguard/gui/splash/LinearTiming.java | 2 +- src/proguard/gui/splash/OverrideGraphics2D.java | 2 +- src/proguard/gui/splash/RectangleSprite.java | 2 +- src/proguard/gui/splash/SawToothTiming.java | 2 +- src/proguard/gui/splash/ShadowedSprite.java | 2 +- src/proguard/gui/splash/SineTiming.java | 2 +- src/proguard/gui/splash/SmoothTiming.java | 2 +- src/proguard/gui/splash/SplashPanel.java | 2 +- src/proguard/gui/splash/Sprite.java | 2 +- src/proguard/gui/splash/TextSprite.java | 2 +- src/proguard/gui/splash/TimeSwitchSprite.java | 2 +- src/proguard/gui/splash/Timing.java | 2 +- src/proguard/gui/splash/TypeWriterString.java | 2 +- src/proguard/gui/splash/VariableColor.java | 2 +- src/proguard/gui/splash/VariableDouble.java | 2 +- src/proguard/gui/splash/VariableFont.java | 2 +- src/proguard/gui/splash/VariableInt.java | 2 +- src/proguard/gui/splash/VariableSizeFont.java | 2 +- src/proguard/gui/splash/VariableString.java | 2 +- src/proguard/io/CascadingDataEntryWriter.java | 2 +- src/proguard/io/ClassFilter.java | 4 +- src/proguard/io/ClassReader.java | 4 +- src/proguard/io/ClassRewriter.java | 2 +- src/proguard/io/DataEntry.java | 2 +- src/proguard/io/DataEntryClassWriter.java | 8 +- src/proguard/io/DataEntryCopier.java | 204 +++-- src/proguard/io/DataEntryDirectoryFilter.java | 4 +- src/proguard/io/DataEntryFilter.java | 2 +- src/proguard/io/DataEntryNameFilter.java | 2 +- src/proguard/io/DataEntryObfuscator.java | 4 +- src/proguard/io/DataEntryParentFilter.java | 2 +- src/proguard/io/DataEntryPump.java | 2 +- src/proguard/io/DataEntryReader.java | 2 +- src/proguard/io/DataEntryRenamer.java | 4 +- src/proguard/io/DataEntryRewriter.java | 6 +- src/proguard/io/DataEntryWriter.java | 2 +- src/proguard/io/DirectoryFilter.java | 8 +- src/proguard/io/DirectoryPump.java | 2 +- src/proguard/io/DirectoryWriter.java | 4 +- src/proguard/io/FileDataEntry.java | 6 +- src/proguard/io/FilteredDataEntryReader.java | 2 +- src/proguard/io/FilteredDataEntryWriter.java | 2 +- src/proguard/io/Finisher.java | 2 +- src/proguard/io/JarReader.java | 2 +- src/proguard/io/JarWriter.java | 9 +- src/proguard/io/ManifestRewriter.java | 4 +- src/proguard/io/NameFilter.java | 2 +- src/proguard/io/ParentDataEntryWriter.java | 2 +- src/proguard/io/RenamedDataEntry.java | 2 +- src/proguard/io/ZipDataEntry.java | 17 +- src/proguard/obfuscate/AttributeShrinker.java | 2 +- src/proguard/obfuscate/AttributeUsageMarker.java | 2 +- src/proguard/obfuscate/ClassObfuscator.java | 10 +- src/proguard/obfuscate/ClassRenamer.java | 2 +- src/proguard/obfuscate/DictionaryNameFactory.java | 2 +- src/proguard/obfuscate/MapCleaner.java | 4 +- src/proguard/obfuscate/MappingKeeper.java | 4 +- src/proguard/obfuscate/MappingPrinter.java | 5 +- src/proguard/obfuscate/MappingProcessor.java | 2 +- src/proguard/obfuscate/MappingReader.java | 2 +- src/proguard/obfuscate/MemberNameCleaner.java | 2 +- src/proguard/obfuscate/MemberNameCollector.java | 7 +- .../obfuscate/MemberNameConflictFixer.java | 5 +- src/proguard/obfuscate/MemberNameFilter.java | 4 +- src/proguard/obfuscate/MemberObfuscator.java | 5 +- .../obfuscate/MemberSpecialNameFilter.java | 2 +- src/proguard/obfuscate/MultiMappingProcessor.java | 2 +- src/proguard/obfuscate/NameFactory.java | 2 +- src/proguard/obfuscate/NameFactoryResetter.java | 2 +- src/proguard/obfuscate/NameMarker.java | 14 +- src/proguard/obfuscate/NumericNameFactory.java | 5 +- src/proguard/obfuscate/Obfuscator.java | 47 +- src/proguard/obfuscate/ParameterNameMarker.java | 16 +- src/proguard/obfuscate/SimpleNameFactory.java | 2 +- src/proguard/obfuscate/SourceFileRenamer.java | 2 +- src/proguard/obfuscate/SpecialNameFactory.java | 2 +- .../optimize/BootstrapMethodArgumentShrinker.java | 13 +- src/proguard/optimize/ChangedCodePrinter.java | 57 +- src/proguard/optimize/ConstantMemberFilter.java | 2 +- src/proguard/optimize/ConstantParameterFilter.java | 5 +- .../optimize/DuplicateInitializerFixer.java | 34 +- .../DuplicateInitializerInvocationFixer.java | 12 +- src/proguard/optimize/KeepMarker.java | 2 +- src/proguard/optimize/KeptClassFilter.java | 2 +- src/proguard/optimize/KeptMemberFilter.java | 2 +- .../optimize/MemberDescriptorSpecializer.java | 4 +- .../optimize/MethodDescriptorShrinker.java | 139 ++-- src/proguard/optimize/MethodStaticizer.java | 6 +- .../optimize/OptimizationInfoMemberFilter.java | 2 +- src/proguard/optimize/Optimizer.java | 168 ++++- src/proguard/optimize/ParameterShrinker.java | 8 +- src/proguard/optimize/TailRecursionSimplifier.java | 37 +- src/proguard/optimize/WriteOnlyFieldFilter.java | 2 +- .../optimize/evaluation/EvaluationShrinker.java | 280 ++++--- .../optimize/evaluation/EvaluationSimplifier.java | 404 +++++++++- .../optimize/evaluation/LivenessAnalyzer.java | 2 +- .../optimize/evaluation/LoadingInvocationUnit.java | 45 +- .../optimize/evaluation/PartialEvaluator.java | 43 +- .../evaluation/SimpleEnumArrayPropagator.java | 94 +++ .../evaluation/SimpleEnumClassChecker.java | 74 ++ .../evaluation/SimpleEnumClassSimplifier.java | 164 +++++ .../evaluation/SimpleEnumDescriptorSimplifier.java | 583 +++++++++++++++ .../optimize/evaluation/SimpleEnumUseChecker.java | 760 +++++++++++++++++++ .../evaluation/SimpleEnumUseSimplifier.java | 820 +++++++++++++++++++++ .../optimize/evaluation/StoringInvocationUnit.java | 6 +- .../optimize/evaluation/TracedBranchUnit.java | 2 +- .../optimize/evaluation/VariableOptimizer.java | 8 +- src/proguard/optimize/info/AccessMethodMarker.java | 13 +- .../optimize/info/BackwardBranchMarker.java | 2 +- .../optimize/info/CatchExceptionMarker.java | 2 +- src/proguard/optimize/info/CaughtClassFilter.java | 2 +- src/proguard/optimize/info/CaughtClassMarker.java | 3 +- .../optimize/info/ClassOptimizationInfo.java | 16 +- .../optimize/info/ClassOptimizationInfoSetter.java | 4 +- src/proguard/optimize/info/DotClassFilter.java | 2 +- src/proguard/optimize/info/DotClassMarker.java | 2 +- .../optimize/info/DynamicInvocationMarker.java | 79 ++ .../optimize/info/ExceptionInstructionChecker.java | 101 ++- .../optimize/info/FieldOptimizationInfo.java | 82 +-- .../optimize/info/InstanceofClassFilter.java | 2 +- .../optimize/info/InstanceofClassMarker.java | 2 +- .../optimize/info/InstantiationClassFilter.java | 2 +- .../optimize/info/InstantiationClassMarker.java | 2 +- .../info/MemberOptimizationInfoSetter.java | 2 +- .../optimize/info/MethodInvocationMarker.java | 2 +- .../optimize/info/MethodOptimizationInfo.java | 25 +- .../optimize/info/NoSideEffectMethodMarker.java | 2 +- .../optimize/info/NonPrivateMemberMarker.java | 10 +- .../PackageVisibleMemberContainingClassMarker.java | 8 +- .../PackageVisibleMemberInvokingClassMarker.java | 10 +- .../optimize/info/ParameterUsageMarker.java | 16 +- .../optimize/info/ReadWriteFieldMarker.java | 2 +- .../info/SideEffectInstructionChecker.java | 108 ++- .../optimize/info/SideEffectMethodFilter.java | 2 +- .../optimize/info/SideEffectMethodMarker.java | 8 +- src/proguard/optimize/info/SimpleEnumFilter.java | 63 ++ src/proguard/optimize/info/SimpleEnumMarker.java | 75 ++ .../StaticInitializerContainingClassFilter.java | 2 +- .../StaticInitializerContainingClassMarker.java | 8 +- .../optimize/info/SuperInvocationMarker.java | 4 +- .../optimize/info/VariableUsageMarker.java | 2 +- .../optimize/peephole/BranchTargetFinder.java | 85 ++- src/proguard/optimize/peephole/ClassFinalizer.java | 14 +- src/proguard/optimize/peephole/ClassMerger.java | 171 +++-- .../optimize/peephole/GotoCommonCodeReplacer.java | 2 +- .../optimize/peephole/GotoGotoReplacer.java | 2 +- .../optimize/peephole/GotoReturnReplacer.java | 2 +- .../optimize/peephole/HorizontalClassMerger.java | 4 +- .../peephole/InstructionSequenceConstants.java | 76 +- .../peephole/InstructionSequenceReplacer.java | 5 +- .../peephole/InstructionSequencesReplacer.java | 2 +- .../optimize/peephole/MemberPrivatizer.java | 8 +- .../optimize/peephole/MethodFinalizer.java | 20 +- src/proguard/optimize/peephole/MethodInliner.java | 69 +- src/proguard/optimize/peephole/NopRemover.java | 2 +- .../optimize/peephole/PeepholeOptimizer.java | 2 +- .../optimize/peephole/ReachableCodeMarker.java | 2 +- .../RetargetedInnerClassAttributeRemover.java | 2 +- .../optimize/peephole/TargetClassChanger.java | 92 ++- .../optimize/peephole/UnreachableCodeRemover.java | 2 +- .../peephole/UnreachableExceptionRemover.java | 11 +- .../optimize/peephole/VariableShrinker.java | 4 +- .../optimize/peephole/VerticalClassMerger.java | 4 +- src/proguard/preverify/CodePreverifier.java | 8 +- src/proguard/preverify/CodeSubroutineInliner.java | 27 +- src/proguard/preverify/Preverifier.java | 23 +- src/proguard/preverify/SubroutineInliner.java | 4 +- src/proguard/retrace/ReTrace.java | 35 +- src/proguard/shrink/AnnotationUsageMarker.java | 2 +- src/proguard/shrink/ClassShrinker.java | 193 +++-- src/proguard/shrink/InnerUsageMarker.java | 2 +- src/proguard/shrink/InterfaceUsageMarker.java | 2 +- .../shrink/LocalVariableTypeUsageMarker.java | 5 +- src/proguard/shrink/ShortestUsageMark.java | 2 +- src/proguard/shrink/ShortestUsageMarker.java | 2 +- src/proguard/shrink/ShortestUsagePrinter.java | 2 +- src/proguard/shrink/Shrinker.java | 14 +- src/proguard/shrink/SignatureUsageMarker.java | 19 +- src/proguard/shrink/UsageMarker.java | 83 ++- src/proguard/shrink/UsagePrinter.java | 3 +- src/proguard/shrink/UsedClassFilter.java | 2 +- src/proguard/shrink/UsedMemberFilter.java | 2 +- src/proguard/util/AndMatcher.java | 2 +- src/proguard/util/ArrayUtil.java | 57 +- src/proguard/util/ClassNameParser.java | 35 +- src/proguard/util/ConstantMatcher.java | 2 +- src/proguard/util/EmptyStringMatcher.java | 2 +- src/proguard/util/ExtensionMatcher.java | 2 +- src/proguard/util/FileNameParser.java | 2 +- src/proguard/util/FixedStringMatcher.java | 2 +- src/proguard/util/ListMatcher.java | 2 +- src/proguard/util/ListParser.java | 2 +- src/proguard/util/ListUtil.java | 2 +- src/proguard/util/NameParser.java | 2 +- src/proguard/util/NotMatcher.java | 2 +- src/proguard/util/ObjectUtil.java | 2 +- src/proguard/util/OrMatcher.java | 2 +- src/proguard/util/SettableMatcher.java | 2 +- src/proguard/util/StringMatcher.java | 2 +- src/proguard/util/StringParser.java | 2 +- src/proguard/util/VariableStringMatcher.java | 2 +- src/proguard/wtk/ProGuardObfuscator.java | 2 +- 739 files changed, 16791 insertions(+), 4605 deletions(-) create mode 100644 docs/manual/attributes.html create mode 100644 docs/proguard.appdata.xml create mode 100644 src/proguard/AssumeNoSideEffectsChecker.java create mode 100644 src/proguard/ClassMemberChecker.java create mode 100644 src/proguard/ConfigurationChecker.java create mode 100644 src/proguard/GetAnnotationChecker.java create mode 100644 src/proguard/GetEnclosingClassChecker.java create mode 100644 src/proguard/GetEnclosingMethodChecker.java create mode 100644 src/proguard/GetSignatureChecker.java create mode 100644 src/proguard/LibraryKeepChecker.java create mode 100644 src/proguard/classfile/JavaConstants.java create mode 100644 src/proguard/classfile/attribute/MethodParametersAttribute.java create mode 100644 src/proguard/classfile/attribute/ParameterInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/RuntimeInvisibleTypeAnnotationsAttribute.java create mode 100644 src/proguard/classfile/attribute/annotation/RuntimeVisibleTypeAnnotationsAttribute.java create mode 100644 src/proguard/classfile/attribute/annotation/TypeAnnotation.java create mode 100644 src/proguard/classfile/attribute/annotation/TypeAnnotationsAttribute.java create mode 100644 src/proguard/classfile/attribute/annotation/TypePathInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/CatchTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/EmptyTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/FormalParameterTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/LocalVariableTargetElement.java create mode 100644 src/proguard/classfile/attribute/annotation/target/LocalVariableTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/OffsetTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/SuperTypeTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/TargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/ThrowsTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/TypeArgumentTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/TypeParameterBoundTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/TypeParameterTargetInfo.java create mode 100644 src/proguard/classfile/attribute/annotation/target/visitor/LocalVariableTargetElementVisitor.java create mode 100644 src/proguard/classfile/attribute/annotation/target/visitor/TargetInfoVisitor.java create mode 100644 src/proguard/classfile/attribute/annotation/visitor/TypeAnnotationVisitor.java create mode 100644 src/proguard/classfile/attribute/annotation/visitor/TypePathInfoVisitor.java create mode 100644 src/proguard/classfile/attribute/visitor/ParameterInfoVisitor.java create mode 100644 src/proguard/classfile/constant/visitor/BootstrapMethodArgumentVisitor.java create mode 100644 src/proguard/classfile/editor/BootstrapMethodInfoAdder.java create mode 100644 src/proguard/classfile/editor/BootstrapMethodRemapper.java create mode 100644 src/proguard/classfile/editor/BootstrapMethodsAttributeAdder.java create mode 100644 src/proguard/classfile/editor/BootstrapMethodsAttributeEditor.java create mode 100644 src/proguard/classfile/editor/InterfaceDeleter.java create mode 100644 src/proguard/classfile/editor/ParameterInfoAdder.java create mode 100644 src/proguard/classfile/util/AllParameterVisitor.java create mode 100644 src/proguard/classfile/visitor/DynamicReturnedClassVisitor.java create mode 100644 src/proguard/classfile/visitor/MemberDescriptorReferencedClassVisitor.java create mode 100644 src/proguard/classfile/visitor/ParameterVisitor.java create mode 100644 src/proguard/evaluation/value/ArrayReferenceValue.java create mode 100644 src/proguard/evaluation/value/DetailedArrayReferenceValue.java create mode 100644 src/proguard/evaluation/value/DetailedValueFactory.java create mode 100644 src/proguard/evaluation/value/IdentifiedArrayReferenceValue.java create mode 100644 src/proguard/evaluation/value/InitialValueFactory.java create mode 100644 src/proguard/evaluation/value/ParticularValueFactory.java delete mode 100644 src/proguard/evaluation/value/SpecificValueFactory.java create mode 100644 src/proguard/evaluation/value/TypedReferenceValue.java create mode 100644 src/proguard/optimize/evaluation/SimpleEnumArrayPropagator.java create mode 100644 src/proguard/optimize/evaluation/SimpleEnumClassChecker.java create mode 100644 src/proguard/optimize/evaluation/SimpleEnumClassSimplifier.java create mode 100644 src/proguard/optimize/evaluation/SimpleEnumDescriptorSimplifier.java create mode 100644 src/proguard/optimize/evaluation/SimpleEnumUseChecker.java create mode 100644 src/proguard/optimize/evaluation/SimpleEnumUseSimplifier.java create mode 100644 src/proguard/optimize/info/DynamicInvocationMarker.java create mode 100644 src/proguard/optimize/info/SimpleEnumFilter.java create mode 100644 src/proguard/optimize/info/SimpleEnumMarker.java diff --git a/NOTICE b/NOTICE index d5e3c8d..5a78fed 100644 --- a/NOTICE +++ b/NOTICE @@ -2,28 +2,29 @@ License ProGuard is free. You can use it freely for processing your applications, commercial or not. Your code obviously remains yours -after having been processed, and its license can remain the same. - -ProGuard itself is copyrighted, but its distribution license provides -you with some rights for modifying and redistributing its code and its -documentation. More specifically, ProGuard is distributed under the -terms of the GNU General Public License (GPL), version 2, as published -by the Free Software Foundation (FSF). In short, this means that you -may freely redistribute the program, modified or as is, on the -condition that you make the complete source code available as well. If -you develop a program that is linked with ProGuard, the program as a -whole has to be distributed at no charge under the GPL. I am granting -a special exception to the latter clause (in wording suggested by the -FSF), for combinations with the following stand-alone applications: -Apache Ant, Apache Maven, the Eclipse ProGuardDT GUI, the EclipseME -JME IDE, the Sun NetBeans Java IDE, the Sun JME Wireless Toolkit, and -the Javaground Tools. - -The ProGuard user documentation represents an important part of this -work. It may only be redistributed without changes, along with the -unmodified version of the code. - -Copyright © 2002-2009 Eric Lafortune. +after having been processed, and its license can remain unchanged. + +The ProGuard code itself is copyrighted, but its distribution license +provides you with some rights for modifying and redistributing its +code and its documentation. More specifically, ProGuard is distributed +under the terms of the GNU General Public License (GPL), version 2, as +published by the Free Software Foundation (FSF). In short, this means +that you may freely redistribute the program, modified or as is, on +the condition that you make the complete source code available as +well. If you develop a program that is linked with ProGuard, the +program as a whole has to be distributed at no charge under the GPL. I +am granting a special exception to the latter clause (in wording +suggested by the FSF, for combinations with the following stand-alone +applications: Apache Ant, Apache Maven, the Google Android SDK, the +Eclipse ProGuardDT GUI, the EclipseME JME IDE, the Oracle NetBeans +Java IDE, the Oracle JME Wireless Toolkit, the Simple Build Tool for +Scala, and the Sanaware Tools. + +The ProGuard user documentation is copyrighted as well. It may only be +redistributed without changes, along with the unmodified version of +the code. + +Copyright © 2002-2014 Eric Lafortune @ Saikoa. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 @@ -365,3 +366,37 @@ proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. + +Special Exception to the GNU General Public License + +Copyright © 2002-2014 Eric Lafortune + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +In addition, as a special exception, Eric Lafortune gives permission to link +the code of this program with the following stand-alone applications: +- Apache Ant, +- Apache Maven, +- the Google Android SDK, +- the Eclipse ProGuardDT GUI, +- the EclipseME JME IDE, +- the Oracle NetBeans Java IDE, +- the Oracle JME Wireless Toolkit, +- the Simple Build Tool for Scala (and its scripts), and +- the Sanaware Tools. +and distribute linked combinations including the two. You must obey the GNU +General Public License in all respects for all of the code used other than +these programs. If you modify this file, you may extend this exception to your +version of the file, but you are not obligated to do so. If you do not wish to +do so, delete this exception statement from your version. diff --git a/README b/README index 2be6777..933f85a 100644 --- a/README +++ b/README @@ -15,7 +15,7 @@ The best place to start is docs/index.html Example -======= +------- If you want to give ProGuard a spin right away, try processing the ProGuard jar itself: @@ -30,4 +30,4 @@ Enjoy! http://proguard.sourceforge.net/ -Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu) +Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) diff --git a/bin/proguard.bat b/bin/proguard.bat index 793e719..daf2c1a 100644 --- a/bin/proguard.bat +++ b/bin/proguard.bat @@ -8,7 +8,7 @@ REM you'll have to add escaped quotes around them, e.g. REM "\"C:/My Directory/My File.txt\"" IF EXIST "%PROGUARD_HOME%" GOTO home -SET PROGUARD_HOME=.. +SET PROGUARD_HOME=%~dp0\.. :home java -jar "%PROGUARD_HOME%\lib\proguard.jar" %* diff --git a/bin/proguard.sh b/bin/proguard.sh index 3fb9444..bd7e0b6 100755 --- a/bin/proguard.sh +++ b/bin/proguard.sh @@ -7,6 +7,20 @@ # you'll have to add escaped quotes around them, e.g. # "\"/My Directory/My File.txt\"" -PROGUARD_HOME=`dirname "$0"`/.. +# Account for possibly missing/basic readlink. +# POSIX conformant (dash/ksh/zsh/bash). +PROGUARD=`readlink -f "$0" 2>/dev/null` +if test "$PROGUARD" = '' +then + PROGUARD=`readlink "$0" 2>/dev/null` + if test "$PROGUARD" = '' + then + PROGUARD="$0" + fi +fi -java -Xmx512M -jar "$PROGUARD_HOME/lib/proguard.jar" "$@" +PROGUARD_HOME=`dirname "$PROGUARD"`/.. + +# BEGIN android-changed Added -Xmx512M for Mac builds +java -Xmx512M -jar "$PROGUARD_HOME/lib/proguard.jar" "$@" +# END android-changed diff --git a/bin/proguardgui.bat b/bin/proguardgui.bat index 4575aaa..c328f5b 100644 --- a/bin/proguardgui.bat +++ b/bin/proguardgui.bat @@ -8,7 +8,7 @@ REM you'll have to add escaped quotes around them, e.g. REM "\"C:/My Directory/My File.txt\"" IF EXIST "%PROGUARD_HOME%" GOTO home -SET PROGUARD_HOME=.. +SET PROGUARD_HOME=%~dp0\.. :home java -jar "%PROGUARD_HOME%\lib\proguardgui.jar" %* diff --git a/bin/proguardgui.sh b/bin/proguardgui.sh index 2544f29..aba7f62 100755 --- a/bin/proguardgui.sh +++ b/bin/proguardgui.sh @@ -7,7 +7,19 @@ # you'll have to add escaped quotes around them, e.g. # "\"/My Directory/My File.txt\"" -PROGUARD_HOME=`dirname "$0"`/.. +# Account for possibly missing/basic readlink. +# POSIX conformant (dash/ksh/zsh/bash). +PROGUARD=`readlink -f "$0" 2>/dev/null` +if test "$PROGUARD" = '' +then + PROGUARD=`readlink "$0" 2>/dev/null` + if test "$PROGUARD" = '' + then + PROGUARD="$0" + fi +fi + +PROGUARD_HOME=`dirname "$PROGUARD"`/.. # On Linux, Java 1.6.0_24 and higher hang when starting the GUI: # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7027598 diff --git a/bin/retrace.bat b/bin/retrace.bat index 7201fb6..ae16dde 100644 --- a/bin/retrace.bat +++ b/bin/retrace.bat @@ -8,7 +8,7 @@ REM you'll have to add escaped quotes around them, e.g. REM "\"C:/My Directory/My File.txt\"" IF EXIST "%PROGUARD_HOME%" GOTO home -SET PROGUARD_HOME=.. +SET PROGUARD_HOME=%~dp0\.. :home java -jar "%PROGUARD_HOME%\lib\retrace.jar" %* diff --git a/bin/retrace.sh b/bin/retrace.sh index 83a4d5e..2f274de 100755 --- a/bin/retrace.sh +++ b/bin/retrace.sh @@ -7,6 +7,18 @@ # you'll have to add escaped quotes around them, e.g. # "\"/My Directory/My File.txt\"" -PROGUARD_HOME=`dirname "$0"`/.. +# Account for possibly missing/basic readlink. +# POSIX conformant (dash/ksh/zsh/bash). +PROGUARD=`readlink -f "$0" 2>/dev/null` +if test "$PROGUARD" = '' +then + PROGUARD=`readlink "$0" 2>/dev/null` + if test "$PROGUARD" = '' + then + PROGUARD="$0" + fi +fi + +PROGUARD_HOME=`dirname "$PROGUARD"`/.. java -jar "$PROGUARD_HOME/lib/retrace.jar" "$@" diff --git a/build/README b/build/README index 36a235b..89d3904 100644 --- a/build/README +++ b/build/README @@ -37,4 +37,4 @@ Enjoy! http://proguard.sourceforge.net/ -Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu) +Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) diff --git a/build/build.sh b/build/build.sh index adb2ee7..ad51c04 100755 --- a/build/build.sh +++ b/build/build.sh @@ -30,10 +30,11 @@ WTK_PLUGIN=proguard/wtk/ProGuardObfuscator ANT_JAR=$ANT_HOME/lib/ant.jar GRADLE_PATH=\ -$GRADLE_HOME/lib/plugins/gradle-plugins-1.3.jar:\ -$GRADLE_HOME/lib/gradle-base-services-1.3.jar:\ -$GRADLE_HOME/lib/gradle-core-1.3.jar:\ -$GRADLE_HOME/lib/groovy-all-1.8.6.jar +$GRADLE_HOME/lib/plugins/gradle-plugins-2.1.jar:\ +$GRADLE_HOME/lib/gradle-base-services-2.1.jar:\ +$GRADLE_HOME/lib/gradle-base-services-groovy-2.1.jar:\ +$GRADLE_HOME/lib/gradle-core-2.1.jar:\ +$GRADLE_HOME/lib/groovy-all-2.3.6.jar WTK_JAR=$WTK_HOME/wtklib/kenv.zip PROGUARD_JAR=$LIB/proguard.jar diff --git a/build/build.xml b/build/build.xml index 7c67c68..0dc4bf4 100644 --- a/build/build.xml +++ b/build/build.xml @@ -9,10 +9,11 @@ - - - - + + + + + @@ -128,6 +129,7 @@ + @@ -145,6 +147,7 @@ + diff --git a/build/makefile b/build/makefile index 264a2ac..d5b1d7f 100644 --- a/build/makefile +++ b/build/makefile @@ -10,10 +10,11 @@ CLASSES = $(PROGUARD_HOME)/classes LIB = $(PROGUARD_HOME)/lib ANT_JAR = $(ANT_HOME)/lib/ant.jar -GRADLE_JARS = $(GRADLE_HOME)/lib/plugins/gradle-plugins-1.3.jar \ - $(GRADLE_HOME)/lib/gradle-base-services-1.3.jar \ - $(GRADLE_HOME)/lib/gradle-core-1.3.jar \ - $(GRADLE_HOME)/lib/groovy-all-1.8.6.jar +GRADLE_JARS = $(GRADLE_HOME)/lib/plugins/gradle-plugins-2.1.jar \ + $(GRADLE_HOME)/lib/gradle-base-services-2.1.jar \ + $(GRADLE_HOME)/lib/gradle-base-services-groovy-2.1.jar \ + $(GRADLE_HOME)/lib/gradle-core-2.1.jar \ + $(GRADLE_HOME)/lib/groovy-all-2.3.6.jar WTK_JAR = $(WTK_HOME)/wtklib/kenv.zip NOTHING:= diff --git a/build/maven/ant/pom.xml b/build/maven/ant/pom.xml index ab3bc52..5ef9bfa 100644 --- a/build/maven/ant/pom.xml +++ b/build/maven/ant/pom.xml @@ -7,7 +7,7 @@ net.sf.proguard proguard-parent - 4.10 + 5.1 ../pom.xml proguard-anttask diff --git a/build/maven/base/pom.xml b/build/maven/base/pom.xml index e61471d..4a04b78 100644 --- a/build/maven/base/pom.xml +++ b/build/maven/base/pom.xml @@ -7,7 +7,7 @@ net.sf.proguard proguard-parent - 4.10 + 5.1 ../pom.xml proguard-base diff --git a/build/maven/gradle/pom.xml b/build/maven/gradle/pom.xml index 86fa2fc..c43e2b6 100644 --- a/build/maven/gradle/pom.xml +++ b/build/maven/gradle/pom.xml @@ -7,7 +7,7 @@ net.sf.proguard proguard-parent - 4.10 + 5.1 ../pom.xml proguard-gradle @@ -60,19 +60,25 @@ org.gradle gradle-core - 1.3 + 2.1 provided org.gradle gradle-base-services - 1.3 + 2.1 + provided + + + org.gradle + gradle-base-services-groovy + 2.1 provided org.codehaus.groovy groovy-all - 2.0.6 + 2.3.6 provided diff --git a/build/maven/gui/pom.xml b/build/maven/gui/pom.xml index 94d0100..f6add25 100644 --- a/build/maven/gui/pom.xml +++ b/build/maven/gui/pom.xml @@ -7,7 +7,7 @@ net.sf.proguard proguard-parent - 4.10 + 5.1 ../pom.xml proguard-gui diff --git a/build/maven/pom.xml b/build/maven/pom.xml index 8f894ce..08073af 100644 --- a/build/maven/pom.xml +++ b/build/maven/pom.xml @@ -7,7 +7,7 @@ net.sf.proguard proguard-parent - 4.10 + 5.1 pom [${project.groupId}] ${project.artifactId} ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. diff --git a/build/maven/retrace/pom.xml b/build/maven/retrace/pom.xml index 382f9ee..e0994d4 100644 --- a/build/maven/retrace/pom.xml +++ b/build/maven/retrace/pom.xml @@ -7,7 +7,7 @@ net.sf.proguard proguard-parent - 4.10 + 5.1 ../pom.xml proguard-retrace diff --git a/build/maven/wtk/pom.xml b/build/maven/wtk/pom.xml index fe00533..4c6db2b 100644 --- a/build/maven/wtk/pom.xml +++ b/build/maven/wtk/pom.xml @@ -7,7 +7,7 @@ net.sf.proguard proguard-parent - 4.10 + 5.1 ../pom.xml proguard-wtk-plugin diff --git a/docs/FAQ.html b/docs/FAQ.html index 7727289..62ebf7b 100644 --- a/docs/FAQ.html +++ b/docs/FAQ.html @@ -5,19 +5,21 @@ ProGuard FAQ + + + - - +

Frequently Asked Questions

@@ -31,8 +33,7 @@ else { support?
  • Can I use ProGuard to process my commercial application?
  • -
  • Does ProGuard work with Java 2? Java 5? Java - 6? Java 7?
  • +
  • Does ProGuard work with Java 2, 5, ..., 8?
  • Does ProGuard work with Java Micro Edition?
  • Does ProGuard work for Google Android code?
  • @@ -137,14 +138,14 @@ Yes, you can. ProGuard itself is distributed under the GPL, but this doesn't affect the programs that you process. Your code remains yours, and its license can remain the same. -

    Does ProGuard work with Java 2? Java 5? Java 6? Java 7?

    +

    Does ProGuard work with Java 2, 5, ..., 8?

    -Yes, ProGuard supports all JDKs from 1.1 up to and including 7.0. Java 2 -introduced some small differences in the class file format. Java 5 added +Yes, ProGuard supports all JDKs from 1.1 up to and including 8.0. Java +2 introduced some small differences in the class file format. Java 5 added attributes for generics and for annotations. Java 6 introduced optional preverification attributes. Java 7 made preverification obligatory and -introduced support for dynamic languages. ProGuard handles all versions -correctly. +introduced support for dynamic languages. Java 8 added more attributes and +default methods. ProGuard handles all versions correctly.

    Does ProGuard work with Java Micro Edition?

    @@ -270,12 +271,15 @@ out. If line numbers have been obfuscated away, a list of alternative method names is presented for each obfuscated method name that has an ambiguous reverse mapping. Please refer to the ProGuard User Manual for more details. +

    +Erik André at Badoo has written a +tool to de-obfuscate HPROF memory dumps.


    -
    -Copyright © 2002-2013 -Eric Lafortune. +Copyright © 2002-2014 +Eric Lafortune @ Saikoa.
    diff --git a/docs/GPL_exception.html b/docs/GPL_exception.html index d610af8..8cbe0cd 100644 --- a/docs/GPL_exception.html +++ b/docs/GPL_exception.html @@ -7,7 +7,7 @@

    Special Exception to the GNU General Public License

    -Copyright © 2002-2013 Eric Lafortune +Copyright © 2002-2014 Eric Lafortune

    @@ -40,11 +40,8 @@ the code of this program with the following stand-alone applications:

  • the EclipseME JME IDE,
  • the Oracle NetBeans Java IDE,
  • the Oracle JME Wireless Toolkit,
  • -
  • the Intel TXE SDK,
  • -
  • the Simple Build Tool for Scala (and its scripts),
  • -
  • the NeoMAD Tools by Neomades,
  • -
  • the Javaground Tools, and
  • -
  • the Sanaware Tools,
  • +
  • the Simple Build Tool for Scala (and its scripts), and
  • +
  • the Sanaware Tools.
  • and distribute linked combinations including the two. You must obey the GNU General Public License in all respects for all of the code used other than diff --git a/docs/acknowledgements.html b/docs/acknowledgements.html index 14fdc74..9f7d3b8 100644 --- a/docs/acknowledgements.html +++ b/docs/acknowledgements.html @@ -5,19 +5,21 @@ ProGuard Acknowledgements + + + - - +

    Acknowledgements

    @@ -49,7 +51,7 @@ Filipsky, Charles Smith, Gerrit Telkamp, Noel Grandin, Torbjörn Söderstedt, Clemens Eisserer, Clark Bassett, Eduard Welch, Dawid Weiss, Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta, Steven Adams, Xavier Kral, Stefan Martin, Toby Reyelts, Bernhard Eder, Manfred Moser, Marco Blümel, -David Reiss, +David Reiss, Roy Williams, and many more. Thanks! Your feedback has been invaluable.

    @@ -59,6 +61,10 @@ ProGuard's sibling for Android, DexGuard.

    +British Sky +has kindly sponsored the optimization of enum types. +

    + SourceForge is providing the resources for hosting this project and many other projects. @@ -72,16 +78,11 @@ target="other">Maven Central repository are hosting the Maven artifacts. The code and these web pages were written using Oracle/Sun's JDKs, Linux, IntelliJ IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that continue to make programming interesting. -

    - -And finally, I'm a great fan of Sanaware's Java Docking Library.


    -
    -Copyright © 2002-2013 -Eric Lafortune. +Copyright © 2002-2014 +Eric Lafortune @ Saikoa.
    diff --git a/docs/alternatives.html b/docs/alternatives.html index 7aeffad..f4f78b6 100644 --- a/docs/alternatives.html +++ b/docs/alternatives.html @@ -5,19 +5,21 @@ ProGuard Alternatives + + + - - +

    Alternatives

    @@ -184,16 +186,6 @@ below is incorrect. Free (LGPL) - -Konstantin Knizhnik -JavaGO -
    -x -
    -
    -Free - - Sable JBCO @@ -314,16 +306,6 @@ below is incorrect. Commercial - -LeeSoftware -Smokescreen Obfuscator -x -
    -x -
    -Commercial - - Innaworks mBooster @@ -376,7 +358,7 @@ below is incorrect. BIS Guard & Co. -Java Antidecompiler +Java Antidecompiler

    x @@ -426,7 +408,7 @@ below is incorrect. Arxan -GuardIT +GuardIT

    x @@ -504,6 +486,16 @@ below is incorrect. (disappeared?) + +Konstantin Knizhnik +JavaGO +
    +x +
    +
    +()disappeared? + + Haruaki Tamada DonQuixote @@ -684,6 +676,16 @@ below is incorrect. Commercial (disappeared?) + +LeeSoftware +Smokescreen Obfuscator +x +
    +x +
    +Commercial (disappeared?) + + JProof JProof @@ -749,10 +751,9 @@ below is incorrect. All trademarks are property of their respective holders.
    -
    -Copyright © 2002-2013 -Eric Lafortune. +Copyright © 2002-2014 +Eric Lafortune @ Saikoa.
    diff --git a/docs/downloads.html b/docs/downloads.html index 2baa929..37e865a 100644 --- a/docs/downloads.html +++ b/docs/downloads.html @@ -6,19 +6,21 @@ ProGuard Downloads + + + - - +

    Downloads

    @@ -72,6 +74,58 @@ target="other">proguard-wtk-plugin, and proguard-retrace. +

    Oct 2014
    Version 5.1

    +
      +
    • Fixed processing of various kinds of closures in Java 8. +
    • Fixed shrinking of generic signatures in classes and methods. +
    • Fixed shrinking of debug information about generic local variable types. +
    • Fixed optimization of default implementations in interfaces. +
    • Fixed optimization of variable initializations. +
    • Fixed obfuscation of internal class names in strings. +
    • Updated documentation and examples. +
    + +

    Aug 2014
    Version 5.0

    +
      +
    • Added support for Java 8. +
    • Added -keep modifier includedescriptorclasses. +
    • Added automatic suggestions for keeping attributes. +
    • Clearing preverification information when -dontpreverify is + specified. +
    • Extended optimization support for conservative optimization with java + system property optimize.conservatively. +
    • Fixed occasional preverification problem. +
    • Fixed shrinking of generic class signatures. +
    • Fixed shrinking of generic variable signatures. +
    • Fixed analysis of unused parameters for bootstrap methods in library + classes. +
    • Fixed inlining problem of non-returning subroutines. +
    • Fixed possible IllegalArgumentException and ArrayIndexOutOfBoundsException + in enum simplification. +
    • Fixed unnecessary notes about dynamic class instantiations with constant + class names. +
    • Fixed preverification of unnecessary casts of null values. +
    • Fixed lazy resolution of output jars in Gradle task. +
    • Fixed processing of synthetic code with alternative initializer invocations. +
    • Improved handling of symbolic links in shell scripts. +
    • Improved default path in Windows bat files. +
    • Updated documentation and examples. +
    + +

    Dec 2013
    Version 4.11

    +
      +
    • Added simplification of basic enum types. +
    • Added reading and writing of apk and aar archives. +
    • Fixed criteria for class merging. +
    • Fixed simplification of variable initializations. +
    • Fixed simplification of redundant boolean variables. +
    • Fixed optimization of unused stack entries in exception handlers. +
    • Fixed correction of access flags after class merging, method inlining, and + class repackaging. +
    • Refined criterion for method inlining. +
    • Updated documentation and examples. +
    +

    Jul 2013
    Version 4.10

    • Made Gradle task resolve files lazily. @@ -691,10 +745,9 @@ Upgrade considerations:

    -
    -Copyright © 2002-2013 -Eric Lafortune. +Copyright © 2002-2014 +Eric Lafortune @ Saikoa.
    diff --git a/docs/feedback.html b/docs/feedback.html index dd9c509..8a2fad4 100644 --- a/docs/feedback.html +++ b/docs/feedback.html @@ -6,19 +6,21 @@ ProGuard Feedback + + + - - +

    Feedback

    @@ -77,8 +79,8 @@ document.write("users.sourceforge.net\">"); document.write("lafortune"); document.write("@"); document.write("users.sourceforge.net"); -document.write(""); -document.write(" or at "); +document.write("<\/a>"); +document.write(" or<\/em> at "); document.write(""); document.write("eric"); document.write("@"); document.write("graphics.cornell.edu"); -document.write(""); +document.write("<\/a>"); //-->