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 {
27de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro            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    /**
43de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * 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                }
79de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro                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}
95