1//
2//  RuntimeException.m
3//  ANTLR
4//
5//  Created by Alan Condit on 6/5/10.
6// [The "BSD licence"]
7// Copyright (c) 2010 Alan Condit
8// All rights reserved.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions
12// are met:
13// 1. Redistributions of source code must retain the above copyright
14//    notice, this list of conditions and the following disclaimer.
15// 2. Redistributions in binary form must reproduce the above copyright
16//    notice, this list of conditions and the following disclaimer in the
17//    documentation and/or other materials provided with the distribution.
18// 3. The name of the author may not be used to endorse or promote products
19//    derived from this software without specific prior written permission.
20//
21// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
32#import "RuntimeException.h"
33
34
35@implementation RuntimeException
36
37+ (id) newException
38{
39    return [[RuntimeException alloc] init];
40}
41
42+ (id) newException:(NSString *)aReason
43{
44    return [[RuntimeException alloc] init:aReason];
45}
46
47+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
48{
49    return [[RuntimeException alloc] init:aReason userInfo:aUserInfo];
50}
51
52+ (id) newException:(NSString *)aName reason:(NSString *)aReason;
53{
54    return [[RuntimeException alloc] initWithName:aName reason:aReason];
55}
56
57+ (id) newException:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo;
58{
59    return [[RuntimeException alloc] initWithName:aName reason:aReason userInfo:aUserInfo];
60}
61
62
63- (id) init
64{
65    self = [super initWithName:@"RuntimeException" reason:@"UnknownException" userInfo:nil];
66    return(self);
67}
68
69- (id) init:(NSString *)aReason
70{
71    self = [super initWithName:(NSString *)@"RuntimeException" reason:(NSString *)aReason userInfo:(NSDictionary *)nil];
72    return(self);
73}
74
75- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
76{
77    self = [super initWithName:@"RuntimeException" reason:aReason userInfo:aUserInfo];
78    return(self);
79}
80
81- (id) initWithName:(NSString *)aName reason:(NSString *)aReason
82{
83    self = [super initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)nil];
84    return(self);
85}
86
87- (id) initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
88{
89    self = [super initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo];
90    return(self);
91}
92
93- (NSString *) Description
94{
95    return [super reason];
96}
97
98- (id) stackTrace:(NSException *)e
99{
100    NSArray *addrs = [e callStackReturnAddresses];
101    NSArray *trace = [e callStackSymbols];
102
103    for (NSString *traceStr in trace) {
104        NSLog( @"%@", traceStr);
105        // TODO: remove special after testing
106        if ([traceStr hasPrefix:@"main("] > 0)
107            return traceStr;
108        if (![traceStr hasPrefix:@"org.stringtemplate"])
109            return traceStr;
110    }
111    return trace;
112}
113
114@end
115
116@implementation CloneNotSupportedException
117
118+ (id) newException
119{
120    return [[CloneNotSupportedException alloc] init];
121}
122
123+ (id) newException:(NSString *)aReason
124{
125    return [[CloneNotSupportedException alloc] init:aReason];
126}
127
128+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
129{
130    return [[CloneNotSupportedException alloc] init:aReason userInfo:aUserInfo];
131}
132
133- (id) init
134{
135    self = [super initWithName:@"CloneNotSupportedException" reason:@"Attempted to clone non-cloneable object" userInfo:nil];
136    return(self);
137}
138
139- (id) init:(NSString *)aReason
140{
141    self = [super initWithName:@"CloneNotSupportedException" reason:(NSString *)aReason userInfo:nil];
142    return(self);
143}
144
145- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
146{
147    self = [super initWithName:@"CloneNotSupportedException" reason:aReason userInfo:aUserInfo];
148    return(self);
149}
150
151@end
152
153@implementation ConcurrentModificationException
154
155+ (id) newException
156{
157    return [[ConcurrentModificationException alloc] init];
158}
159
160+ (id) newException:(NSString *)aReason
161{
162    return [[ConcurrentModificationException alloc] init:aReason];
163}
164
165+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
166{
167    return [[ConcurrentModificationException alloc] init:aReason userInfo:aUserInfo];
168}
169
170- (id) init
171{
172    self = [super initWithName:@"ConcurrentModificationException" reason:@"UnknownException" userInfo:nil];
173    return(self);
174}
175
176- (id) init:(NSString *)aReason
177{
178    self = [super initWithName:@"ConcurrentModificationException" reason:(NSString *)aReason userInfo:nil];
179    return(self);
180}
181
182- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
183{
184    self = [super initWithName:@"ConcurrentModificationException" reason:aReason userInfo:aUserInfo];
185    return(self);
186}
187
188@end
189
190@implementation IllegalArgumentException
191
192+ (id) newException
193{
194    return [[IllegalArgumentException alloc] init];
195}
196
197+ (id) newException:(NSString *)aReason
198{
199    return [[IllegalArgumentException alloc] init:aReason];
200}
201
202+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
203{
204    return [[IllegalArgumentException alloc] init:aReason userInfo:aUserInfo];
205}
206
207- (id) init
208{
209    self = [super initWithName:@"IllegalArgumentException" reason:@"IllegalStateException" userInfo:nil];
210    return(self);
211}
212
213- (id) init:(NSString *)aReason
214{
215    self = [super initWithName:@"IllegalArgumentException" reason:(NSString *)aReason userInfo:nil];
216    return(self);
217}
218
219- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
220{
221    self = [super initWithName:@"IllegalArgumentException" reason:aReason userInfo:aUserInfo];
222    return(self);
223}
224
225@end
226
227@implementation IllegalStateException
228
229+ (id) newException
230{
231    return [[IllegalStateException alloc] init];
232}
233
234+ (id) newException:(NSString *)aReason
235{
236    return [[IllegalStateException alloc] init:aReason];
237}
238
239+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
240{
241    return [[IllegalStateException alloc] init:aReason userInfo:aUserInfo];
242}
243
244- (id) init
245{
246    self = [super initWithName:@"IllegalStateException" reason:@"IllegalStateException" userInfo:nil];
247    return(self);
248}
249
250- (id) init:(NSString *)aReason
251{
252    self = [super initWithName:@"IllegalStateException" reason:(NSString *)aReason userInfo:nil];
253    return(self);
254}
255
256- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
257{
258    self = [super initWithName:@"IllegalStateException" reason:aReason userInfo:aUserInfo];
259    return(self);
260}
261
262@end
263
264@implementation IndexOutOfBoundsException
265
266+ (id) newException
267{
268    return [[IndexOutOfBoundsException alloc] init];
269}
270
271+ (id) newException:(NSString *)aReason
272{
273    return [[IndexOutOfBoundsException alloc] init:aReason];
274}
275
276+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
277{
278    return [[IndexOutOfBoundsException alloc] init:aReason userInfo:aUserInfo];
279}
280
281- (id) init
282{
283    self = [super initWithName:@"IndexOutOfBoundsException" reason:@"IndexOutOfBoundsException" userInfo:nil];
284    return(self);
285}
286
287- (id) init:(NSString *)aReason
288{
289    self = [super initWithName:@"IndexOutOfBoundsException" reason:(NSString *)aReason userInfo:nil];
290    return(self);
291}
292
293- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
294{
295    self = [super initWithName:@"IndexOutOfBoundsException" reason:aReason userInfo:aUserInfo];
296    return(self);
297}
298
299@end
300
301@implementation NoSuchElementException
302
303+ (id) newException
304{
305    return [[NoSuchElementException alloc] init];
306}
307
308+ (id) newException:(NSString *)aReason
309{
310    return [[NoSuchElementException alloc] init:aReason];
311}
312
313+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
314{
315    return [[NoSuchElementException alloc] init:aReason userInfo:(NSDictionary *)aUserInfo];
316}
317
318- (id) init
319{
320    self = [super initWithName:@"NoSuchElementException" reason:@"UnknownException" userInfo:nil];
321    return(self);
322}
323
324- (id) init:(NSString *)aReason
325{
326    self = [super initWithName:@"NoSuchElementException" reason:(NSString *)aReason userInfo:(NSDictionary *)nil];
327    return(self);
328}
329
330- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
331{
332    self = [super initWithName:@"NoSuchElementException" reason:aReason userInfo:aUserInfo];
333    return(self);
334}
335
336- (id) initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
337{
338    self = [super initWithName:aName reason:aReason userInfo:aUserInfo];
339    return(self);
340}
341
342@end
343
344@implementation NullPointerException
345
346+ (id) newException
347{
348    return [[NullPointerException alloc] init];
349}
350
351+ (id) newException:(NSString *)aReason
352{
353    return [[NullPointerException alloc] init:aReason];
354}
355
356+ (id) newException:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
357{
358    return [[NullPointerException alloc] init:aReason userInfo:(NSDictionary *)aUserInfo];
359}
360
361- (id) init
362{
363    self = [super initWithName:@"NullPointerException" reason:@"UnknownException" userInfo:nil];
364    return(self);
365}
366
367- (id) init:(NSString *)aReason
368{
369    self = [super initWithName:@"NullPointerException" reason:(NSString *)aReason userInfo:(NSDictionary *)nil];
370    return(self);
371}
372
373- (id) init:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
374{
375    self = [super initWithName:@"NullPointerException" reason:aReason userInfo:aUserInfo];
376    return(self);
377}
378
379@end
380
381@implementation RewriteEarlyExitException
382
383+ (id) newException
384{
385	return [[self alloc] init];
386}
387
388- (id) init
389{
390	self = [super initWithName:@"RewriteEarlyExitException" reason:nil userInfo:nil];
391	return self;
392}
393
394- (id) initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo
395{
396    self = [super initWithName:aName reason:aReason userInfo:aUserInfo];
397    return(self);
398}
399
400- (NSString *) description
401{
402	return [self name];
403}
404
405@end
406
407@implementation UnsupportedOperationException
408
409+ (id) newException:(NSString *)aReason
410{
411    return [[RuntimeException alloc] initWithName:@"Unsupported Operation Exception" reason:aReason userInfo:nil];
412}
413
414- (id) initWithName:(NSString *)aName reason:(NSString *)aReason
415{
416    self=[super initWithName:aName reason:aReason userInfo:nil];
417    return self;
418}
419
420- (id) initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)userInfo
421{
422    self=[super initWithName:aName reason:aReason userInfo:userInfo];
423    return self;
424}
425
426@end
427
428