# HG changeset patch # User Jaroslav Tulach # Date 1358159456 -3600 # Node ID 9359b006782ba26cfcc409c2aa4ee598962a448b # Parent b107ed66f2e762a6d1ace7960fb1d38a7ccebbd8 Using 'this' in @JavaScriptBody instance methods diff -r b107ed66f2e7 -r 9359b006782b core/src/main/java/org/apidesign/bck2brwsr/core/impl/JavaScriptProcesor.java --- a/core/src/main/java/org/apidesign/bck2brwsr/core/impl/JavaScriptProcesor.java Mon Jan 14 10:57:51 2013 +0100 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/impl/JavaScriptProcesor.java Mon Jan 14 11:30:56 2013 +0100 @@ -53,7 +53,7 @@ @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { for (Element e : roundEnv.getElementsAnnotatedWith(JavaScriptBody.class)) { - if (e.getKind() != ElementKind.METHOD) { + if (e.getKind() != ElementKind.METHOD && e.getKind() != ElementKind.CONSTRUCTOR) { continue; } ExecutableElement ee = (ExecutableElement)e; @@ -61,13 +61,7 @@ JavaScriptBody jsb = e.getAnnotation(JavaScriptBody.class); String[] arr = jsb.args(); - int indx; - if (!ee.getModifiers().contains(Modifier.STATIC)) { - indx = 1; - } else { - indx = 0; - } - if (indx + params.size() != arr.length) { + if (params.size() != arr.length) { processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Number of args arguments does not match real arguments!", e); } } @@ -81,14 +75,8 @@ StringBuilder sb = new StringBuilder(); if (e.getKind() == ElementKind.METHOD && member.getSimpleName().contentEquals("args")) { ExecutableElement ee = (ExecutableElement) e; - String sep; - if (!ee.getModifiers().contains(Modifier.STATIC)) { - sb.append("{ \"self\""); - sep = ", "; - } else { - sb.append("{ "); - sep = ""; - } + String sep = ""; + sb.append("{ "); for (VariableElement ve : ee.getParameters()) { sb.append(sep).append('"').append(ve.getSimpleName()) .append('"'); diff -r b107ed66f2e7 -r 9359b006782b emul/src/main/java/java/lang/Class.java --- a/emul/src/main/java/java/lang/Class.java Mon Jan 14 10:57:51 2013 +0100 +++ b/emul/src/main/java/java/lang/Class.java Mon Jan 14 11:30:56 2013 +0100 @@ -318,7 +318,7 @@ return (getAccess() & 0x200) != 0; } - @JavaScriptBody(args = "self", body = "return self.access;") + @JavaScriptBody(args = {}, body = "return this.access;") private native int getAccess(); @@ -362,8 +362,8 @@ * @see java.lang.Void#TYPE * @since JDK1.1 */ - @JavaScriptBody(args = "self", body = - "if (self.primitive) return true;" + @JavaScriptBody(args = {}, body = + "if (this.primitive) return true;" + "else return false;" ) public native boolean isPrimitive(); @@ -447,7 +447,7 @@ return jvmName().replace('/', '.'); } - @JavaScriptBody(args = "self", body = "return self.jvmName;") + @JavaScriptBody(args = {}, body = "return this.jvmName;") private native String jvmName(); @@ -481,7 +481,7 @@ * * @return the superclass of the class represented by this object. */ - @JavaScriptBody(args = "self", body = "return self.superclass;") + @JavaScriptBody(args = {}, body = "return this.superclass;") public native Class getSuperclass(); /** @@ -1078,10 +1078,10 @@ throw new ClassCastException(this.toString()); } - @JavaScriptBody(args = { "self", "ac" }, + @JavaScriptBody(args = { "ac" }, body = - "if (self.anno) {" - + " return self.anno['L' + ac.jvmName + ';'];" + "if (this.anno) {" + + " return this.anno['L' + ac.jvmName + ';'];" + "} else return null;" ) private Object getAnnotationData(Class annotationClass) { @@ -1100,8 +1100,8 @@ * @throws NullPointerException {@inheritDoc} * @since 1.5 */ - @JavaScriptBody(args = { "self", "ac" }, - body = "if (self.anno && self.anno['L' + ac.jvmName + ';']) { return true; }" + @JavaScriptBody(args = { "ac" }, + body = "if (this.anno && this.anno['L' + ac.jvmName + ';']) { return true; }" + "else return false;" ) public boolean isAnnotationPresent( @@ -1112,7 +1112,7 @@ return getAnnotation(annotationClass) != null; } - @JavaScriptBody(args = "self", body = "return self.anno;") + @JavaScriptBody(args = {}, body = "return this.anno;") private Object getAnnotationData() { throw new UnsupportedOperationException(); } diff -r b107ed66f2e7 -r 9359b006782b emul/src/main/java/java/lang/Object.java --- a/emul/src/main/java/java/lang/Object.java Mon Jan 14 10:57:51 2013 +0100 +++ b/emul/src/main/java/java/lang/Object.java Mon Jan 14 11:30:56 2013 +0100 @@ -66,7 +66,7 @@ * @see Class Literals, section 15.8.2 of * The Java™ Language Specification. */ - @JavaScriptBody(args="self", body="return self.constructor.$class;") + @JavaScriptBody(args={}, body="return this.constructor.$class;") public final native Class getClass(); /** @@ -104,14 +104,14 @@ * @see java.lang.Object#equals(java.lang.Object) * @see java.lang.System#identityHashCode */ - @JavaScriptBody(args = "self", body = - "if (self.$hashCode) return self.$hashCode;\n" - + "var h = self.computeHashCode__I(self);\n" - + "return self.$hashCode = h & h;" + @JavaScriptBody(args = {}, body = + "if (this.$hashCode) return this.$hashCode;\n" + + "var h = this.computeHashCode__I();\n" + + "return this.$hashCode = h & h;" ) public native int hashCode(); - @JavaScriptBody(args = "self", body = "Math.random() * Math.pow(2, 32);") + @JavaScriptBody(args = {}, body = "Math.random() * Math.pow(2, 32);") native int computeHashCode(); /** diff -r b107ed66f2e7 -r 9359b006782b emul/src/main/java/java/lang/String.java --- a/emul/src/main/java/java/lang/String.java Mon Jan 14 10:57:51 2013 +0100 +++ b/emul/src/main/java/java/lang/String.java Mon Jan 14 11:30:56 2013 +0100 @@ -169,11 +169,11 @@ * @param value * The initial value of the string */ - @JavaScriptBody(args = { "self", "charArr" }, body= + @JavaScriptBody(args = { "charArr" }, body= "for (var i = 0; i < charArr.length; i++) {\n" + " if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n" + "}\n" - + "self.fld_r = charArr.join('');\n" + + "this.fld_r = charArr.join('');\n" ) public String(char value[]) { } @@ -199,12 +199,12 @@ * If the {@code offset} and {@code count} arguments index * characters outside the bounds of the {@code value} array */ - @JavaScriptBody(args = { "self", "charArr", "off", "cnt" }, body = + @JavaScriptBody(args = { "charArr", "off", "cnt" }, body = "var up = off + cnt;\n" + "for (var i = off; i < up; i++) {\n" + " if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n" + "}\n" + - "self.fld_r = charArr.slice(off, up).join(\"\");\n" + "this.fld_r = charArr.slice(off, up).join(\"\");\n" ) public String(char value[], int offset, int count) { } @@ -618,7 +618,7 @@ * @return the length of the sequence of characters represented by this * object. */ - @JavaScriptBody(args = "self", body = "return self.toString().length;") + @JavaScriptBody(args = {}, body = "return this.toString().length;") public int length() { throw new UnsupportedOperationException(); } @@ -631,7 +631,7 @@ * * @since 1.6 */ - @JavaScriptBody(args = "self", body="return self.toString().length === 0;") + @JavaScriptBody(args = {}, body="return this.toString().length === 0;") public boolean isEmpty() { return length() == 0; } @@ -654,8 +654,8 @@ * argument is negative or not less than the length of this * string. */ - @JavaScriptBody(args = { "self", "index" }, - body = "return self.toString().charCodeAt(index);" + @JavaScriptBody(args = { "index" }, + body = "return this.toString().charCodeAt(index);" ) public char charAt(int index) { throw new UnsupportedOperationException(); @@ -780,8 +780,8 @@ * Copy characters from this string into dst starting at dstBegin. * This method doesn't perform any range checking. */ - @JavaScriptBody(args = { "self", "arr", "to" }, body = - "var s = self.toString();\n" + + @JavaScriptBody(args = { "arr", "to" }, body = + "var s = this.toString();\n" + "for (var i = 0; i < s.length; i++) {\n" + " arr[to++] = s[i];\n" + "}" @@ -820,8 +820,8 @@ *
  • dstBegin+(srcEnd-srcBegin) is larger than * dst.length */ - @JavaScriptBody(args = { "self", "beg", "end", "arr", "dst" }, body= - "var s = self.toString();\n" + + @JavaScriptBody(args = { "beg", "end", "arr", "dst" }, body= + "var s = this.toString();\n" + "while (beg < end) {\n" + " arr[dst++] = s[beg++];\n" + "}\n" @@ -993,9 +993,9 @@ * @see #compareTo(String) * @see #equalsIgnoreCase(String) */ - @JavaScriptBody(args = { "self", "obj" }, body = + @JavaScriptBody(args = { "obj" }, body = "return obj.$instOf_java_lang_String && " - + "self.toString() === obj.toString();" + + "this.toString() === obj.toString();" ) public boolean equals(Object anObject) { if (this == anObject) { @@ -1420,9 +1420,9 @@ * this.substring(toffset).startsWith(prefix) * */ - @JavaScriptBody(args = { "self", "find", "from" }, body= + @JavaScriptBody(args = { "find", "from" }, body= "find = find.toString();\n" + - "return self.toString().substring(from, from + find.length) === find;\n" + "return this.toString().substring(from, from + find.length) === find;\n" ) public boolean startsWith(String prefix, int toffset) { char ta[] = toCharArray(); @@ -1570,9 +1570,9 @@ * than or equal to fromIndex, or -1 * if the character does not occur. */ - @JavaScriptBody(args = { "self", "ch", "from" }, body = + @JavaScriptBody(args = { "ch", "from" }, body = "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" + - "return self.toString().indexOf(ch, from);\n" + "return this.toString().indexOf(ch, from);\n" ) public int indexOf(int ch, int fromIndex) { if (fromIndex < 0) { @@ -1679,9 +1679,9 @@ * than or equal to fromIndex, or -1 * if the character does not occur before that point. */ - @JavaScriptBody(args = { "self", "ch", "from" }, body = + @JavaScriptBody(args = { "ch", "from" }, body = "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" + - "return self.toString().lastIndexOf(ch, from);" + "return this.toString().lastIndexOf(ch, from);" ) public int lastIndexOf(int ch, int fromIndex) { if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) { @@ -1754,8 +1754,8 @@ * starting at the specified index, * or {@code -1} if there is no such occurrence. */ - @JavaScriptBody(args = { "self", "str", "fromIndex" }, body = - "return self.toString().indexOf(str.toString(), fromIndex);" + @JavaScriptBody(args = { "str", "fromIndex" }, body = + "return this.toString().indexOf(str.toString(), fromIndex);" ) public native int indexOf(String str, int fromIndex); @@ -1794,8 +1794,8 @@ * searching backward from the specified index, * or {@code -1} if there is no such occurrence. */ - @JavaScriptBody(args = { "self", "s", "from" }, body = - "return self.toString().lastIndexOf(s.toString(), from);" + @JavaScriptBody(args = { "s", "from" }, body = + "return this.toString().lastIndexOf(s.toString(), from);" ) public int lastIndexOf(String str, int fromIndex) { return lastIndexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex); @@ -1903,8 +1903,8 @@ * beginIndex is larger than * endIndex. */ - @JavaScriptBody(args = { "self", "beginIndex", "endIndex" }, body = - "return self.toString().substring(beginIndex, endIndex);" + @JavaScriptBody(args = { "beginIndex", "endIndex" }, body = + "return this.toString().substring(beginIndex, endIndex);" ) public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) { @@ -2012,10 +2012,10 @@ * @return a string derived from this string by replacing every * occurrence of oldChar with newChar. */ - @JavaScriptBody(args = { "self", "arg1", "arg2" }, body = + @JavaScriptBody(args = { "arg1", "arg2" }, body = "if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1);\n" + "if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2);\n" + - "var s = self.toString();\n" + + "var s = this.toString();\n" + "for (;;) {\n" + " var ret = s.replace(arg1, arg2);\n" + " if (ret === s) {\n" + @@ -2078,8 +2078,8 @@ * @since 1.4 * @spec JSR-51 */ - @JavaScriptBody(args = { "self", "regex" }, body = - "self = self.toString();\n" + @JavaScriptBody(args = { "regex" }, body = + "var self = this.toString();\n" + "var re = new RegExp(regex.toString());\n" + "var r = re.exec(self);\n" + "return r != null && r.length > 0 && self.length == r[0].length;" @@ -2496,7 +2496,7 @@ * @return the String, converted to lowercase. * @see java.lang.String#toLowerCase(Locale) */ - @JavaScriptBody(args = "self", body = "return self.toLowerCase();") + @JavaScriptBody(args = {}, body = "return this.toLowerCase();") public String toLowerCase() { throw new UnsupportedOperationException("Should be supported but without connection to locale"); } @@ -2662,7 +2662,7 @@ * @return the String, converted to uppercase. * @see java.lang.String#toUpperCase(Locale) */ - @JavaScriptBody(args = "self", body = "return self.toUpperCase();") + @JavaScriptBody(args = {}, body = "return this.toUpperCase();") public String toUpperCase() { throw new UnsupportedOperationException(); } @@ -2718,7 +2718,7 @@ * * @return the string itself. */ - @JavaScriptBody(args = "self", body = "return self.toString();") + @JavaScriptBody(args = {}, body = "return this.toString();") public String toString() { return this; } diff -r b107ed66f2e7 -r 9359b006782b emul/src/main/java/java/lang/Throwable.java --- a/emul/src/main/java/java/lang/Throwable.java Mon Jan 14 10:57:51 2013 +0100 +++ b/emul/src/main/java/java/lang/Throwable.java Mon Jan 14 11:30:56 2013 +0100 @@ -783,7 +783,7 @@ return this; } - @JavaScriptBody(args = { "self", "dummy" }, body = "") + @JavaScriptBody(args = { "dummy" }, body = "") private native Throwable fillInStackTrace(int dummy); /** diff -r b107ed66f2e7 -r 9359b006782b emul/src/main/java/java/lang/reflect/Method.java --- a/emul/src/main/java/java/lang/reflect/Method.java Mon Jan 14 10:57:51 2013 +0100 +++ b/emul/src/main/java/java/lang/reflect/Method.java Mon Jan 14 11:30:56 2013 +0100 @@ -646,10 +646,10 @@ return Modifier.isSynthetic(getModifiers()); } - @JavaScriptBody(args = { "self", "ac" }, + @JavaScriptBody(args = { "ac" }, body = - "if (self.fld_data.anno) {" - + " return self.fld_data.anno['L' + ac.jvmName + ';'];" + "if (this.fld_data.anno) {" + + " return this.fld_data.anno['L' + ac.jvmName + ';'];" + "} else return null;" ) private Object getAnnotationData(Class annotationClass) { diff -r b107ed66f2e7 -r 9359b006782b javap/src/main/java/org/apidesign/javap/Vector.java --- a/javap/src/main/java/org/apidesign/javap/Vector.java Mon Jan 14 10:57:51 2013 +0100 +++ b/javap/src/main/java/org/apidesign/javap/Vector.java Mon Jan 14 11:30:56 2013 +0100 @@ -37,8 +37,8 @@ void add(Object objectType) { addElement(objectType); } - @JavaScriptBody(args = { "self", "obj" }, body = - "self.push(obj);" + @JavaScriptBody(args = { "obj" }, body = + "this.push(obj);" ) void addElement(Object obj) { final int s = size(); @@ -46,16 +46,16 @@ setElementAt(obj, s); } - @JavaScriptBody(args = { "self" }, body = - "return self.length;" + @JavaScriptBody(args = { }, body = + "return this.length;" ) int size() { return arr == null ? 0 : arr.length; } - @JavaScriptBody(args = { "self", "newArr" }, body = - "for (var i = 0; i < self.length; i++) {\n" - + " newArr[i] = self[i];\n" + @JavaScriptBody(args = { "newArr" }, body = + "for (var i = 0; i < this.length; i++) {\n" + + " newArr[i] = this[i];\n" + "}\n") void copyInto(Object[] newArr) { if (arr == null) { @@ -67,8 +67,8 @@ } } - @JavaScriptBody(args = { "self", "index" }, body = - "return self[index];" + @JavaScriptBody(args = { "index" }, body = + "return this[index];" ) Object elementAt(int index) { return arr[index]; @@ -80,8 +80,8 @@ arr = newArr; } - @JavaScriptBody(args = { "self", "val", "index" }, body = - "self[index] = val;" + @JavaScriptBody(args = { "val", "index" }, body = + "this[index] = val;" ) void setElementAt(Object val, int index) { arr[index] = val; diff -r b107ed66f2e7 -r 9359b006782b javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java Mon Jan 14 10:57:51 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java Mon Jan 14 11:30:56 2013 +0100 @@ -51,9 +51,9 @@ * @param r the runnable to execute, never null */ @JavaScriptBody( - args={ "self", "ev", "r" }, - body="var e = window.document.getElementById(self.fld_id);\n" - + "e[ev.fld_id] = function() { r.run__V(r); };\n" + args={ "ev", "r" }, + body="var e = window.document.getElementById(this.fld_id);\n" + + "e[ev.fld_id] = function() { r.run__V(); };\n" ) final native void on(OnEvent ev, Runnable r); diff -r b107ed66f2e7 -r 9359b006782b vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 14 10:57:51 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 14 11:30:56 2013 +0100 @@ -1452,21 +1452,13 @@ out.append(prefix).append(mn); out.append(" = function("); String space = ""; - int index; - if (!isStatic) { - index = 1; - } else { - index = 0; - } + int index = 0; for (int i = 0; i < cnt.length(); i++) { out.append(space); space = outputArg(out, p.args, index); index++; } out.append(") {").append("\n"); - if (!isStatic) { - out.append(" var ").append(p.args[0]).append(" = this;\n"); - } out.append(p.body); out.append("\n}\n"); return mn; diff -r b107ed66f2e7 -r 9359b006782b vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Mon Jan 14 10:57:51 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Mon Jan 14 11:30:56 2013 +0100 @@ -112,11 +112,11 @@ this.lazy = vm; } - @JavaScriptBody(args = {"self", "n"}, + @JavaScriptBody(args = {"n"}, body = "var cls = n.replace__Ljava_lang_String_2CC('/','_').toString();" + "\nvar dot = n.replace__Ljava_lang_String_2CC('/','.').toString();" - + "\nvar lazy = self.fld_lazy;" + + "\nvar lazy = this.fld_lazy;" + "\nvar loader = lazy.fld_loader;" + "\nvar vm = loader.vm;" + "\nif (vm[cls]) return false;"