aboutsummaryrefslogtreecommitdiffstats
path: root/src/proguard/obfuscate/ClassObfuscator.java
diff options
context:
space:
mode:
authorBrint E. Kriebel <bekit@cyngn.com>2014-09-29 17:19:43 -0700
committerBrint E. Kriebel <bekit@cyngn.com>2014-09-29 17:19:43 -0700
commitb64a23b7cc2761f03879ceb6b030ae80171f11e2 (patch)
tree86ba49fd1b7275a7e293c3c3bc44e6317bebf67f /src/proguard/obfuscate/ClassObfuscator.java
parentfe926bab25e3af81265d4e0bbb79bcdb41b10635 (diff)
parent9961286c06c25cd03464d3e2b00bd9b9dedf96ba (diff)
downloadandroid_external_proguard-b64a23b7cc2761f03879ceb6b030ae80171f11e2.tar.gz
android_external_proguard-b64a23b7cc2761f03879ceb6b030ae80171f11e2.tar.bz2
android_external_proguard-b64a23b7cc2761f03879ceb6b030ae80171f11e2.zip
Diffstat (limited to 'src/proguard/obfuscate/ClassObfuscator.java')
-rw-r--r--src/proguard/obfuscate/ClassObfuscator.java24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/proguard/obfuscate/ClassObfuscator.java b/src/proguard/obfuscate/ClassObfuscator.java
index 9af0c82..9e1a91c 100644
--- a/src/proguard/obfuscate/ClassObfuscator.java
+++ b/src/proguard/obfuscate/ClassObfuscator.java
@@ -2,7 +2,7 @@
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
- * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)
+ * Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu)
*
* 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
@@ -164,6 +164,14 @@ implements ClassVisitor,
}
+ public void visitLibraryClass(LibraryClass libraryClass)
+ {
+ // This can happen for dubious input, if the outer class of a program
+ // class is a library class, and its name is requested.
+ newClassName = libraryClass.getName();
+ }
+
+
// Implementations for AttributeVisitor.
public void visitAnyAttribute(Clazz clazz, Attribute attribute) {}
@@ -469,13 +477,25 @@ implements ClassVisitor,
{
// Come up with class names until we get an original one.
String newClassName;
+ String newMixedCaseClassName;
do
{
// Let the factory produce a class name.
newClassName = newPackagePrefix +
classNameFactory.nextName();
+
+ newMixedCaseClassName = mixedCaseClassName(newClassName);
+ }
+ while (classNamesToAvoid.contains(newMixedCaseClassName));
+
+ // Explicitly make sure the name isn't used again if we have a
+ // user-specified dictionary and we're not allowed to have mixed case
+ // class names -- just to protect against problematic dictionaries.
+ if (this.classNameFactory != null &&
+ !useMixedCaseClassNames)
+ {
+ classNamesToAvoid.add(newMixedCaseClassName);
}
- while (classNamesToAvoid.contains(mixedCaseClassName(newClassName)));
return newClassName;
}