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/02/29 15:25:03 UTC
svn commit: r632326 [1/2] - in
/harmony/enhanced/classlib/trunk/modules/pack200/src:
main/java/org/apache/harmony/pack200/
main/java/org/apache/harmony/pack200/bytecode/
main/java/org/apache/harmony/pack200/bytecode/forms/
test/java/org/apache/harmony/...
Author: sjanuary
Date: Fri Feb 29 06:24:57 2008
New Revision: 632326
URL: http://svn.apache.org/viewvc?rev=632326&view=rev
Log:
Changes how constants are created in pack200 to avoid duplicates
Modified:
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/NewAttributeBands.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentConstantPool.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationDefaultAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationsAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/Attribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/BCIRenumberedAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPClass.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPDouble.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPField.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFieldRef.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFloat.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInteger.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInterfaceMethodRef.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPLong.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMember.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethod.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethodRef.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPNameAndType.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPRef.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPString.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPUTF8.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CodeAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ConstantValueAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/EnclosingMethodAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ExceptionsAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/InnerClassesAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LineNumberTableAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTableAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTypeTableAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/NewAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SignatureAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SourceFileAttribute.java
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/forms/StringRefForm.java
harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/bytecode/ClassFileEntryTest.java
harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/bytecode/ConstantPoolTest.java
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java Fri Feb 29 06:24:57 2008
@@ -497,7 +497,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPInteger(new Integer(reference[index]));
+ result[i1] = segment.getCpBands().cpIntegerValue(new Integer(reference[index]));
}
return result;
}
@@ -511,7 +511,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPDouble(new Double(reference[index]));
+ result[i1] = segment.getCpBands().cpDoubleValue(new Double(reference[index]));
}
return result;
}
@@ -525,7 +525,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPFloat(new Float(reference[index]));
+ result[i1] = segment.getCpBands().cpFloatValue(new Float(reference[index]));
}
return result;
}
@@ -539,7 +539,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPLong(new Long(reference[index]));
+ result[i1] = segment.getCpBands().cpLongValue(new Long(reference[index]));
}
return result;
}
@@ -553,7 +553,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPUTF8(reference[index], ClassConstantPool.DOMAIN_UNDEFINED);
+ result[i1] = segment.getCpBands().cpUTF8Value(reference[index], ClassConstantPool.DOMAIN_NORMALASCIIZ);
}
return result;
}
@@ -574,7 +574,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result1[i1] = new CPUTF8(reference[index], ClassConstantPool.DOMAIN_UNDEFINED);
+ result1[i1] = segment.getCpBands().cpUTF8Value(reference[index], ClassConstantPool.DOMAIN_NORMALASCIIZ);
}
CPUTF8[] refs = result1;
int pos = 0;
@@ -596,58 +596,69 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPString(reference[index]);
+ result[i1] = segment.getCpBands().cpStringValue(reference[index]);
}
return result;
}
public CPInterfaceMethodRef[] parseCPInterfaceMethodRefReferences(String name, InputStream in, BHSDCodec codec, int count) throws IOException, Pack200Exception {
- String[] reference = segment.getCpBands().getCpIMethodClass();
- String[] descriptors = segment.getCpBands().getCpIMethodDescriptor();
+ CpBands cpBands = segment.getCpBands();
+ String[] reference = cpBands.getCpIMethodClass();
+ String[] descriptors = cpBands.getCpIMethodDescriptor();
int[] indices = decodeBandInt(name, in, codec, count, reference.length - 1);
CPInterfaceMethodRef[] result = new CPInterfaceMethodRef[indices.length];
for (int i1 = 0; i1 < count; i1++) {
int index = indices[i1];
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
- "Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPInterfaceMethodRef(reference[index], descriptors[index]);
+ "Something has gone wrong during parsing references, index = "
+ + index + ", array size = " + reference.length);
+ result[i1] = new CPInterfaceMethodRef(cpBands
+ .cpClassValue(reference[index]), cpBands
+ .cpNameAndTypeValue(descriptors[index]));
}
return result;
}
public CPMethodRef[] parseCPMethodRefReferences(String name, InputStream in, BHSDCodec codec, int count) throws IOException, Pack200Exception {
- String[] reference = segment.getCpBands().getCpMethodClass();
- String[] descriptors = segment.getCpBands().getCpMethodDescriptor();
+ CpBands cpBands = segment.getCpBands();
+ String[] reference = cpBands.getCpMethodClass();
+ String[] descriptors = cpBands.getCpMethodDescriptor();
int[] indices = decodeBandInt(name, in, codec, count, reference.length - 1);
CPMethodRef[] result = new CPMethodRef[indices.length];
for (int i1 = 0; i1 < count; i1++) {
int index = indices[i1];
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
- "Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPMethodRef(reference[index], descriptors[index]);
+ "Something has gone wrong during parsing references, index = "
+ + index + ", array size = " + reference.length);
+ result[i1] = new CPMethodRef(cpBands.cpClassValue(reference[index]),
+ cpBands.cpNameAndTypeValue(descriptors[index]));
}
return result;
}
public CPFieldRef[] parseCPFieldRefReferences(String name, InputStream in, BHSDCodec codec, int count) throws IOException, Pack200Exception {
- String[] reference = segment.getCpBands().getCpFieldClass();
- String[] descriptors = segment.getCpBands().getCpFieldDescriptor();
+ CpBands cpBands = segment.getCpBands();
+ String[] reference = cpBands.getCpFieldClass();
+ String[] descriptors = cpBands.getCpFieldDescriptor();
int[] indices = decodeBandInt(name, in, codec, count, reference.length - 1);
CPFieldRef[] result = new CPFieldRef[indices.length];
for (int i1 = 0; i1 < count; i1++) {
int index = indices[i1];
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
- "Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPFieldRef(reference[index], descriptors[index]);
+ "Something has gone wrong during parsing references, index = "
+ + index + ", array size = " + reference.length);
+ result[i1] = new CPFieldRef(cpBands.cpClassValue(reference[index]),
+ cpBands.cpNameAndTypeValue(descriptors[index]));
}
return result;
}
public CPNameAndType[] parseCPDescriptorReferences(String name, InputStream in, BHSDCodec codec, int count) throws IOException, Pack200Exception {
- String[] reference = segment.getCpBands().getCpDescriptor();
+ CpBands cpBands = segment.getCpBands();
+ String[] reference = cpBands.getCpDescriptor();
int[] indices = decodeBandInt(name, in, codec, count, reference.length - 1);
CPNameAndType[] result = new CPNameAndType[indices.length];
for (int i1 = 0; i1 < count; i1++) {
@@ -655,7 +666,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPNameAndType(reference[index]);
+ result[i1] = cpBands.cpNameAndTypeValue(reference[index]);
}
return result;
}
@@ -669,7 +680,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPUTF8(reference[index], ClassConstantPool.DOMAIN_UNDEFINED);
+ result[i1] = segment.getCpBands().cpUTF8Value(reference[index], ClassConstantPool.DOMAIN_SIGNATUREASCIIZ);
}
return result;
}
@@ -683,7 +694,7 @@
if (index < 0 || index >= reference.length)
throw new Pack200Exception(
"Something has gone wrong during parsing references, index = " + index + ", array size = " + reference.length);
- result[i1] = new CPClass(reference[index]);
+ result[i1] = segment.getCpBands().cpClassValue(reference[index]);
}
return result;
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java Fri Feb 29 06:24:57 2008
@@ -386,7 +386,7 @@
if(handlerCount != null) {
for (int j = 0; j < handlerCount[i]; j++) {
String handlerClass = handlerClassTypes[i][j];
- CPClass cpHandlerClass = new CPClass(handlerClass);
+ CPClass cpHandlerClass = segment.getCpBands().cpClassValue(handlerClass);
ExceptionTableEntry entry = new ExceptionTableEntry(
handlerStartPCs[i][j], handlerEndPCs[i][j],
handlerCatchPCs[i][j], cpHandlerClass);
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java Fri Feb 29 06:24:57 2008
@@ -24,9 +24,15 @@
import org.apache.harmony.pack200.bytecode.Attribute;
import org.apache.harmony.pack200.bytecode.CPClass;
+import org.apache.harmony.pack200.bytecode.CPDouble;
+import org.apache.harmony.pack200.bytecode.CPFloat;
+import org.apache.harmony.pack200.bytecode.CPInteger;
+import org.apache.harmony.pack200.bytecode.CPLong;
import org.apache.harmony.pack200.bytecode.CPNameAndType;
+import org.apache.harmony.pack200.bytecode.CPString;
import org.apache.harmony.pack200.bytecode.CPUTF8;
import org.apache.harmony.pack200.bytecode.ClassConstantPool;
+import org.apache.harmony.pack200.bytecode.ClassFileEntry;
import org.apache.harmony.pack200.bytecode.ConstantValueAttribute;
import org.apache.harmony.pack200.bytecode.EnclosingMethodAttribute;
import org.apache.harmony.pack200.bytecode.ExceptionsAttribute;
@@ -228,8 +234,8 @@
type = "I";
Object value = constantValueLayout.getValue(result, type,
cpBands.getConstantPool());
- fieldAttributes[i][j]
- .add(new ConstantValueAttribute(value));
+ fieldAttributes[i][j].add(new ConstantValueAttribute(
+ getClassFileEntry(value)));
constantValueIndex++;
}
if (signatureLayout.matches(flag)) {
@@ -238,7 +244,7 @@
String desc = fieldDescr[i][j];
int colon = desc.indexOf(':');
String type = desc.substring(colon + 1);
- CPUTF8 value = new CPUTF8((String) signatureLayout.getValue(result, type,
+ CPUTF8 value = cpBands.cpUTF8Value((String) signatureLayout.getValue(result, type,
cpBands.getConstantPool()), ClassConstantPool.DOMAIN_SIGNATUREASCIIZ);
fieldAttributes[i][j]
.add(new SignatureAttribute(value));
@@ -256,6 +262,24 @@
}
}
+ private ClassFileEntry getClassFileEntry(Object value) {
+ ClassFileEntry entry = null;
+ if (value instanceof ClassFileEntry) {
+ entry = (ClassFileEntry)value;
+ } else if (value instanceof java.lang.Integer) {
+ entry = cpBands.cpIntegerValue((Integer) value);
+ } else if (value instanceof java.lang.Long) {
+ entry = cpBands.cpLongValue((Long) value);
+ } else if (value instanceof java.lang.Float) {
+ entry = cpBands.cpFloatValue((Float) value);
+ } else if (value instanceof java.lang.Double) {
+ entry = cpBands.cpDoubleValue((Double) value);
+ } else if (value instanceof java.lang.String) {
+ entry = cpBands.cpStringValue((String) value);
+ }
+ return entry;
+ }
+
private void parseMethodBands(InputStream in) throws IOException,
Pack200Exception {
methodDescr = parseReferences("method_descr", in, Codec.MDELTA5,
@@ -344,7 +368,7 @@
String[] exceptions = methodExceptionsRS[methodExceptionsIndex];
CPClass[] exceptionClasses = new CPClass[n];
for (int k = 0; k < n; k++) {
- exceptionClasses[k] = new CPClass(exceptions[k]);
+ exceptionClasses[k] = cpBands.cpClassValue(exceptions[k]);
}
methodAttributes[i][j].add(new ExceptionsAttribute(
exceptionClasses));
@@ -362,8 +386,8 @@
type = "I";
Object value = methodSignatureLayout.getValue(result, type, cpBands
.getConstantPool());
- methodAttributes[i][j]
- .add(new ConstantValueAttribute(value));
+ methodAttributes[i][j].add(new ConstantValueAttribute(
+ getClassFileEntry(value)));
methodSignatureIndex++;
}
// Non-predefined attributes
@@ -561,12 +585,12 @@
// Add .java to the end
value = className + ".java";
}
- classAttributes[i].add(new SourceFileAttribute(value));
+ classAttributes[i].add(new SourceFileAttribute(cpBands.cpUTF8Value(value, ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ)));
sourceFileIndex++;
}
if (enclosingMethodLayout.matches(flag)) {
- CPClass theClass = new CPClass(enclosingMethodRC[enclosingMethodIndex]);
- CPNameAndType theMethod = new CPNameAndType(enclosingMethodRDN[enclosingMethodIndex]);
+ CPClass theClass = cpBands.cpClassValue(enclosingMethodRC[enclosingMethodIndex]);
+ CPNameAndType theMethod = cpBands.cpNameAndTypeValue(enclosingMethodRDN[enclosingMethodIndex]);
classAttributes[i].add(new EnclosingMethodAttribute(theClass, theMethod));
enclosingMethodIndex++;
}
@@ -574,7 +598,8 @@
long result = classSignature[signatureIndex];
Object value = signatureLayout.getValue(result, cpBands
.getConstantPool());
- classAttributes[i].add(new ConstantValueAttribute(value));
+ classAttributes[i].add(new ConstantValueAttribute(
+ getClassFileEntry(value)));
signatureIndex++;
}
if (innerClassLayout.matches(flag)) {
@@ -887,7 +912,7 @@
for (int i = 0; i < strings.length; i++) {
cpUTF8s[i] = new CPUTF8[strings[i].length];
for (int j = 0; j < strings[i].length; j++) {
- cpUTF8s[i][j] = new CPUTF8(strings[i][j], ClassConstantPool.DOMAIN_NORMALASCIIZ);
+ cpUTF8s[i][j] = cpBands.cpUTF8Value(strings[i][j], ClassConstantPool.DOMAIN_NORMALASCIIZ);
}
}
return cpUTF8s;
@@ -898,7 +923,7 @@
private CPUTF8[] stringsToCPUTF8(String[] strings) {
CPUTF8[] cpUTF8s = new CPUTF8[strings.length];
for (int i = 0; i < strings.length; i++) {
- cpUTF8s[i] = new CPUTF8(strings[i], ClassConstantPool.DOMAIN_UNDEFINED);
+ cpUTF8s[i] = cpBands.cpUTF8Value(strings[i], ClassConstantPool.DOMAIN_NORMALASCIIZ);
}
return cpUTF8s;
}
@@ -950,7 +975,7 @@
int[] backwardsCallCounts, String contextName) throws IOException, Pack200Exception {
MetadataBandGroup[] mbg = new MetadataBandGroup[RxA.length];
for (int i = 0; i < RxA.length; i++) {
- mbg[i] = new MetadataBandGroup(RxA[i]);
+ mbg[i] = new MetadataBandGroup(RxA[i], cpBands);
String rxa = RxA[i];
if (rxa.indexOf("P") >= 0) {
mbg[i].param_NB = decodeBandInt(contextName + "_" + rxa
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java Fri Feb 29 06:24:57 2008
@@ -19,6 +19,17 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.apache.harmony.pack200.bytecode.CPClass;
+import org.apache.harmony.pack200.bytecode.CPDouble;
+import org.apache.harmony.pack200.bytecode.CPFloat;
+import org.apache.harmony.pack200.bytecode.CPInteger;
+import org.apache.harmony.pack200.bytecode.CPLong;
+import org.apache.harmony.pack200.bytecode.CPNameAndType;
+import org.apache.harmony.pack200.bytecode.CPString;
+import org.apache.harmony.pack200.bytecode.CPUTF8;
+import org.apache.harmony.pack200.bytecode.ClassConstantPool;
public class CpBands extends BandSet {
@@ -26,39 +37,33 @@
return pool;
}
-
private final SegmentConstantPool pool = new SegmentConstantPool(this);
private String[] cpClass;
-
private String[] cpDescriptor;
-
private double[] cpDouble;
-
private String[] cpFieldClass;
-
private String[] cpFieldDescriptor;
-
private float[] cpFloat;
-
private String[] cpIMethodClass;
-
private String[] cpIMethodDescriptor;
-
private int[] cpInt;
-
private long[] cpLong;
-
private String[] cpMethodClass;
-
private String[] cpMethodDescriptor;
-
private String[] cpSignature;
-
private String[] cpString;
-
private String[] cpUTF8;
+ private HashMap[] stringsToCPUTF8 = new HashMap[ClassConstantPool.NUM_DOMAINS];
+ private HashMap stringsToCPStrings = new HashMap();
+ private HashMap longsToCPLongs = new HashMap();
+ private HashMap integersToCPIntegers = new HashMap();
+ private HashMap floatsToCPFloats = new HashMap();
+ private HashMap stringsToCPClass = new HashMap();
+ private HashMap doublesToCPDoubles = new HashMap();
+ private HashMap descriptorsToCPNameAndTypes = new HashMap();
+
public CpBands(Segment segment) {
super(segment);
@@ -419,4 +424,107 @@
return cpUTF8;
}
-}
+ public CPUTF8 cpUTF8Value(String string, int domain) {
+ if(stringsToCPUTF8[domain] == null) {
+ stringsToCPUTF8[domain] = new HashMap();
+ }
+ CPUTF8 cputf8 = (CPUTF8) stringsToCPUTF8[domain].get(string);
+ if(cputf8 == null) {
+ cputf8 = new CPUTF8(string, domain);
+ stringsToCPUTF8[domain].put(string, cputf8);
+ }
+ return cputf8;
+ }
+
+ public CPString cpStringValue(String string) {
+ CPString cpString = (CPString) stringsToCPStrings.get(string);
+ if(cpString == null) {
+ cpString = new CPString(cpUTF8Value(string, ClassConstantPool.DOMAIN_NORMALASCIIZ));
+ stringsToCPStrings.put(string, cpString);
+ }
+ return cpString;
+ }
+
+ public CPLong cpLongValue(Long l) {
+ CPLong cpLong = (CPLong) longsToCPLongs.get(l);
+ if(cpLong == null) {
+ cpLong = new CPLong(l);
+ longsToCPLongs.put(l, cpLong);
+ }
+ return cpLong;
+ }
+
+ public CPInteger cpIntegerValue(Integer i) {
+ CPInteger cpInteger = (CPInteger) integersToCPIntegers.get(i);
+ if(cpInteger == null) {
+ cpInteger = new CPInteger(i);
+ integersToCPIntegers.put(i, cpInteger);
+ }
+ return cpInteger;
+ }
+
+ public CPFloat cpFloatValue(Float f) {
+ CPFloat cpFloat = (CPFloat) floatsToCPFloats.get(f);
+ if(cpFloat == null) {
+ cpFloat = new CPFloat(f);
+ floatsToCPFloats.put(f, cpFloat);
+ }
+ return cpFloat;
+ }
+
+ public CPClass cpClassValue(String string) {
+ CPClass cpString = (CPClass) stringsToCPClass.get(string);
+ if(cpString == null) {
+ cpString = new CPClass(cpUTF8Value(string, ClassConstantPool.DOMAIN_NORMALASCIIZ));
+ stringsToCPClass.put(string, cpString);
+ }
+ return cpString;
+ }
+
+ public CPDouble cpDoubleValue(Double dbl) {
+ CPDouble cpDouble = (CPDouble) doublesToCPDoubles.get(dbl);
+ if(cpDouble == null) {
+ cpDouble = new CPDouble(dbl);
+ doublesToCPDoubles.put(dbl, cpDouble);
+ }
+ return cpDouble;
+ }
+
+ public CPNameAndType cpNameAndTypeValue(String descriptor) {
+ CPNameAndType cpNameAndType = (CPNameAndType) descriptorsToCPNameAndTypes.get(descriptor);
+ if(cpNameAndType == null) {
+ int descriptorDomain = ClassConstantPool.DOMAIN_UNDEFINED;
+ int colon = descriptor.indexOf(':');
+ String nameString = descriptor.substring(0,colon);
+ String descriptorString = descriptor.substring(colon+1);
+ // For some reason, descriptors which have just plain
+ // native types are stored in DOMAIN_NORMALASCIIZ rather
+ // than in DOMAIN_SIGNATUREASCIIZ. This might indicate
+ // that DOMAIN_SIGNATUREASCIIZ is poorly named.
+ boolean nativeDescriptor = true;
+ for(int index=0; index < descriptorString.length(); index++) {
+ char currentChar = descriptorString.charAt(index);
+ if(Character.isLetter(currentChar)) {
+ if(currentChar == 'L') {
+ nativeDescriptor = false;
+ }
+ break;
+ }
+ }
+ int domain = ClassConstantPool.DOMAIN_NAMEANDTYPE;
+ CPUTF8 name = cpUTF8Value(nameString, ClassConstantPool.DOMAIN_NORMALASCIIZ);
+ 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, descriptorDomain);
+ cpNameAndType = new CPNameAndType(name, descriptorU, domain);
+ descriptorsToCPNameAndTypes.put(descriptor, cpNameAndType);
+ }
+ return cpNameAndType;
+ }
+
+}
\ No newline at end of file
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java Fri Feb 29 06:24:57 2008
@@ -29,6 +29,7 @@
import org.apache.harmony.pack200.bytecode.CPLong;
import org.apache.harmony.pack200.bytecode.CPNameAndType;
import org.apache.harmony.pack200.bytecode.CPUTF8;
+import org.apache.harmony.pack200.bytecode.ClassConstantPool;
import org.apache.harmony.pack200.bytecode.RuntimeVisibleorInvisibleAnnotationsAttribute;
import org.apache.harmony.pack200.bytecode.RuntimeVisibleorInvisibleParameterAnnotationsAttribute;
import org.apache.harmony.pack200.bytecode.AnnotationsAttribute.Annotation;
@@ -41,9 +42,11 @@
public class MetadataBandGroup {
private String type;
+ private CpBands cpBands;
- public MetadataBandGroup(String type) {
+ public MetadataBandGroup(String type, CpBands cpBands) {
this.type = type;
+ this.cpBands = cpBands;
}
private List attributes;
@@ -148,9 +151,10 @@
annotations[i] = getAnnotation(types[i], pairCounts[i], namesIterator);
}
return new RuntimeVisibleorInvisibleAnnotationsAttribute(type
- .equals("RVA") ? "RuntimeVisibleAnnotations"
- : "RuntimeInvisibleAnnotations",
- annotations);
+ .equals("RVA") ? cpBands.cpUTF8Value("RuntimeVisibleAnnotations",
+ ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ) : cpBands.cpUTF8Value(
+ "RuntimeInvisibleAnnotations",
+ ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ), annotations);
}
private Attribute getParameterAttribute(int numParameters, Iterator namesIterator ) {
@@ -165,8 +169,11 @@
parameter_annotations[i] = new ParameterAnnotation(annotations);
}
return new RuntimeVisibleorInvisibleParameterAnnotationsAttribute(type
- .equals("RVA") ? "RuntimeVisibleParameterAnnotations"
- : "RuntimeInvisibleParameterAnnotations",
+ .equals("RVA") ? cpBands.cpUTF8Value(
+ "RuntimeVisibleParameterAnnotations",
+ ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ) : cpBands.cpUTF8Value(
+ "RuntimeInvisibleParameterAnnotations",
+ ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ),
parameter_annotations);
}
@@ -201,7 +208,7 @@
case 'e':
// TODO: check this - it may not work if the first string already has a colon in it
String enumString = caseet_Iterator.next() + ":" + caseec_Iterator.next();
- return new CPNameAndType(enumString);
+ return cpBands.cpNameAndTypeValue(enumString);
case 's':
return cases_Iterator.next();
case '[':
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/NewAttributeBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/NewAttributeBands.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/NewAttributeBands.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/NewAttributeBands.java Fri Feb 29 06:24:57 2008
@@ -35,6 +35,7 @@
import org.apache.harmony.pack200.bytecode.CPNameAndType;
import org.apache.harmony.pack200.bytecode.CPString;
import org.apache.harmony.pack200.bytecode.CPUTF8;
+import org.apache.harmony.pack200.bytecode.ClassConstantPool;
import org.apache.harmony.pack200.bytecode.NewAttribute;
/**
@@ -102,7 +103,9 @@
* @return
*/
private Attribute getOneAttribute(int index, List elements) {
- NewAttribute attribute = new NewAttribute(attributeLayout.getName());
+ NewAttribute attribute = new NewAttribute(segment.getCpBands()
+ .cpUTF8Value(attributeLayout.getName(),
+ ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ));
for (Iterator iter = elements.iterator(); iter.hasNext();) {
AttributeLayoutElement element = (AttributeLayoutElement) iter.next();
element.addToAttribute(index, attribute);
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java Fri Feb 29 06:24:57 2008
@@ -140,31 +140,40 @@
fileName = fullName.substring(i) + ".java";
}
classFile.attributes = new Attribute[] { (Attribute) cp
- .add(new SourceFileAttribute(fileName)) };
+ .add(new SourceFileAttribute(cpBands.cpUTF8Value(fileName, ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ))) };
} else {
classFile.attributes = new Attribute[] {};
}
// this/superclass
- ClassFileEntry cfThis = cp.add(new CPClass(fullName));
- ClassFileEntry cfSuper = cp.add(new CPClass(classBands.getClassSuper()[classNum]));
+ ClassFileEntry cfThis = cp.add(cpBands.cpClassValue(fullName));
+ ClassFileEntry cfSuper = cp.add(cpBands.cpClassValue(classBands.getClassSuper()[classNum]));
// add interfaces
ClassFileEntry cfInterfaces[] = new ClassFileEntry[classBands.getClassInterfaces()[classNum].length];
for (i = 0; i < cfInterfaces.length; i++) {
- cfInterfaces[i] = cp.add(new CPClass(classBands.getClassInterfaces()[classNum][i]));
+ cfInterfaces[i] = cp.add(cpBands.cpClassValue(classBands.getClassInterfaces()[classNum][i]));
}
// add fields
ClassFileEntry cfFields[] = new ClassFileEntry[classBands.getClassFieldCount()[classNum]];
// fieldDescr and fieldFlags used to create this
for (i = 0; i < cfFields.length; i++) {
- cfFields[i] = cp.add(new CPField(classBands.getFieldDescr()[classNum][i],
+ String descriptorStr = classBands.getFieldDescr()[classNum][i];
+ int colon = descriptorStr.indexOf(':');
+ CPUTF8 name = cpBands.cpUTF8Value(descriptorStr.substring(0,colon), ClassConstantPool.DOMAIN_NORMALASCIIZ);
+ CPUTF8 descriptor = cpBands.cpUTF8Value(descriptorStr.substring(colon+1), ClassConstantPool.DOMAIN_SIGNATUREASCIIZ);
+ cfFields[i] = cp.add(new CPField(name, descriptor,
classBands.getFieldFlags()[classNum][i], classBands.getFieldAttributes()[classNum][i]));
}
// add methods
ClassFileEntry cfMethods[] = new ClassFileEntry[classBands.getClassMethodCount()[classNum]];
// fieldDescr and fieldFlags used to create this
for (i = 0; i < cfMethods.length; i++) {
- cfMethods[i] = cp.add(new CPMethod(classBands.getMethodDescr()[classNum][i],
- classBands.getMethodFlags()[classNum][i], classBands.getMethodAttributes()[classNum][i]));
+ String descriptorStr = classBands.getMethodDescr()[classNum][i];
+ int colon = descriptorStr.indexOf(':');
+ CPUTF8 name = cpBands.cpUTF8Value(descriptorStr.substring(0,colon), ClassConstantPool.DOMAIN_NORMALASCIIZ);
+ CPUTF8 descriptor = cpBands.cpUTF8Value(descriptorStr.substring(colon+1), ClassConstantPool.DOMAIN_SIGNATUREASCIIZ);
+ cfMethods[i] = cp.add(new CPMethod(name, descriptor, classBands
+ .getMethodFlags()[classNum][i], classBands
+ .getMethodAttributes()[classNum][i]));
}
// add inner class attribute (if required)
@@ -187,14 +196,14 @@
CPClass outerClass = null;
if(ic_stored[index].isAnonymous()) {
- innerClass = new CPClass(innerClassString);
+ innerClass = cpBands.cpClassValue(innerClassString);
} else {
- innerClass = new CPClass(innerClassString);
- innerName = new CPUTF8(simpleClassName, ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ);
+ innerClass = cpBands.cpClassValue(innerClassString);
+ innerName = cpBands.cpUTF8Value(simpleClassName, ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ);
}
if(ic_stored[index].isMember()) {
- outerClass = new CPClass(outerClassString);
+ outerClass = cpBands.cpClassValue(outerClassString);
}
int flags = ic_stored[index].F;
@@ -429,7 +438,6 @@
}
}
dos.flush();
- out.finish();
out.flush();
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentConstantPool.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentConstantPool.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentConstantPool.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentConstantPool.java Fri Feb 29 06:24:57 2008
@@ -18,16 +18,9 @@
import java.util.ArrayList;
-import org.apache.harmony.pack200.bytecode.CPClass;
-import org.apache.harmony.pack200.bytecode.CPDouble;
import org.apache.harmony.pack200.bytecode.CPFieldRef;
-import org.apache.harmony.pack200.bytecode.CPFloat;
-import org.apache.harmony.pack200.bytecode.CPInteger;
import org.apache.harmony.pack200.bytecode.CPInterfaceMethodRef;
-import org.apache.harmony.pack200.bytecode.CPLong;
import org.apache.harmony.pack200.bytecode.CPMethodRef;
-import org.apache.harmony.pack200.bytecode.CPString;
-import org.apache.harmony.pack200.bytecode.CPUTF8;
import org.apache.harmony.pack200.bytecode.ClassConstantPool;
import org.apache.harmony.pack200.bytecode.ConstantPoolEntry;
@@ -60,6 +53,7 @@
public static final int CP_METHOD = 11;
public static final int CP_IMETHOD = 12;
+ // TODO: All CP***??
public Object getValue(int cp, long value) throws Pack200Exception {
int index = (int) value;
if (index == -1) {
@@ -77,7 +71,7 @@
} else if (cp == CP_DOUBLE) {
return new Double(bands.getCpDouble()[index]);
} else if (cp == CP_STRING) {
- return bands.getCpString()[index];
+ return bands.cpStringValue(bands.getCpString()[index]);
} else if (cp == CP_CLASS) {
return bands.getCpClass()[index];
} else if (cp == SIGNATURE) {
@@ -231,19 +225,19 @@
} else if (index < 0) {
throw new Pack200Exception("Cannot have a negative range");
} else if (cp == UTF_8) {
- return new CPUTF8(bands.getCpUTF8()[index], ClassConstantPool.DOMAIN_NORMALASCIIZ);
+ return bands.cpUTF8Value(bands.getCpUTF8()[index], ClassConstantPool.DOMAIN_NORMALASCIIZ);
} else if (cp == CP_INT) {
- return new CPInteger(new Integer(bands.getCpInt()[index]));
+ return bands.cpIntegerValue(new Integer(bands.getCpInt()[index]));
} else if (cp == CP_FLOAT) {
- return new CPFloat(new Float(bands.getCpFloat()[index]));
+ return bands.cpFloatValue(new Float(bands.getCpFloat()[index]));
} else if (cp == CP_LONG) {
- return new CPLong(new Long(bands.getCpLong()[index]));
+ return bands.cpLongValue(new Long(bands.getCpLong()[index]));
} else if (cp == CP_DOUBLE) {
- return new CPDouble(new Double(bands.getCpDouble()[index]));
+ return bands.cpDoubleValue(new Double(bands.getCpDouble()[index]));
} else if (cp == CP_STRING) {
- return new CPString(bands.getCpString()[index]);
+ return bands.cpStringValue(bands.getCpString()[index]);
} else if (cp == CP_CLASS) {
- return new CPClass(bands.getCpClass()[index]);
+ return bands.cpClassValue(bands.getCpClass()[index]);
} else if (cp == SIGNATURE) {
throw new Error("I don't know what to do with signatures yet");
// return null /* new CPSignature(bands.getCpSignature()[index]) */;
@@ -251,11 +245,17 @@
throw new Error("I don't know what to do with descriptors yet");
// return null /* new CPDescriptor(bands.getCpDescriptor()[index]) */;
} else if (cp == CP_FIELD) {
- return new CPFieldRef(bands.getCpFieldClass()[index], bands.getCpFieldDescriptor()[index]);
+ return new CPFieldRef(bands
+ .cpClassValue(bands.getCpFieldClass()[index]), bands
+ .cpNameAndTypeValue(bands.getCpFieldDescriptor()[index]));
} else if (cp == CP_METHOD) {
- return new CPMethodRef(bands.getCpMethodClass()[index], bands.getCpMethodDescriptor()[index]);
+ return new CPMethodRef(bands
+ .cpClassValue(bands.getCpMethodClass()[index]), bands
+ .cpNameAndTypeValue(bands.getCpMethodDescriptor()[index]));
} else if (cp == CP_IMETHOD) {
- return new CPInterfaceMethodRef(bands.getCpIMethodClass()[index], bands.getCpIMethodDescriptor()[index]);
+ return new CPInterfaceMethodRef(bands.cpClassValue(bands
+ .getCpIMethodClass()[index]), bands.cpNameAndTypeValue(bands
+ .getCpIMethodDescriptor()[index]));
} else {
// etc
throw new Error("Get value incomplete");
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationDefaultAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationDefaultAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationDefaultAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationDefaultAttribute.java Fri Feb 29 06:24:57 2008
@@ -26,8 +26,10 @@
private ElementValue element_value;
+ private static final CPUTF8 attributeName = new CPUTF8("AnnotationDefault", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ);
+
public AnnotationDefaultAttribute(ElementValue element_value) {
- super("AnnotationDefault");
+ super(attributeName);
this.element_value = element_value;
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationsAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationsAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationsAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/AnnotationsAttribute.java Fri Feb 29 06:24:57 2008
@@ -154,7 +154,7 @@
}
}
- public AnnotationsAttribute(String attributeName) {
+ public AnnotationsAttribute(CPUTF8 attributeName) {
super(attributeName);
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/Attribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/Attribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/Attribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/Attribute.java Fri Feb 29 06:24:57 2008
@@ -24,8 +24,8 @@
private int attributeNameIndex;
- public Attribute(String attributeName) {
- this.attributeName = new CPUTF8(attributeName, ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ);
+ public Attribute(CPUTF8 attributeName) {
+ this.attributeName = attributeName;
}
protected void doWrite(DataOutputStream dos) throws IOException {
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/BCIRenumberedAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/BCIRenumberedAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/BCIRenumberedAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/BCIRenumberedAttribute.java Fri Feb 29 06:24:57 2008
@@ -31,7 +31,7 @@
return true;
}
- public BCIRenumberedAttribute(String attributeName) {
+ public BCIRenumberedAttribute(CPUTF8 attributeName) {
super(attributeName);
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPClass.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPClass.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPClass.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPClass.java Fri Feb 29 06:24:57 2008
@@ -26,16 +26,15 @@
public String name;
private CPUTF8 utf8;
-
- public CPClass(String name) {
+
+ public CPClass(CPUTF8 name) {
super(ConstantPoolEntry.CP_Class);
- this.name = name;
+ this.name = name.underlyingString();
this.domain = ClassConstantPool.DOMAIN_CLASSREF;
- this.utf8 = new CPUTF8(name, ClassConstantPool.DOMAIN_NORMALASCIIZ);
+ this.utf8 = name;
}
-
- public boolean equals(Object obj) {
+ public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPDouble.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPDouble.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPDouble.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPDouble.java Fri Feb 29 06:24:57 2008
@@ -20,16 +20,15 @@
import java.io.IOException;
public class CPDouble extends CPConstantNumber {
- public CPDouble(java.lang.Double value) {
+
+ public CPDouble(Double value) {
super(ConstantPoolEntry.CP_Double,value);
this.domain = ClassConstantPool.DOMAIN_DOUBLE;
}
-
- protected void writeBody(DataOutputStream dos) throws IOException {
+ protected void writeBody(DataOutputStream dos) throws IOException {
dos.writeDouble(getNumber().doubleValue());
}
-
public String toString() {
return "Double: " + getValue();
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPField.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPField.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPField.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPField.java Fri Feb 29 06:24:57 2008
@@ -20,8 +20,8 @@
public class CPField extends CPMember {
- public CPField(String descriptor, long flags, List attributes) {
- super(descriptor, flags, attributes);
+ public CPField(CPUTF8 name, CPUTF8 descriptor, long flags, List attributes) {
+ super(name, descriptor, flags, attributes);
}
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFieldRef.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFieldRef.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFieldRef.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFieldRef.java Fri Feb 29 06:24:57 2008
@@ -19,30 +19,24 @@
import java.io.DataOutputStream;
import java.io.IOException;
-
public class CPFieldRef extends ConstantPoolEntry {
CPClass className;
transient int classNameIndex;
-
-
private CPNameAndType nameAndType;
transient int nameAndTypeIndex;
- public CPFieldRef(String className, String descriptor) {
+
+ public CPFieldRef(CPClass className, CPNameAndType descriptor) {
super(ConstantPoolEntry.CP_Fieldref);
this.domain = ClassConstantPool.DOMAIN_FIELD;
- this.className = new CPClass(className);
- this.nameAndType = new CPNameAndType(descriptor);
+ this.className = className;
+ this.nameAndType = descriptor;
}
-
-
protected ClassFileEntry[] getNestedClassFileEntries() {
return new ClassFileEntry[] {className, nameAndType};
}
-
-
protected void resolve(ClassConstantPool pool) {
super.resolve(pool);
nameAndTypeIndex = pool.indexOf(nameAndType);
@@ -54,7 +48,6 @@
dos.writeShort(nameAndTypeIndex);
}
-
public String toString() {
return "FieldRef: " + className + "#" + nameAndType;
}
@@ -71,8 +64,6 @@
return result;
}
-
-
public boolean equals(Object obj) {
if (this == obj)
return true;
@@ -94,4 +85,4 @@
return true;
}
-}
+}
\ No newline at end of file
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFloat.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFloat.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFloat.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPFloat.java Fri Feb 29 06:24:57 2008
@@ -21,12 +21,12 @@
public class CPFloat extends CPConstantNumber {
- public CPFloat(java.lang.Float value) {
+ public CPFloat(Float value) {
super(ConstantPoolEntry.CP_Float,value);
this.domain = ClassConstantPool.DOMAIN_FLOAT;
}
- protected void writeBody(DataOutputStream dos) throws IOException {
+ protected void writeBody(DataOutputStream dos) throws IOException {
dos.writeFloat(getNumber().floatValue());
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInteger.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInteger.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInteger.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInteger.java Fri Feb 29 06:24:57 2008
@@ -21,13 +21,12 @@
public class CPInteger extends CPConstantNumber {
- public CPInteger(java.lang.Integer value) {
+ public CPInteger(Integer value) {
super(ConstantPoolEntry.CP_Integer,value);
this.domain = ClassConstantPool.DOMAIN_INTEGER;
}
-
- protected void writeBody(DataOutputStream dos) throws IOException {
+ protected void writeBody(DataOutputStream dos) throws IOException {
dos.writeInt(getNumber().intValue());
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInterfaceMethodRef.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInterfaceMethodRef.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInterfaceMethodRef.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPInterfaceMethodRef.java Fri Feb 29 06:24:57 2008
@@ -18,7 +18,7 @@
public class CPInterfaceMethodRef extends CPRef {
- public CPInterfaceMethodRef(String className, String descriptor) {
+ public CPInterfaceMethodRef(CPClass className, CPNameAndType descriptor) {
super(ConstantPoolEntry.CP_InterfaceMethodref, className, descriptor);
this.domain = ClassConstantPool.DOMAIN_METHOD;
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPLong.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPLong.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPLong.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPLong.java Fri Feb 29 06:24:57 2008
@@ -21,13 +21,12 @@
public class CPLong extends CPConstantNumber {
- public CPLong(java.lang.Long value) {
+ public CPLong(Long value) {
super(ConstantPoolEntry.CP_Long,value);
this.domain = ClassConstantPool.DOMAIN_LONG;
}
-
- protected void writeBody(DataOutputStream dos) throws IOException {
+ protected void writeBody(DataOutputStream dos) throws IOException {
dos.writeLong(getNumber().longValue());
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMember.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMember.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMember.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMember.java Fri Feb 29 06:24:57 2008
@@ -22,30 +22,22 @@
import java.util.Iterator;
import java.util.List;
-
public class CPMember extends ClassFileEntry {
List attributes;
-
-
short flags;
-
CPUTF8 name;
transient int nameIndex;
-
-
private CPUTF8 descriptor;
transient int descriptorIndex;
- public CPMember(String descriptor, long flags, List attributes) {
- int colon = descriptor.indexOf(':');
- this.name = new CPUTF8(descriptor.substring(0,colon), ClassConstantPool.DOMAIN_NORMALASCIIZ);
- this.descriptor = new CPUTF8(descriptor.substring(colon+1), ClassConstantPool.DOMAIN_SIGNATUREASCIIZ);
- this.flags = (short) flags;
+
+ public CPMember(CPUTF8 name, CPUTF8 descriptor, long flags, List attributes) {
+ this.name = name;
+ this.descriptor = descriptor;
+ this.flags = (short) flags;
this.attributes = (attributes == null ? new ArrayList() : attributes);
}
-
-
protected ClassFileEntry[] getNestedClassFileEntries() {
int attributeCount = attributes.size();
ClassFileEntry[] entries = new ClassFileEntry[attributeCount+2];
@@ -57,8 +49,6 @@
return entries;
}
-
-
protected void resolve(ClassConstantPool pool) {
super.resolve(pool);
nameIndex = pool.indexOf(name);
@@ -69,12 +59,10 @@
}
}
-
public String toString() {
return "Field: " + name + "(" + descriptor + ")";
}
-
public int hashCode() {
final int PRIME = 31;
int result = 1;
@@ -85,8 +73,6 @@
return result;
}
-
-
public boolean equals(Object obj) {
if (this == obj)
return true;
@@ -115,8 +101,6 @@
return true;
}
-
-
protected void doWrite(DataOutputStream dos) throws IOException {
dos.writeShort(flags);
dos.writeShort(nameIndex);
@@ -127,7 +111,6 @@
Attribute attribute = (Attribute) attributes.get(i);
attribute.doWrite(dos);
}
-
}
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethod.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethod.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethod.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethod.java Fri Feb 29 06:24:57 2008
@@ -20,9 +20,9 @@
public class CPMethod extends CPMember {
- public CPMethod(String descriptor, long flags, List attributes) {
+ public CPMethod(CPUTF8 name, CPUTF8 descriptor, long flags, List attributes) {
// TODO Check that we only pass these on, or remap
- super(descriptor, 0x7FFF & flags, attributes);
+ super(name, descriptor, 0x7FFF & flags, attributes);
}
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethodRef.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethodRef.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethodRef.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPMethodRef.java Fri Feb 29 06:24:57 2008
@@ -18,10 +18,8 @@
public class CPMethodRef extends CPRef {
- public CPMethodRef(String className, String descriptor) {
+ public CPMethodRef(CPClass className, CPNameAndType descriptor) {
super(ConstantPoolEntry.CP_Methodref, className, descriptor);
- this.className = new CPClass(className);
- this.nameAndType = new CPNameAndType(descriptor);
this.domain = ClassConstantPool.DOMAIN_METHOD;
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPNameAndType.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPNameAndType.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPNameAndType.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPNameAndType.java Fri Feb 29 06:24:57 2008
@@ -21,7 +21,6 @@
import org.apache.harmony.pack200.SegmentUtils;
-
public class CPNameAndType extends ConstantPoolEntry {
CPUTF8 descriptor;
@@ -32,42 +31,16 @@
transient int nameIndex;
- public CPNameAndType(String descriptor) {
+ public CPNameAndType(CPUTF8 name, CPUTF8 descriptor, int domain) {
super(ConstantPoolEntry.CP_NameAndType);
- int descriptorDomain = ClassConstantPool.DOMAIN_UNDEFINED;
- int colon = descriptor.indexOf(':');
- String nameString = descriptor.substring(0,colon);
- String descriptorString = descriptor.substring(colon+1);
- // For some reason, descriptors which have just plain
- // native types are stored in DOMAIN_NORMALASCIIZ rather
- // than in DOMAIN_SIGNATUREASCIIZ. This might indicate
- // that DOMAIN_SIGNATUREASCIIZ is poorly named.
- boolean nativeDescriptor = true;
- for(int index=0; index < descriptorString.length(); index++) {
- char currentChar = descriptorString.charAt(index);
- if(Character.isLetter(currentChar)) {
- if(currentChar == 'L') {
- nativeDescriptor = false;
- }
- break;
- }
- }
- this.domain = ClassConstantPool.DOMAIN_NAMEANDTYPE;
- this.name = new CPUTF8(nameString, ClassConstantPool.DOMAIN_NORMALASCIIZ);
- if( nativeDescriptor ) {
- // Native signatures are stored in DOMAIN_NORMALASCIIZ, not
- // DOMAIN_SIGNATUREASCIIZ for some reason.
- descriptorDomain = ClassConstantPool.DOMAIN_NORMALASCIIZ;
- } else {
- descriptorDomain = ClassConstantPool.DOMAIN_SIGNATUREASCIIZ;
- }
- this.descriptor = new CPUTF8(descriptorString, descriptorDomain);
+ this.name = name;
+ this.descriptor = descriptor;
+ this.domain = domain;
}
protected ClassFileEntry[] getNestedClassFileEntries() {
return new ClassFileEntry[] { name, descriptor };
}
-
protected void resolve(ClassConstantPool pool) {
super.resolve(pool);
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPRef.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPRef.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPRef.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPRef.java Fri Feb 29 06:24:57 2008
@@ -27,10 +27,10 @@
protected CPNameAndType nameAndType;
transient int nameAndTypeIndex;
- public CPRef(byte type, String className, String descriptor) {
+ public CPRef(byte type, CPClass className, CPNameAndType descriptor) {
super(type);
- this.className = new CPClass(className);
- this.nameAndType = new CPNameAndType(descriptor);
+ this.className = className;
+ this.nameAndType = descriptor;
}
public boolean equals(Object obj) {
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPString.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPString.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPString.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPString.java Fri Feb 29 06:24:57 2008
@@ -20,18 +20,17 @@
import java.io.IOException;
public class CPString extends CPConstant {
- private transient int nameIndex;
+
+ private transient int nameIndex;
private CPUTF8 name;
- public CPString(java.lang.String value) {
- super(ConstantPoolEntry.CP_String,value);
+ public CPString(CPUTF8 value) {
+ super(ConstantPoolEntry.CP_String, value);
this.domain = ClassConstantPool.DOMAIN_STRING;
- this.name = new CPUTF8((String) getValue(), ClassConstantPool.DOMAIN_NORMALASCIIZ);
-
+ this.name = value;
}
-
- protected void writeBody(DataOutputStream dos) throws IOException {
+ protected void writeBody(DataOutputStream dos) throws IOException {
dos.writeShort(nameIndex);
}
@@ -55,6 +54,6 @@
}
public String comparisonString() {
- return (String)getValue();
+ return ((CPUTF8)getValue()).underlyingString();
}
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPUTF8.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPUTF8.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPUTF8.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CPUTF8.java Fri Feb 29 06:24:57 2008
@@ -21,12 +21,16 @@
import java.io.UnsupportedEncodingException;
public class CPUTF8 extends ConstantPoolEntry {
- private String utf8;
- public CPUTF8(String utf8, int domain) {
+ private String utf8;
+
+ public CPUTF8(String utf8, int domain) {
super(ConstantPoolEntry.CP_UTF8);
this.utf8 = utf8;
this.domain = domain;
+ if(domain == ClassConstantPool.DOMAIN_UNDEFINED) {
+ throw new RuntimeException();
+ }
}
public boolean equals(Object obj) {
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CodeAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CodeAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CodeAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/CodeAttribute.java Fri Feb 29 06:24:57 2008
@@ -33,10 +33,11 @@
public List exceptionTable; // of ExceptionTableEntry
public int maxLocals;
public int maxStack;
+ private static final CPUTF8 attributeName = new CPUTF8("Code", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ);
public CodeAttribute(int maxStack, int maxLocals, byte codePacked[],
Segment segment, OperandManager operandManager, List exceptionTable) {
- super("Code"); //$NON-NLS-1$
+ super(attributeName); //$NON-NLS-1$
this.maxLocals = maxLocals;
this.maxStack = maxStack;
this.codeLength = 0;
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ConstantValueAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ConstantValueAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ConstantValueAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ConstantValueAttribute.java Fri Feb 29 06:24:57 2008
@@ -24,23 +24,16 @@
private ClassFileEntry entry;
- public ConstantValueAttribute(Object value) {
- super("ConstantValue"); //$NON-NLS-1$
- if (value instanceof java.lang.Integer) {
- this.entry = new CPInteger((Integer) value);
- } else if (value instanceof java.lang.Long) {
- this.entry = new CPLong((Long) value);
- } else if (value instanceof java.lang.Float) {
- this.entry = new CPFloat((Float) value);
- } else if (value instanceof java.lang.Double) {
- this.entry = new CPDouble((Double) value);
- } else if (value instanceof java.lang.String) {
- this.entry = new CPString((String) value);
- } else {
- throw new Error("Oops, I've not done it again");
- }
- }
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "ConstantValue", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
+ public ConstantValueAttribute(ClassFileEntry entry) {
+ super(attributeName);
+ if(entry == null) {
+ throw new NullPointerException();
+ }
+ this.entry = entry;
+ }
public boolean equals(Object obj) {
if (this == obj)
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/EnclosingMethodAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/EnclosingMethodAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/EnclosingMethodAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/EnclosingMethodAttribute.java Fri Feb 29 06:24:57 2008
@@ -25,9 +25,11 @@
private int method_index;
private CPClass cpClass;
private CPNameAndType method;
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "EnclosingMethod", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
public EnclosingMethodAttribute(CPClass cpClass, CPNameAndType method) {
- super("EnclosingMethod");
+ super(attributeName);
this.cpClass = cpClass;
this.method = method;
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ExceptionsAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ExceptionsAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ExceptionsAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/ExceptionsAttribute.java Fri Feb 29 06:24:57 2008
@@ -21,6 +21,9 @@
import java.util.Arrays;
public class ExceptionsAttribute extends Attribute {
+
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "Exceptions", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
private static int hashCode(Object[] array) {
final int prime = 31;
@@ -34,17 +37,15 @@
return result;
}
-
private transient int[] exceptionIndexes;
private CPClass[] exceptions;
public ExceptionsAttribute(CPClass[] exceptions) {
- super("Exceptions"); //$NON-NLS-1$
+ super(attributeName);
this.exceptions = exceptions;
}
-
public boolean equals(Object obj) {
if (this == obj)
return true;
@@ -58,7 +59,6 @@
return true;
}
-
protected int getLength() {
return 2 + 2 * exceptions.length;
}
@@ -72,7 +72,6 @@
return result;
}
-
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
@@ -92,7 +91,6 @@
public String toString() {
return "Exceptions:" + exceptions;
}
-
protected void writeBody(DataOutputStream dos) throws IOException {
dos.writeShort(exceptionIndexes.length);
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/InnerClassesAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/InnerClassesAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/InnerClassesAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/InnerClassesAttribute.java Fri Feb 29 06:24:57 2008
@@ -26,6 +26,10 @@
public class InnerClassesAttribute extends Attribute {
+
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "InnerClasses", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
+
class InnerClassesEntry {
CPClass inner_class_info;
@@ -93,7 +97,7 @@
private List nestedClassFileEntries = new ArrayList();
public InnerClassesAttribute(String name) {
- super("InnerClasses"); //$NON-NLS-1$
+ super(attributeName);
nestedClassFileEntries.add(getAttributeName());
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LineNumberTableAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LineNumberTableAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LineNumberTableAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LineNumberTableAttribute.java Fri Feb 29 06:24:57 2008
@@ -24,9 +24,12 @@
private int line_number_table_length;
private int[] start_pcs;
private int[] line_numbers;
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "LineNumberTable", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
+
public LineNumberTableAttribute(int line_number_table_length, int[] start_pcs, int[] line_numbers) {
- super("LineNumberTable");
+ super(attributeName);
this.line_number_table_length = line_number_table_length;
this.start_pcs = start_pcs;
this.line_numbers = line_numbers;
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTableAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTableAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTableAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTableAttribute.java Fri Feb 29 06:24:57 2008
@@ -31,11 +31,14 @@
private int[] indexes;
private CPUTF8[] names;
private CPUTF8[] descriptors;
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "LocalVariableTable", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
+
public LocalVariableTableAttribute(int local_variable_table_length,
int[] start_pcs, int[] lengths, CPUTF8[] names,
CPUTF8[] descriptors, int[] indexes) {
- super("LocalVariableTable");
+ super(attributeName);
this.local_variable_table_length = local_variable_table_length;
this.start_pcs = start_pcs;
this.lengths = lengths;
@@ -59,7 +62,6 @@
}
}
-
protected ClassFileEntry[] getNestedClassFileEntries() {
ArrayList nestedEntries = new ArrayList();
nestedEntries.add(getAttributeName());
@@ -128,7 +130,9 @@
// Given the index of the start_pc, we can now add
// the encodedLength to it to get the stop index.
int stopIndex = indexOfStartPC + encodedLength;
-
+ if(stopIndex < 0) {
+ System.out.println(stopIndex);
+ }
// Length can either be an index into the byte code offsets, or one beyond the
// end of the byte code offsets. Need to determine which this is.
if(stopIndex == byteCodeOffsets.size()) {
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTypeTableAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTypeTableAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTypeTableAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/LocalVariableTypeTableAttribute.java Fri Feb 29 06:24:57 2008
@@ -30,11 +30,14 @@
private int[] indexes;
private CPUTF8[] names;
private CPUTF8[] signatures;
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "LocalVariableTypeTable", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
+
public LocalVariableTypeTableAttribute(int local_variable_type_table_length,
int[] start_pcs, int[] lengths, CPUTF8[] names,
CPUTF8[] signatures, int[] indexes) {
- super("LocalVariableTypeTable");
+ super(attributeName);
this.local_variable_type_table_length = local_variable_type_table_length;
this.start_pcs = start_pcs;
this.lengths = lengths;
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/NewAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/NewAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/NewAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/NewAttribute.java Fri Feb 29 06:24:57 2008
@@ -31,7 +31,7 @@
private List body = new ArrayList();
private ClassConstantPool pool;
- public NewAttribute(String attributeName) {
+ public NewAttribute(CPUTF8 attributeName) {
super(attributeName);
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java Fri Feb 29 06:24:57 2008
@@ -23,11 +23,9 @@
private int num_annotations;
private Annotation[] annotations;
- private String name;
- public RuntimeVisibleorInvisibleAnnotationsAttribute(String name, Annotation[] annotations) {
+ public RuntimeVisibleorInvisibleAnnotationsAttribute(CPUTF8 name, Annotation[] annotations) {
super(name);
- this.name = name;
this.num_annotations = annotations.length;
this.annotations = annotations;
}
@@ -55,7 +53,7 @@
}
public String toString() {
- return name + ": " + num_annotations + " annotations";
+ return attributeName.underlyingString() + ": " + num_annotations + " annotations";
}
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java Fri Feb 29 06:24:57 2008
@@ -23,11 +23,9 @@
private int num_parameters;
private ParameterAnnotation[] parameter_annotations;
- private String name;
- public RuntimeVisibleorInvisibleParameterAnnotationsAttribute(String name, ParameterAnnotation[] parameter_annotations) {
+ public RuntimeVisibleorInvisibleParameterAnnotationsAttribute(CPUTF8 name, ParameterAnnotation[] parameter_annotations) {
super(name);
- this.name = name;
this.num_parameters = parameter_annotations.length;
this.parameter_annotations = parameter_annotations;
}
@@ -55,7 +53,7 @@
}
public String toString() {
- return name + ": " + num_parameters + " parameter annotations";
+ return attributeName.underlyingString() + ": " + num_parameters + " parameter annotations";
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SignatureAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SignatureAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SignatureAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SignatureAttribute.java Fri Feb 29 06:24:57 2008
@@ -24,8 +24,10 @@
private int signature_index;
private CPUTF8 signature;
+ private static final CPUTF8 attributeName = new CPUTF8("Signature", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ);
+
public SignatureAttribute(CPUTF8 value) {
- super("Signature");
+ super(attributeName);
this.signature = value;
}
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SourceFileAttribute.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SourceFileAttribute.java?rev=632326&r1=632325&r2=632326&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SourceFileAttribute.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/bytecode/SourceFileAttribute.java Fri Feb 29 06:24:57 2008
@@ -19,15 +19,17 @@
import java.io.DataOutputStream;
import java.io.IOException;
-
public class SourceFileAttribute extends Attribute {
- private CPUTF8 name;
+ private CPUTF8 name;
private int nameIndex;
+ private static final CPUTF8 attributeName = new CPUTF8(
+ "SourceFile", ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ); //$NON-NLS-1$
+
- public SourceFileAttribute(String name) {
- super("SourceFile"); //$NON-NLS-1$
- this.name = new CPUTF8(name, ClassConstantPool.DOMAIN_ATTRIBUTEASCIIZ);
+ public SourceFileAttribute(CPUTF8 name) {
+ super(attributeName);
+ this.name = name;
}
public boolean equals(Object obj) {