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