1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Sat Sep 15 22:12:49 2012 +0200
1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Sun Sep 16 07:28:57 2012 +0200
1.3 @@ -30,6 +30,7 @@
1.4 import org.netbeans.modules.classfile.Code;
1.5 import org.netbeans.modules.classfile.Method;
1.6 import org.netbeans.modules.classfile.Parameter;
1.7 +import org.netbeans.modules.classfile.Variable;
1.8
1.9 /** Translator of the code inside class files to JavaScript.
1.10 *
1.11 @@ -58,6 +59,11 @@
1.12 compiler.generateStaticMethod(m);
1.13 }
1.14 }
1.15 + for (Variable v : jc.getVariables()) {
1.16 + if (v.isStatic()) {
1.17 + compiler.generateStaticField(v);
1.18 + }
1.19 + }
1.20 }
1.21 private void generateStaticMethod(Method m) throws IOException {
1.22 out.append("\nfunction ").append(
1.23 @@ -369,6 +375,22 @@
1.24 i += 2;
1.25 break;
1.26 }
1.27 + case bc_getstatic: {
1.28 + int indx = readIntArg(byteCodes, i);
1.29 + CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx);
1.30 + out.append("stack.push(").append(fi.getClassName().getExternalName().replace('.', '_'));
1.31 + out.append('_').append(fi.getFieldName()).append(");");
1.32 + i += 2;
1.33 + break;
1.34 + }
1.35 + case bc_putstatic: {
1.36 + int indx = readIntArg(byteCodes, i);
1.37 + CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx);
1.38 + out.append(fi.getClassName().getExternalName().replace('.', '_'));
1.39 + out.append('_').append(fi.getFieldName()).append(" = stack.pop();");
1.40 + i += 2;
1.41 + break;
1.42 + }
1.43
1.44 }
1.45 out.append(" /*");
1.46 @@ -446,4 +468,10 @@
1.47 }
1.48 return cnt;
1.49 }
1.50 +
1.51 + private void generateStaticField(Variable v) throws IOException {
1.52 + out.append("\nvar ")
1.53 + .append(jc.getName().getExternalName().replace('.', '_'))
1.54 + .append('_').append(v.getName()).append(" = 0;");
1.55 + }
1.56 }
2.1 --- a/src/test/java/org/apidesign/java4browser/StaticMethod.java Sat Sep 15 22:12:49 2012 +0200
2.2 +++ b/src/test/java/org/apidesign/java4browser/StaticMethod.java Sun Sep 16 07:28:57 2012 +0200
2.3 @@ -22,6 +22,8 @@
2.4 * @author Jaroslav Tulach <jtulach@netbeans.org>
2.5 */
2.6 public class StaticMethod {
2.7 + private static int cnt;
2.8 +
2.9 public static int sum(int x, int y) {
2.10 return x + y;
2.11 }
2.12 @@ -57,4 +59,10 @@
2.13 }
2.14 return res;
2.15 }
2.16 + public static int inc4() {
2.17 + cnt++;
2.18 + cnt+=2;
2.19 + cnt++;
2.20 + return cnt;
2.21 + }
2.22 }
3.1 --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Sat Sep 15 22:12:49 2012 +0200
3.2 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Sun Sep 16 07:28:57 2012 +0200
3.3 @@ -121,6 +121,13 @@
3.4 3
3.5 );
3.6 }
3.7 + @Test public void inc4() throws Exception {
3.8 + assertExec(
3.9 + "It will be 4",
3.10 + "org_apidesign_java4browser_StaticMethod_inc4I",
3.11 + Double.valueOf(4)
3.12 + );
3.13 + }
3.14
3.15 private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
3.16 StringBuilder sb = new StringBuilder();