1 // BH added check for annoying NullPointerException to show stack trace during file checking
3 c$=Clazz.decorateAsClass(function(){
4 this.detailMessage=null;
7 Clazz.instantialize(this,arguments);
8 },java.lang,"Throwable",null,java.io.Serializable);
9 Clazz.prepareFields(c$,function(){
12 Clazz.makeConstructor(c$,
14 if(Clazz._checkFiles && this.__CLASS_NAME__ == "java.lang.NullPointerException")
15 System.out.println(Clazz.getStackTrace());
16 this.fillInStackTrace();
18 Clazz.makeConstructor(c$,
20 this.fillInStackTrace();
21 this.detailMessage=message;
23 Clazz.makeConstructor(c$,
24 function(message,cause){
25 this.fillInStackTrace();
26 this.detailMessage=message;
29 Clazz.makeConstructor(c$,
31 this.fillInStackTrace();
32 this.detailMessage=(cause==null?null:cause.toString());
35 Clazz.defineMethod(c$,"getMessage",
38 if(typeof this.message!="undefined"){
41 }return this.detailMessage;
43 Clazz.defineMethod(c$,"getLocalizedMessage",
45 return this.getMessage();
47 Clazz.defineMethod(c$,"getCause",
49 return(this.cause===this?null:this.cause);
51 Clazz.defineMethod(c$,"initCause",
53 if(this.cause!==this)throw new IllegalStateException("Can't overwrite cause");
54 if(cause===this)throw new IllegalArgumentException("Self-causation not permitted");
58 Clazz.overrideMethod(c$,"toString",
60 var s=this.getClass().getName();
61 var message=this.getLocalizedMessage();
62 return(message!=null)?(s+": "+message):s;
64 Clazz.defineMethod(c$,"printStackTrace",
66 System.err.println(this);
67 for(var i=0;i<this.stackTrace.length;i++){
68 var t=this.stackTrace[i];
69 var x=t.methodName.indexOf("(");
70 var n=t.methodName.substring(0,x).replace(/\s+/g,"");
71 if(n!="construct"||t.nativeClazz==null
72 ||Clazz.getInheritedLevel(t.nativeClazz,Throwable)<0){
73 System.err.println(t);
77 Clazz.defineMethod(c$,"printStackTrace",
79 this.printStackTrace();
80 },"java.io.PrintStream");
81 Clazz.defineMethod(c$,"printStackTrace",
83 this.printStackTrace();
84 },"java.io.PrintWriter");
85 Clazz.defineMethod(c$,"fillInStackTrace",
87 this.stackTrace=new Array();
88 var caller=arguments.callee.caller;
90 var callerList=new Array();
91 var index=Clazz.callingStackTraces.length-1;
93 while(index>-1||caller!=null){
96 if(!noLooping||caller==Clazz.tryToSearchAndExecute||caller==Clazz.superCall||caller==null){
101 superCaller=Clazz.callingStackTraces[index].caller;
102 nativeClazz=Clazz.callingStackTraces[index].owner;
106 if(superCaller.claxxOwner!=null){
107 nativeClazz=superCaller.claxxOwner;
108 }else if(superCaller.exClazz!=null){
109 nativeClazz=superCaller.exClazz;
112 var st=new StackTraceElement(
113 ((nativeClazz!=null&&nativeClazz.__CLASS_NAME__.length!=0)?
114 nativeClazz.__CLASS_NAME__:"anonymous"),
115 ((superCaller.exName==null)?"anonymous":superCaller.exName)
116 +" ("+Clazz.getParamsType(superCaller.arguments)+")",
118 st.nativeClazz=nativeClazz;
119 this.stackTrace[this.stackTrace.length]=st;
120 for(var i=0;i<callerList.length;i++){
121 if(callerList[i]==superCaller){
123 var st=new StackTraceElement("lost","missing",null,-3);
125 this.stackTrace[this.stackTrace.length]=st;
130 if(superCaller!=null){
131 callerList[callerList.length]=superCaller;
133 caller=superCaller.arguments.callee.caller;
135 Clazz.initializingException=false;
138 Clazz.defineMethod(c$,"setStackTrace",
139 function(stackTrace){
140 var defensiveCopy=stackTrace.clone();
141 for(var i=0;i<defensiveCopy.length;i++)if(defensiveCopy[i]==null)throw new NullPointerException("stackTrace["+i+"]");
143 this.stackTrace=defensiveCopy;