1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Wed Sep 19 19:29:05 2012 +0200
1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Wed Sep 19 19:57:45 2012 +0200
1.3 @@ -26,6 +26,7 @@
1.4 import org.netbeans.modules.classfile.CPFieldInfo;
1.5 import org.netbeans.modules.classfile.CPMethodInfo;
1.6 import org.netbeans.modules.classfile.ClassFile;
1.7 +import org.netbeans.modules.classfile.ClassName;
1.8 import org.netbeans.modules.classfile.Code;
1.9 import org.netbeans.modules.classfile.Method;
1.10 import org.netbeans.modules.classfile.Parameter;
1.11 @@ -65,9 +66,11 @@
1.12 compiler.generateStaticField(v);
1.13 }
1.14 }
1.15 + out.append("function java_lang_Object(){}\n"); // XXX temporary
1.16 out.append("function java_lang_Object_consV(self){}\n"); // XXX temporary
1.17
1.18 - out.append("\nfunction ").append(jc.getName().getExternalName().replace('.', '_'));
1.19 + final String className = jc.getName().getExternalName().replace('.', '_');
1.20 + out.append("\nfunction ").append(className);
1.21 out.append("() {");
1.22 for (Method m : jc.getMethods()) {
1.23 if (!m.isStatic()) {
1.24 @@ -80,6 +83,11 @@
1.25 }
1.26 }
1.27 out.append("\n}");
1.28 + ClassName sc = jc.getSuperClass();
1.29 + if (sc != null) {
1.30 + out.append("\n ").append(className)
1.31 + .append(".prototype = new ").append(sc.getExternalName().replace('.', '_'));
1.32 + }
1.33 }
1.34 private void generateStaticMethod(Method m) throws IOException {
1.35 out.append("\nfunction ").append(
2.1 --- a/src/test/java/org/apidesign/java4browser/Instance.java Wed Sep 19 19:29:05 2012 +0200
2.2 +++ b/src/test/java/org/apidesign/java4browser/Instance.java Wed Sep 19 19:57:45 2012 +0200
2.3 @@ -43,7 +43,7 @@
2.4 return (i.i - i.b) * i.d;
2.5 }
2.6 public static byte virtualBytes() {
2.7 - Instance i = new Instance();
2.8 + Instance i = new InstanceSub(7, 2.2d);
2.9 i.setByte((byte)0x0a);
2.10 return i.getByte();
2.11 }
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/src/test/java/org/apidesign/java4browser/InstanceSub.java Wed Sep 19 19:57:45 2012 +0200
3.3 @@ -0,0 +1,20 @@
3.4 +/*
3.5 + * To change this template, choose Tools | Templates
3.6 + * and open the template in the editor.
3.7 + */
3.8 +package org.apidesign.java4browser;
3.9 +
3.10 +/**
3.11 + *
3.12 + * @author Jaroslav Tulach <jtulach@netbeans.org>
3.13 + */
3.14 +public class InstanceSub extends Instance {
3.15 + public InstanceSub(int i, double d) {
3.16 + super(i, d);
3.17 + }
3.18 +
3.19 + @Override
3.20 + public void setByte(byte b) {
3.21 + super.setByte((byte) (b + 1));
3.22 + }
3.23 +}
4.1 --- a/src/test/java/org/apidesign/java4browser/InstanceTest.java Wed Sep 19 19:29:05 2012 +0200
4.2 +++ b/src/test/java/org/apidesign/java4browser/InstanceTest.java Wed Sep 19 19:57:45 2012 +0200
4.3 @@ -37,15 +37,15 @@
4.4 }
4.5 @Test public void verifyInstanceMethods() throws Exception {
4.6 assertExec(
4.7 - "Should be ten",
4.8 + "Should be eleven as we invoke overwritten method",
4.9 "org_apidesign_java4browser_Instance_virtualBytesB",
4.10 - Double.valueOf(10)
4.11 + Double.valueOf(11)
4.12 );
4.13 }
4.14
4.15 private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
4.16 StringBuilder sb = new StringBuilder();
4.17 - Invocable i = StaticMethodTest.compileClass("Instance.class", sb);
4.18 + Invocable i = StaticMethodTest.compileClass(sb, "Instance.class", "InstanceSub.class");
4.19
4.20 Object ret = null;
4.21 try {
5.1 --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Wed Sep 19 19:29:05 2012 +0200
5.2 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Wed Sep 19 19:57:45 2012 +0200
5.3 @@ -131,7 +131,7 @@
5.4
5.5 private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
5.6 StringBuilder sb = new StringBuilder();
5.7 - Invocable i = compileClass("StaticMethod.class", sb);
5.8 + Invocable i = compileClass(sb, "StaticMethod.class");
5.9
5.10 Object ret = null;
5.11 try {
5.12 @@ -151,13 +151,15 @@
5.13
5.14 }
5.15
5.16 - static Invocable compileClass(String name, StringBuilder sb) throws ScriptException, IOException {
5.17 - InputStream is = StaticMethodTest.class.getResourceAsStream(name);
5.18 - assertNotNull(is, "Class file found");
5.19 - if (sb == null) {
5.20 - sb = new StringBuilder();
5.21 + static Invocable compileClass(StringBuilder sb, String... names) throws ScriptException, IOException {
5.22 + for (String name : names) {
5.23 + InputStream is = StaticMethodTest.class.getResourceAsStream(name);
5.24 + assertNotNull(is, "Class file found");
5.25 + if (sb == null) {
5.26 + sb = new StringBuilder();
5.27 + }
5.28 + ByteCodeToJavaScript.compile(name, is, sb);
5.29 }
5.30 - ByteCodeToJavaScript.compile(name, is, sb);
5.31 ScriptEngineManager sem = new ScriptEngineManager();
5.32 ScriptEngine js = sem.getEngineByExtension("js");
5.33 try {