You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sj...@apache.org on 2008/07/10 17:44:48 UTC
svn commit: r675616 -
/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java
Author: sjanuary
Date: Thu Jul 10 08:44:47 2008
New Revision: 675616
URL: http://svn.apache.org/viewvc?rev=675616&view=rev
Log:
Apply unified patch for HARMONY-5900 ([classlib][pack200] CpBands.parseCpSignature(Ljava/io/InputStream;) is hot)
Also removes some debugging code I checked in accidentally
Modified:
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java?rev=675616&r1=675615&r2=675616&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/CpBands.java Thu Jul 10 08:44:47 2008
@@ -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));
}
}
@@ -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));
}
}
}
@@ -509,9 +519,6 @@
public CPUTF8 cpUTF8Value(int index) {
String string = cpUTF8[index];
- if(string.equals("[Ljava/lang/String;")) {
- int i = 0;
- }
CPUTF8 cputf8 = (CPUTF8) stringsToCPUTF8.get(string);
if (cputf8 == null) {
cputf8 = new CPUTF8(string, index);
@@ -527,23 +534,20 @@
}
public CPUTF8 cpUTF8Value(String string, boolean searchForIndex) {
- if(string.equals("[Ljava/lang/String;")) {
- int i = 0;
- }
CPUTF8 cputf8 = (CPUTF8) stringsToCPUTF8.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);
+ if(index != null) {
+ return cpUTF8Value(index.intValue());
}
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, -1);
stringsToCPUTF8.put(string, cputf8);
@@ -608,9 +612,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, false), -1);
stringsToCPClass.put(string, cpString);
@@ -618,15 +622,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);
@@ -661,12 +656,6 @@
}
}
CPUTF8 name = cpUTF8Value(nameIndex);
-// if (nativeDescriptor) {
-// // Native signatures are stored in DOMAIN_NORMALASCIIZ, not
-// // DOMAIN_SIGNATUREASCIIZ for some reason.
-// } else {
-// descriptorDomain = ClassConstantPool.DOMAIN_SIGNATUREASCIIZ;
-// }
CPUTF8 descriptorU = cpSignatureValue(descriptorIndex);
cpNameAndType = new CPNameAndType(name, descriptorU, index + descrOffset);
descriptorsToCPNameAndTypes.put(descriptor, cpNameAndType);
@@ -700,9 +689,6 @@
globalIndex = index + signatureOffset;
}
String string = cpSignature[index];
- if(string.equals("[Ljava/lang/String;")) {
- int i = 0;
- }
CPUTF8 cpUTF8 = (CPUTF8) stringsToCPUTF8.get(string);
if(cpUTF8 == null) {
cpUTF8 = new CPUTF8(string, globalIndex);
@@ -715,9 +701,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 colon = descriptor.indexOf(':');
String nameString = descriptor.substring(0, colon);
@@ -736,18 +722,9 @@
break;
}
}
-// int domain = ClassConstantPool.DOMAIN_NAMEANDTYPE;
CPUTF8 name = cpUTF8Value(nameString, true);
-// ClassConstantPool.DOMAIN_NORMALASCIIZ, true);
-// if (nativeDescriptor) {
-// // Native signatures are stored in DOMAIN_NORMALASCIIZ, not
-// // DOMAIN_SIGNATUREASCIIZ for some reason.
-// descriptorDomain = ClassConstantPool.DOMAIN_NORMALASCIIZ;
-// } else {
-// descriptorDomain = ClassConstantPool.DOMAIN_SIGNATUREASCIIZ;
-// }
CPUTF8 descriptorU = cpUTF8Value(descriptorString, true);
- cpNameAndType = new CPNameAndType(name, descriptorU, index + descrOffset);
+ cpNameAndType = new CPNameAndType(name, descriptorU, -1 + descrOffset);
descriptorsToCPNameAndTypes.put(descriptor, cpNameAndType);
}
return cpNameAndType;