# HG changeset patch # User Jaroslav Tulach # Date 1347773337 -7200 # Node ID 0cab1e07e677b75f2bf241351b3c8aca74ab3975 # Parent 82772c96ec57dfc5c1b3e7fee4edf3292695ef37 Support for static integer fields diff -r 82772c96ec57 -r 0cab1e07e677 src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Sat Sep 15 22:12:49 2012 +0200 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Sun Sep 16 07:28:57 2012 +0200 @@ -30,6 +30,7 @@ import org.netbeans.modules.classfile.Code; import org.netbeans.modules.classfile.Method; import org.netbeans.modules.classfile.Parameter; +import org.netbeans.modules.classfile.Variable; /** Translator of the code inside class files to JavaScript. * @@ -58,6 +59,11 @@ compiler.generateStaticMethod(m); } } + for (Variable v : jc.getVariables()) { + if (v.isStatic()) { + compiler.generateStaticField(v); + } + } } private void generateStaticMethod(Method m) throws IOException { out.append("\nfunction ").append( @@ -369,6 +375,22 @@ i += 2; break; } + case bc_getstatic: { + int indx = readIntArg(byteCodes, i); + CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx); + out.append("stack.push(").append(fi.getClassName().getExternalName().replace('.', '_')); + out.append('_').append(fi.getFieldName()).append(");"); + i += 2; + break; + } + case bc_putstatic: { + int indx = readIntArg(byteCodes, i); + CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx); + out.append(fi.getClassName().getExternalName().replace('.', '_')); + out.append('_').append(fi.getFieldName()).append(" = stack.pop();"); + i += 2; + break; + } } out.append(" /*"); @@ -446,4 +468,10 @@ } return cnt; } + + private void generateStaticField(Variable v) throws IOException { + out.append("\nvar ") + .append(jc.getName().getExternalName().replace('.', '_')) + .append('_').append(v.getName()).append(" = 0;"); + } } diff -r 82772c96ec57 -r 0cab1e07e677 src/test/java/org/apidesign/java4browser/StaticMethod.java --- a/src/test/java/org/apidesign/java4browser/StaticMethod.java Sat Sep 15 22:12:49 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/StaticMethod.java Sun Sep 16 07:28:57 2012 +0200 @@ -22,6 +22,8 @@ * @author Jaroslav Tulach */ public class StaticMethod { + private static int cnt; + public static int sum(int x, int y) { return x + y; } @@ -57,4 +59,10 @@ } return res; } + public static int inc4() { + cnt++; + cnt+=2; + cnt++; + return cnt; + } } diff -r 82772c96ec57 -r 0cab1e07e677 src/test/java/org/apidesign/java4browser/StaticMethodTest.java --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Sat Sep 15 22:12:49 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Sun Sep 16 07:28:57 2012 +0200 @@ -121,6 +121,13 @@ 3 ); } + @Test public void inc4() throws Exception { + assertExec( + "It will be 4", + "org_apidesign_java4browser_StaticMethod_inc4I", + Double.valueOf(4) + ); + } private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { StringBuilder sb = new StringBuilder();