summaryrefslogtreecommitdiff
path: root/src/proguard/optimize/DuplicateInitializerFixer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/proguard/optimize/DuplicateInitializerFixer.java')
-rw-r--r--src/proguard/optimize/DuplicateInitializerFixer.java34
1 files changed, 13 insertions, 21 deletions
diff --git a/src/proguard/optimize/DuplicateInitializerFixer.java b/src/proguard/optimize/DuplicateInitializerFixer.java
index 07b7d82..746d182 100644
--- a/src/proguard/optimize/DuplicateInitializerFixer.java
+++ b/src/proguard/optimize/DuplicateInitializerFixer.java
@@ -2,7 +2,7 @@
* ProGuard -- shrinking, optimization, obfuscation, and preverification
* of Java bytecode.
*
- * Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu)
+ * Copyright (c) 2002-2009 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
@@ -86,7 +86,7 @@ implements MemberVisitor,
if (!programMethod.equals(similarMethod))
{
// Should this initializer be preserved?
- if (KeepMarker.isKept(programMethod))
+ if (!KeepMarker.isKept(programMethod))
{
// Fix the other initializer.
programMethod = (ProgramMethod)similarMethod;
@@ -95,23 +95,12 @@ implements MemberVisitor,
int index = descriptor.indexOf(ClassConstants.INTERNAL_METHOD_ARGUMENTS_CLOSE);
// Try to find a new, unique descriptor.
- int typeCounter = 0;
- while (true)
+ for (int typeIndex = 0; typeIndex < TYPES.length; typeIndex++)
{
- // Construct the new descriptor by inserting a new type
- // as an additional last argument.
- StringBuffer newDescriptorBuffer =
- new StringBuffer(descriptor.substring(0, index));
-
- for (int arrayDimension = 0; arrayDimension < typeCounter / TYPES.length; arrayDimension++)
- {
- newDescriptorBuffer.append(ClassConstants.INTERNAL_TYPE_ARRAY);
- }
-
- newDescriptorBuffer.append(TYPES[typeCounter % TYPES.length]);
- newDescriptorBuffer.append(descriptor.substring(index));
-
- String newDescriptor = newDescriptorBuffer.toString();
+ String newDescriptor =
+ descriptor.substring(0, index) +
+ TYPES[typeIndex] +
+ descriptor.substring(index);
// Is the new initializer descriptor unique?
if (programClass.findMethod(name, newDescriptor) == null)
@@ -119,7 +108,7 @@ implements MemberVisitor,
if (DEBUG)
{
System.out.println("DuplicateInitializerFixer:");
- System.out.println(" ["+programClass.getName()+"."+name+descriptor+"] ("+ClassUtil.externalClassAccessFlags(programMethod.getAccessFlags())+") -> ["+newDescriptor+"]");
+ System.out.println(" ["+programClass.getName()+"]: "+name+descriptor+" -> "+newDescriptor);
}
// Update the descriptor.
@@ -141,9 +130,12 @@ implements MemberVisitor,
// We're done with this constructor.
return;
}
-
- typeCounter++;
}
+
+ throw new IllegalStateException("Can't find unique constructor descriptor for ["+
+ programClass.getName()+"."+
+ programMethod.getName(programClass)+
+ programMethod.getDescriptor(programClass)+"]");
}
}
}