Blort.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass Blort { 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static void arrayCopyTest(int k) { 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // A local variable assigned from an argument 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int j = k; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // These two locals are defined once and used multiple times 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String[] stringArray = new String[8]; 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object[] objectArray = new Object[8]; 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Should cause another move to be inserted 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object anotherOne = objectArray; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (anotherOne != null) { 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("foo"); 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // "i" is used in a loop 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < stringArray.length; i++) 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stringArray[i] = new String(Integer.toString(i)); 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("string -> object"); 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.arraycopy(stringArray, 0, objectArray, 0, stringArray.length); 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("object -> string"); 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.arraycopy(objectArray, 0, stringArray, 0, stringArray.length); 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("object -> string (modified)"); 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project objectArray[4] = new Object(); 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.arraycopy(objectArray, 0, stringArray, 0,stringArray.length); 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ArrayStoreException ase) { 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // "ase" is an unused local which still must be preserved 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("caught ArrayStoreException (expected)"); 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void testConstructor() { 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Blort foo = null; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project foo = new Blort(); 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ex) { 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.err.println(foo); 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Stolen from 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java/android/org/apache/http/impl/io/AbstractMessageParser.java 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Simplified. 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Checks to see that local variable assignment is preserved through 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * phi's. The key component here is the assignment of previous = current. 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void parseHeaderGroup( 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Object headGroup, 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Object inbuffer, 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int maxHeaderCount, 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int maxLineLen) 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuilder current = null; 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuilder previous = null; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (;;) { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (current == null) { 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project current = new StringBuilder(64); 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project current.length(); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int l = inbuffer.hashCode(); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (l == -1 || current.length() < 1) { 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((current.charAt(0) == ' ' || current.charAt(0) == '\t') && previous != null) { 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i = 0; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (i < current.length()) { 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char ch = current.charAt(i); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (ch != ' ' && ch != '\t') { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i++; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (maxLineLen > 0 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && previous.length() + 1 + current.length() - i > maxLineLen) { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IOException("Maximum line length limit exceeded"); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project previous.append(' '); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project previous.append(current, i, current.length() - i); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project previous = current; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project current = null; 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (maxHeaderCount > 0) { 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IOException("Maximum header count exceeded"); 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96