Index: src/main/java/org/apache/harmony/unpack200/ClassBands.java =================================================================== RCS file: /team/jcldesktop/Pack200 CVS controlled/src/main/java/org/apache/harmony/unpack200/ClassBands.java,v retrieving revision 1.3 diff -u -r1.3 ClassBands.java --- src/main/java/org/apache/harmony/unpack200/ClassBands.java 30 May 2008 18:22:21 -0000 1.3 +++ src/main/java/org/apache/harmony/unpack200/ClassBands.java 9 Jul 2008 17:05:45 -0000 @@ -850,11 +850,11 @@ CPUTF8 element = localVariableTableTypeRS[x][y]; // TODO: come up with a better test for native vs nonnative // signatures? - if (element.underlyingString().length() > 2) { - element.setDomain(ClassConstantPool.DOMAIN_SIGNATUREASCIIZ); - } else { +// if (element.underlyingString().length() > 2) { +// element.setDomain(ClassConstantPool.DOMAIN_SIGNATUREASCIIZ); +// } else { element.setDomain(ClassConstantPool.DOMAIN_NORMALASCIIZ); - } +// } } } Index: src/main/java/org/apache/harmony/unpack200/Segment.java =================================================================== RCS file: /team/jcldesktop/Pack200 CVS controlled/src/main/java/org/apache/harmony/unpack200/Segment.java,v retrieving revision 1.5 diff -u -r1.5 Segment.java --- src/main/java/org/apache/harmony/unpack200/Segment.java 1 Jul 2008 18:00:39 -0000 1.5 +++ src/main/java/org/apache/harmony/unpack200/Segment.java 9 Jul 2008 17:05:45 -0000 @@ -199,7 +199,7 @@ CPUTF8 name = cpBands.cpUTF8Value(nameIndex, ClassConstantPool.DOMAIN_NORMALASCIIZ); CPUTF8 descriptor = cpBands.cpSignatureValue(typeIndex, - ClassConstantPool.DOMAIN_SIGNATUREASCIIZ); + ClassConstantPool.DOMAIN_NORMALASCIIZ); cfFields[i] = cp.add(new CPField(name, descriptor, classBands .getFieldFlags()[classNum][i], classBands .getFieldAttributes()[classNum][i])); @@ -216,7 +216,7 @@ CPUTF8 name = cpBands.cpUTF8Value(nameIndex, ClassConstantPool.DOMAIN_NORMALASCIIZ); CPUTF8 descriptor = cpBands.cpSignatureValue(typeIndex, - ClassConstantPool.DOMAIN_SIGNATUREASCIIZ); + ClassConstantPool.DOMAIN_NORMALASCIIZ); cfMethods[i] = cp.add(new CPMethod(name, descriptor, classBands .getMethodFlags()[classNum][i], classBands .getMethodAttributes()[classNum][i])); Index: src/main/java/org/apache/harmony/unpack200/CpBands.java =================================================================== RCS file: /team/jcldesktop/Pack200 CVS controlled/src/main/java/org/apache/harmony/unpack200/CpBands.java,v retrieving revision 1.3 diff -u -r1.3 CpBands.java --- src/main/java/org/apache/harmony/unpack200/CpBands.java 1 May 2008 16:47:04 -0000 1.3 +++ src/main/java/org/apache/harmony/unpack200/CpBands.java 9 Jul 2008 17:05:45 -0000 @@ -82,6 +82,11 @@ private final HashMap doublesToCPDoubles = new HashMap(); private final HashMap descriptorsToCPNameAndTypes = new HashMap(); + private HashMap mapClass = new HashMap(); + private HashMap mapDescriptor = new HashMap(); + private HashMap mapUTF8 = new HashMap(); + private HashMap mapSignature = new HashMap(); + private int intOffset; private int floatOffset; private int longOffset; @@ -144,6 +149,7 @@ cpClass = new String[cpClassCount]; for (int i = 0; i < cpClassCount; i++) { cpClass[i] = cpUTF8[cpClassInts[i]]; + mapClass.put(cpClass[i], Integer.valueOf(i)); } } @@ -176,6 +182,7 @@ cpDescriptor = new String[cpDescriptorCount]; for (int i = 0; i < cpDescriptorCount; i++) { cpDescriptor[i] = cpDescriptorNames[i] + ":" + cpDescriptorTypes[i]; //$NON-NLS-1$ + mapDescriptor.put(cpDescriptor[i], Integer.valueOf(i)); } } @@ -356,11 +363,11 @@ } cpSignature[i] = signature.toString(); } - for (int i = 0; i < cpSignatureInts.length; i++) { - if(cpSignatureInts[i] == -1) { - cpSignatureInts[i] = search(cpUTF8, cpSignature[i]); - } - } +// for (int i = 0; i < cpSignatureInts.length; i++) { +// if(cpSignatureInts[i] == -1) { +// cpSignatureInts[i] = search(cpUTF8, cpSignature[i]); +// } +// } } /** @@ -391,6 +398,7 @@ int cpUTF8Count = header.getCpUTF8Count(); cpUTF8 = new String[cpUTF8Count]; cpUTF8[0] = ""; //$NON-NLS-1$ + mapUTF8.put("", Integer.valueOf(0)); int[] prefix = decodeBandInt("cpUTF8Prefix", in, Codec.DELTA5, cpUTF8Count - 2); int charCount = 0; @@ -439,10 +447,12 @@ // surprised if it works first time w/o errors ... cpUTF8[i] = lastString.substring(0, i > 1 ? prefix[i - 2] : 0) + new String(bigSuffixData[bigSuffixCount++]); + mapUTF8.put(cpUTF8[i], Integer.valueOf(i)); } else { cpUTF8[i] = lastString.substring(0, i > 1 ? prefix[i - 2] : 0) + new String(data, charCount, suffix[i - 1]); charCount += suffix[i - 1]; + mapUTF8.put(cpUTF8[i], Integer.valueOf(i)); } } } @@ -530,18 +540,18 @@ } CPUTF8 cputf8 = (CPUTF8) stringsToCPUTF8[domain].get(string); if (cputf8 == null) { - int index = -1; + Integer index = null; if(searchForIndex) { - index = search(cpUTF8, string); + index = (Integer)mapUTF8.get(string); } - if(index != -1) { - return cpUTF8Value(index, domain); + if(index != null) { + return cpUTF8Value(index.intValue(), domain); } if(searchForIndex) { - index = search(cpSignature, string); + index = (Integer)mapSignature.get(string); } - if(index != -1) { - return cpSignatureValue(index); + if(index != null) { + return cpSignatureValue(index.intValue()); } cputf8 = new CPUTF8(string, domain, -1); stringsToCPUTF8[domain].put(string, cputf8); @@ -608,9 +618,9 @@ public CPClass cpClassValue(String string) { CPClass cpString = (CPClass) stringsToCPClass.get(string); if (cpString == null) { - int index = search(cpClass, string); - if(index != -1) { - return cpClassValue(index); + Integer index = (Integer)mapClass.get(string); + if(index != null) { + return cpClassValue(index.intValue()); } cpString = new CPClass(cpUTF8Value(string, ClassConstantPool.DOMAIN_NORMALASCIIZ, false), -1); @@ -619,15 +629,6 @@ return cpString; } - private int search(String[] array, String string) { - for (int i = 0; i < array.length; i++) { - if(array[i].equals(string)) { - return i; - } - } - return -1; - } - public CPDouble cpDoubleValue(int index) { Double dbl = new Double(cpDouble[index]); CPDouble cpDouble = (CPDouble) doublesToCPDoubles.get(dbl); @@ -665,13 +666,13 @@ int domain = ClassConstantPool.DOMAIN_NAMEANDTYPE; CPUTF8 name = cpUTF8Value(nameIndex, ClassConstantPool.DOMAIN_NORMALASCIIZ); - if (nativeDescriptor) { - // Native signatures are stored in DOMAIN_NORMALASCIIZ, not - // DOMAIN_SIGNATUREASCIIZ for some reason. +// if (nativeDescriptor) { +// // Native signatures are stored in DOMAIN_NORMALASCIIZ, not +// // DOMAIN_SIGNATUREASCIIZ for some reason. descriptorDomain = ClassConstantPool.DOMAIN_NORMALASCIIZ; - } else { - descriptorDomain = ClassConstantPool.DOMAIN_SIGNATUREASCIIZ; - } +// } else { +// descriptorDomain = ClassConstantPool.DOMAIN_SIGNATUREASCIIZ; +// } CPUTF8 descriptorU = cpSignatureValue(descriptorIndex, descriptorDomain); cpNameAndType = new CPNameAndType(name, descriptorU, domain, index + descrOffset); descriptorsToCPNameAndTypes.put(descriptor, cpNameAndType); @@ -698,7 +699,7 @@ } public CPUTF8 cpSignatureValue(int index) { - return cpSignatureValue(index, ClassConstantPool.DOMAIN_SIGNATUREASCIIZ); + return cpSignatureValue(index, ClassConstantPool.DOMAIN_NORMALASCIIZ); } public CPUTF8 cpSignatureValue(int index, int domain) { @@ -724,9 +725,9 @@ CPNameAndType cpNameAndType = (CPNameAndType) descriptorsToCPNameAndTypes .get(descriptor); if (cpNameAndType == null) { - int index = search(cpDescriptor, descriptor); - if(index != -1) { - return cpNameAndTypeValue(index); + Integer index = (Integer)mapDescriptor.get(descriptor); + if(index != null) { + return cpNameAndTypeValue(index.intValue()); } int descriptorDomain = ClassConstantPool.DOMAIN_UNDEFINED; int colon = descriptor.indexOf(':'); @@ -749,15 +750,15 @@ int domain = ClassConstantPool.DOMAIN_NAMEANDTYPE; CPUTF8 name = cpUTF8Value(nameString, ClassConstantPool.DOMAIN_NORMALASCIIZ, true); - if (nativeDescriptor) { - // Native signatures are stored in DOMAIN_NORMALASCIIZ, not - // DOMAIN_SIGNATUREASCIIZ for some reason. +// if (nativeDescriptor) { +// // Native signatures are stored in DOMAIN_NORMALASCIIZ, not +// // DOMAIN_SIGNATUREASCIIZ for some reason. descriptorDomain = ClassConstantPool.DOMAIN_NORMALASCIIZ; - } else { - descriptorDomain = ClassConstantPool.DOMAIN_SIGNATUREASCIIZ; - } +// } else { +// descriptorDomain = ClassConstantPool.DOMAIN_SIGNATUREASCIIZ; +// } CPUTF8 descriptorU = cpUTF8Value(descriptorString, descriptorDomain, true); - cpNameAndType = new CPNameAndType(name, descriptorU, domain, index + descrOffset); + cpNameAndType = new CPNameAndType(name, descriptorU, domain, -1 + descrOffset); descriptorsToCPNameAndTypes.put(descriptor, cpNameAndType); } return cpNameAndType; Index: src/main/java/org/apache/harmony/unpack200/bytecode/ConstantPoolEntry.java =================================================================== RCS file: /team/jcldesktop/Pack200 CVS controlled/src/main/java/org/apache/harmony/unpack200/bytecode/ConstantPoolEntry.java,v retrieving revision 1.3 diff -u -r1.3 ConstantPoolEntry.java --- src/main/java/org/apache/harmony/unpack200/bytecode/ConstantPoolEntry.java 1 May 2008 16:47:04 -0000 1.3 +++ src/main/java/org/apache/harmony/unpack200/bytecode/ConstantPoolEntry.java 9 Jul 2008 17:05:45 -0000 @@ -57,7 +57,7 @@ protected int domain = ClassConstantPool.DOMAIN_UNDEFINED; - protected final int globalIndex; + protected int globalIndex; ConstantPoolEntry(byte tag, int globalIndex) { this.tag = tag; Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPUTF8.java =================================================================== RCS file: /team/jcldesktop/Pack200 CVS controlled/src/main/java/org/apache/harmony/unpack200/bytecode/CPUTF8.java,v retrieving revision 1.5 diff -u -r1.5 CPUTF8.java --- src/main/java/org/apache/harmony/unpack200/bytecode/CPUTF8.java 27 Jun 2008 00:27:56 -0000 1.5 +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPUTF8.java 9 Jul 2008 17:05:45 -0000 @@ -18,7 +18,6 @@ import java.io.DataOutputStream; import java.io.IOException; -import java.io.UnsupportedEncodingException; /** * UTF8 constant pool entry, used for storing long Strings. @@ -79,4 +78,8 @@ public String underlyingString() { return utf8; } + + public void setGlobalIndex(int index) { + globalIndex = index; + } } \ No newline at end of file