• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 public 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 
$opt$setObjectField(Main m)29   public static void $opt$setObjectField(Main m) {
30     m.objectField = null;
31   }
32 
$opt$setIntField(Main m)33   public static void $opt$setIntField(Main m) {
34     m.intField = 0;
35   }
36 
$opt$setFloatField(Main m)37   public static void $opt$setFloatField(Main m) {
38     m.floatField = 0;
39   }
40 
$opt$setLongField(Main m)41   public static void $opt$setLongField(Main m) {
42     m.longField = 0;
43   }
44 
$opt$setDoubleField(Main m)45   public static void $opt$setDoubleField(Main m) {
46     m.doubleField = 0;
47   }
48 
$opt$setByteField(Main m)49   public static void $opt$setByteField(Main m) {
50     m.byteField = 0;
51   }
52 
$opt$setBooleanField(Main m)53   public static void $opt$setBooleanField(Main m) {
54     m.booleanField = false;
55   }
56 
$opt$setCharField(Main m)57   public static void $opt$setCharField(Main m) {
58     m.charField = 0;
59   }
60 
$opt$setShortField(Main m)61   public static void $opt$setShortField(Main m) {
62     m.shortField = 0;
63   }
64 
$opt$getObjectField(Main m)65   public static Object $opt$getObjectField(Main m) {
66     return m.objectField;
67   }
68 
$opt$getIntField(Main m)69   public static int $opt$getIntField(Main m) {
70     return m.intField;
71   }
72 
$opt$getFloatField(Main m)73   public static float $opt$getFloatField(Main m) {
74     return m.floatField;
75   }
76 
$opt$getLongField(Main m)77   public static long $opt$getLongField(Main m) {
78     return m.longField;
79   }
80 
$opt$getDoubleField(Main m)81   public static double $opt$getDoubleField(Main m) {
82     return m.doubleField;
83   }
84 
$opt$getByteField(Main m)85   public static byte $opt$getByteField(Main m) {
86     return m.byteField;
87   }
88 
$opt$getBooleanField(Main m)89   public static boolean $opt$getBooleanField(Main m) {
90     return m.booleanField;
91   }
92 
$opt$getCharField(Main m)93   public static char $opt$getCharField(Main m) {
94     return m.charField;
95   }
96 
$opt$getShortField(Main m)97   public static short $opt$getShortField(Main m) {
98     return m.shortField;
99   }
100 
main(String[] args)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 
check(NullPointerException npe, int mainLine, int medthodLine, String methodName)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 
checkElement(StackTraceElement element, String declaringClass, String methodName, String fileName, int lineNumber)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 
assertEquals(Object expected, Object actual)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 
assertEquals(int expected, int actual)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