Author: kkolinko Date: Fri Sep 12 20:29:08 2014 New Revision: 1624636 URL: http://svn.apache.org/r1624636 Log: Do not create an empty arrays when Class has no interfaces. Skip creation of int[] indexes array and share the same empty String[] names array.
Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java?rev=1624636&r1=1624635&r2=1624636&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java Fri Sep 12 20:29:08 2014 @@ -209,9 +209,11 @@ public final class ClassParser { private void readInterfaces() throws IOException, ClassFormatException { int interfaces_count; interfaces_count = file.readUnsignedShort(); - interfaces = new int[interfaces_count]; - for (int i = 0; i < interfaces_count; i++) { - interfaces[i] = file.readUnsignedShort(); + if (interfaces_count > 0) { + interfaces = new int[interfaces_count]; + for (int i = 0; i < interfaces_count; i++) { + interfaces[i] = file.readUnsignedShort(); + } } } Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java?rev=1624636&r1=1624635&r2=1624636&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/JavaClass.java Fri Sep 12 20:29:08 2014 @@ -36,6 +36,7 @@ public class JavaClass extends AccessFla private String[] interface_names; private Annotations runtimeVisibleAnnotations; // "RuntimeVisibleAnnotations" attribute defined in the class + private static final String[] INTERFACES_EMPTY_ARRAY = new String[0]; /** * Constructor gets all contents as arguments. @@ -52,9 +53,6 @@ public class JavaClass extends AccessFla JavaClass(int class_name_index, int superclass_name_index, int access_flags, ConstantPool constant_pool, int[] interfaces, Annotations runtimeVisibleAnnotations) { - if (interfaces == null) { - interfaces = new int[0]; - } this.access_flags = access_flags; this.runtimeVisibleAnnotations = runtimeVisibleAnnotations; @@ -72,10 +70,15 @@ public class JavaClass extends AccessFla } else { superclass_name = "java.lang.Object"; } - interface_names = new String[interfaces.length]; - for (int i = 0; i < interfaces.length; i++) { - String str = constant_pool.getConstantString(interfaces[i], Constants.CONSTANT_Class); - interface_names[i] = Utility.compactClassName(str); + + if (interfaces == null) { + interface_names = INTERFACES_EMPTY_ARRAY; + } else { + interface_names = new String[interfaces.length]; + for (int i = 0; i < interfaces.length; i++) { + String str = constant_pool.getConstantString(interfaces[i], Constants.CONSTANT_Class); + interface_names[i] = Utility.compactClassName(str); + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org