diff options
Diffstat (limited to 'src/proguard/optimize/DuplicateInitializerFixer.java')
-rw-r--r-- | src/proguard/optimize/DuplicateInitializerFixer.java | 34 |
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)+"]"); } } } |