1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17public class Main { 18 19 private volatile Object objectField; 20 private volatile int intField; 21 private volatile float floatField; 22 private volatile long longField; 23 private volatile double doubleField; 24 private volatile byte byteField; 25 private volatile boolean booleanField; 26 private volatile char charField; 27 private volatile short shortField; 28 29 public static void $opt$setObjectField(Main m) { 30 m.objectField = null; 31 } 32 33 public static void $opt$setIntField(Main m) { 34 m.intField = 0; 35 } 36 37 public static void $opt$setFloatField(Main m) { 38 m.floatField = 0; 39 } 40 41 public static void $opt$setLongField(Main m) { 42 m.longField = 0; 43 } 44 45 public static void $opt$setDoubleField(Main m) { 46 m.doubleField = 0; 47 } 48 49 public static void $opt$setByteField(Main m) { 50 m.byteField = 0; 51 } 52 53 public static void $opt$setBooleanField(Main m) { 54 m.booleanField = false; 55 } 56 57 public static void $opt$setCharField(Main m) { 58 m.charField = 0; 59 } 60 61 public static void $opt$setShortField(Main m) { 62 m.shortField = 0; 63 } 64 65 public static Object $opt$getObjectField(Main m) { 66 return m.objectField; 67 } 68 69 public static int $opt$getIntField(Main m) { 70 return m.intField; 71 } 72 73 public static float $opt$getFloatField(Main m) { 74 return m.floatField; 75 } 76 77 public static long $opt$getLongField(Main m) { 78 return m.longField; 79 } 80 81 public static double $opt$getDoubleField(Main m) { 82 return m.doubleField; 83 } 84 85 public static byte $opt$getByteField(Main m) { 86 return m.byteField; 87 } 88 89 public static boolean $opt$getBooleanField(Main m) { 90 return m.booleanField; 91 } 92 93 public static char $opt$getCharField(Main m) { 94 return m.charField; 95 } 96 97 public static short $opt$getShortField(Main m) { 98 return m.shortField; 99 } 100 101 public static void main(String[] args) { 102 int methodLine = 30; 103 int thisLine = 103; 104 try { 105 $opt$setObjectField(null); 106 throw new RuntimeException("Failed to throw NullPointerException."); 107 } catch (NullPointerException npe) { 108 check(npe, thisLine += 2, methodLine, "$opt$setObjectField"); 109 } 110 try { 111 $opt$setIntField(null); 112 throw new RuntimeException("Failed to throw NullPointerException."); 113 } catch (NullPointerException npe) { 114 check(npe, thisLine += 6, methodLine += 4, "$opt$setIntField"); 115 } 116 try { 117 $opt$setFloatField(null); 118 throw new RuntimeException("Failed to throw NullPointerException."); 119 } catch (NullPointerException npe) { 120 check(npe, thisLine += 6, methodLine += 4, "$opt$setFloatField"); 121 } 122 try { 123 $opt$setLongField(null); 124 throw new RuntimeException("Failed to throw NullPointerException."); 125 } catch (NullPointerException npe) { 126 check(npe, thisLine += 6, methodLine += 4, "$opt$setLongField"); 127 } 128 try { 129 $opt$setDoubleField(null); 130 throw new RuntimeException("Failed to throw NullPointerException."); 131 } catch (NullPointerException npe) { 132 check(npe, thisLine += 6, methodLine += 4, "$opt$setDoubleField"); 133 } 134 try { 135 $opt$setByteField(null); 136 throw new RuntimeException("Failed to throw NullPointerException."); 137 } catch (NullPointerException npe) { 138 check(npe, thisLine += 6, methodLine += 4, "$opt$setByteField"); 139 } 140 try { 141 $opt$setBooleanField(null); 142 throw new RuntimeException("Failed to throw NullPointerException."); 143 } catch (NullPointerException npe) { 144 check(npe, thisLine += 6, methodLine += 4, "$opt$setBooleanField"); 145 } 146 try { 147 $opt$setCharField(null); 148 throw new RuntimeException("Failed to throw NullPointerException."); 149 } catch (NullPointerException npe) { 150 check(npe, thisLine += 6, methodLine += 4, "$opt$setCharField"); 151 } 152 try { 153 $opt$setShortField(null); 154 throw new RuntimeException("Failed to throw NullPointerException."); 155 } catch (NullPointerException npe) { 156 check(npe, thisLine += 6, methodLine += 4, "$opt$setShortField"); 157 } 158 try { 159 $opt$getObjectField(null); 160 throw new RuntimeException("Failed to throw NullPointerException."); 161 } catch (NullPointerException npe) { 162 check(npe, thisLine += 6, methodLine += 4, "$opt$getObjectField"); 163 } 164 try { 165 $opt$getIntField(null); 166 throw new RuntimeException("Failed to throw NullPointerException."); 167 } catch (NullPointerException npe) { 168 check(npe, thisLine += 6, methodLine += 4, "$opt$getIntField"); 169 } 170 try { 171 $opt$getFloatField(null); 172 throw new RuntimeException("Failed to throw NullPointerException."); 173 } catch (NullPointerException npe) { 174 check(npe, thisLine += 6, methodLine += 4, "$opt$getFloatField"); 175 } 176 try { 177 $opt$getLongField(null); 178 throw new RuntimeException("Failed to throw NullPointerException."); 179 } catch (NullPointerException npe) { 180 check(npe, thisLine += 6, methodLine += 4, "$opt$getLongField"); 181 } 182 try { 183 $opt$getDoubleField(null); 184 throw new RuntimeException("Failed to throw NullPointerException."); 185 } catch (NullPointerException npe) { 186 check(npe, thisLine += 6, methodLine += 4, "$opt$getDoubleField"); 187 } 188 try { 189 $opt$getByteField(null); 190 throw new RuntimeException("Failed to throw NullPointerException."); 191 } catch (NullPointerException npe) { 192 check(npe, thisLine += 6, methodLine += 4, "$opt$getByteField"); 193 } 194 try { 195 $opt$getBooleanField(null); 196 throw new RuntimeException("Failed to throw NullPointerException."); 197 } catch (NullPointerException npe) { 198 check(npe, thisLine += 6, methodLine += 4, "$opt$getBooleanField"); 199 } 200 try { 201 $opt$getCharField(null); 202 throw new RuntimeException("Failed to throw NullPointerException."); 203 } catch (NullPointerException npe) { 204 check(npe, thisLine += 6, methodLine += 4, "$opt$getCharField"); 205 } 206 try { 207 $opt$getShortField(null); 208 throw new RuntimeException("Failed to throw NullPointerException."); 209 } catch (NullPointerException npe) { 210 check(npe, thisLine += 6, methodLine += 4, "$opt$getShortField"); 211 } 212 } 213 214 static void check(NullPointerException npe, int mainLine, int medthodLine, String methodName) { 215 System.out.println(methodName); 216 StackTraceElement[] trace = npe.getStackTrace(); 217 checkElement(trace[0], "Main", methodName, "Main.java", medthodLine); 218 checkElement(trace[1], "Main", "main", "Main.java", mainLine); 219 } 220 221 static void checkElement(StackTraceElement element, 222 String declaringClass, String methodName, 223 String fileName, int lineNumber) { 224 assertEquals(declaringClass, element.getClassName()); 225 assertEquals(methodName, element.getMethodName()); 226 assertEquals(fileName, element.getFileName()); 227 assertEquals(lineNumber, element.getLineNumber()); 228 } 229 230 static void assertEquals(Object expected, Object actual) { 231 if (!expected.equals(actual)) { 232 String msg = "Expected \"" + expected + "\" but got \"" + actual + "\""; 233 throw new AssertionError(msg); 234 } 235 } 236 237 static void assertEquals(int expected, int actual) { 238 if (expected != actual) { 239 throw new AssertionError("Expected " + expected + " got " + actual); 240 } 241 } 242 243} 244