.
diff --git a/examples/sample.js.debug/.classpath b/examples/sample.js.debug/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/examples/sample.js.debug/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/sample.js.debug/.project b/examples/sample.js.debug/.project
new file mode 100644
index 0000000..0a8aa6a
--- /dev/null
+++ b/examples/sample.js.debug/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>sample.debug</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/examples/sample.js.debug/.settings/org.eclipse.jdt.core.prefs b/examples/sample.js.debug/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9466dda
--- /dev/null
+++ b/examples/sample.js.debug/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Aug 26 11:01:39 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/examples/sample.js.debug/.settings/org.eclipse.pde.core.prefs b/examples/sample.js.debug/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..7aca589
--- /dev/null
+++ b/examples/sample.js.debug/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Wed Aug 26 11:01:39 EDT 2009
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/examples/sample.js.debug/META-INF/MANIFEST.MF b/examples/sample.js.debug/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9180c12
--- /dev/null
+++ b/examples/sample.js.debug/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Debug Sample
+Bundle-SymbolicName: sample.js.debug
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: sample.js.debug.Activator
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Import-Package: org.eclipse.e4.internal.languages.javascript,
+ org.eclipse.e4.languages.javascript,
+ org.mozilla.javascript,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.util.tracker;version="1.4.2"
diff --git a/examples/sample.js.debug/build.properties b/examples/sample.js.debug/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/examples/sample.js.debug/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/examples/sample.js.debug/scripts/bundle.json b/examples/sample.js.debug/scripts/bundle.json
new file mode 100644
index 0000000..cad88d2
--- /dev/null
+++ b/examples/sample.js.debug/scripts/bundle.json
@@ -0,0 +1,5 @@
+{
+"Bundle-SymbolicName":"sample.js.debug",
+"Bundle-Version":"1.0",
+"Bundle-ScriptPath":"script.js"
+}
\ No newline at end of file
diff --git a/examples/sample.js.debug/scripts/script.js b/examples/sample.js.debug/scripts/script.js
new file mode 100644
index 0000000..ba70fb8
--- /dev/null
+++ b/examples/sample.js.debug/scripts/script.js
@@ -0,0 +1,16 @@
+var test = function() {
+ var clazz = Packages.javascript.dummy.Activator;
+ return clazz.TEST;
+};
+var v = test();
+debugger;
+
+var y = test();
+
+var z = test();
+
+var test2 = function() {
+ debugger;
+ var clazz = Packages.javascript.dummy.Activator;
+ return clazz.TEST;
+};
\ No newline at end of file
diff --git a/examples/sample.js.debug/src/sample/js/debug/Activator.java b/examples/sample.js.debug/src/sample/js/debug/Activator.java
new file mode 100644
index 0000000..74fc73e
--- /dev/null
+++ b/examples/sample.js.debug/src/sample/js/debug/Activator.java
@@ -0,0 +1,93 @@
+package sample.js.debug;
+
+import java.net.URL;
+import org.eclipse.e4.internal.languages.javascript.JSFrameworkImpl;
+import org.eclipse.e4.languages.javascript.JSBundle;
+import org.eclipse.e4.languages.javascript.JSBundleException;
+import org.eclipse.e4.languages.javascript.JSFramework;
+import org.mozilla.javascript.Callable;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.ContextAction;
+import org.mozilla.javascript.Scriptable;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+public class Activator implements BundleActivator, ServiceTrackerCustomizer {
+
+ public static final String TEST = "test";
+
+ private BundleContext context;
+ private ServiceTracker frameworkTracker;
+ private JSFramework framework;
+
+ private JSBundle jsBundle;
+
+ public void start(BundleContext bundleContext) throws Exception {
+ this.context = bundleContext;
+
+ frameworkTracker = new ServiceTracker(context, JSFramework.class.getName(), this);
+ frameworkTracker.open();
+
+
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception {
+ frameworkTracker.close();
+ frameworkTracker = null;
+ context = null;
+ }
+
+ public Object addingService(ServiceReference reference) {
+ framework = (JSFramework) context.getService(reference);
+
+ Bundle bundle = context.getBundle();
+ URL jsBundleEntry = bundle.getEntry("scripts/bundle.json");
+ if (jsBundleEntry == null)
+ return null;
+
+
+ try {
+ jsBundle =((JSFrameworkImpl)framework).installBundle(jsBundleEntry.toString(), bundle);
+ } catch (JSBundleException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ framework.resolve();
+ try {
+ testDebugSanityInstallResolveBundle();
+ } catch (JSBundleException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return framework;
+ }
+
+ public void modifiedService(ServiceReference reference, Object service) {
+ }
+
+ public void removedService(ServiceReference reference, Object service) {
+ jsBundle.uninstall();
+ framework.resolve();
+ }
+
+ public void testDebugSanityInstallResolveBundle() throws JSBundleException {
+
+ final Scriptable scope = jsBundle.getScope();
+ Object obj = scope.get("test2", scope);
+ final Callable test = (Callable) obj;
+
+ jsBundle.call(new ContextAction() {
+ public Object run(Context cx) {
+ Object result = test.call(cx, scope, scope, new Object[0]);
+ Object javaResult = Context.jsToJava(result, String.class);
+ return javaResult;
+ }
+ });
+ }
+
+}
diff --git a/examples/sample.js.fib/.classpath b/examples/sample.js.fib/.classpath
new file mode 100644
index 0000000..2fbb7a2
--- /dev/null
+++ b/examples/sample.js.fib/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/sample.js.fib/.project b/examples/sample.js.fib/.project
new file mode 100644
index 0000000..abaef24
--- /dev/null
+++ b/examples/sample.js.fib/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>sample.js.fib</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/examples/sample.js.fib/.settings/org.eclipse.jdt.core.prefs b/examples/sample.js.fib/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..348ce17
--- /dev/null
+++ b/examples/sample.js.fib/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Tue Feb 17 09:34:02 EST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/examples/sample.js.fib/.settings/org.eclipse.pde.core.prefs b/examples/sample.js.fib/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..4b2a050
--- /dev/null
+++ b/examples/sample.js.fib/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Tue Feb 17 09:34:38 EST 2009
+eclipse.preferences.version=1
+pluginProject.extensions=true
+resolve.requirebundle=false
diff --git a/examples/sample.js.fib/META-INF/MANIFEST.MF b/examples/sample.js.fib/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..499b5cc
--- /dev/null
+++ b/examples/sample.js.fib/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Fibonacci
+Bundle-SymbolicName: sample.js.fib;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+JavaScript-Bundle: scripts/bundle.json
+
diff --git a/examples/sample.js.fib/build.properties b/examples/sample.js.fib/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/examples/sample.js.fib/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/examples/sample.js.fib/scripts/bundle.json b/examples/sample.js.fib/scripts/bundle.json
new file mode 100644
index 0000000..6e13652
--- /dev/null
+++ b/examples/sample.js.fib/scripts/bundle.json
@@ -0,0 +1,6 @@
+{
+"Bundle-SymbolicName":"sample.js.fib",
+"Bundle-Version":"1.0",
+"Bundle-ScriptPath":"fib.js",
+"Export-Package":"sample;version=1.0.0"
+}
\ No newline at end of file
diff --git a/examples/sample.js.fib/scripts/fib.js b/examples/sample.js.fib/scripts/fib.js
new file mode 100644
index 0000000..9adabe0
--- /dev/null
+++ b/examples/sample.js.fib/scripts/fib.js
@@ -0,0 +1,11 @@
+debugger;
+var sample = sample || {};
+sample.fib = function fib(n) {
+ if (n==0)
+ return 0;
+
+ if (n==1)
+ return 1;
+
+ return fib(n - 1) + fib(n - 2);
+};
diff --git a/examples/sample.js.servlet/.classpath b/examples/sample.js.servlet/.classpath
new file mode 100644
index 0000000..2fbb7a2
--- /dev/null
+++ b/examples/sample.js.servlet/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/sample.js.servlet/.project b/examples/sample.js.servlet/.project
new file mode 100644
index 0000000..bcb7875
--- /dev/null
+++ b/examples/sample.js.servlet/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>sample.js.servlet</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/examples/sample.js.servlet/.settings/org.eclipse.jdt.core.prefs b/examples/sample.js.servlet/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..348ce17
--- /dev/null
+++ b/examples/sample.js.servlet/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Tue Feb 17 09:34:02 EST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/examples/sample.js.servlet/.settings/org.eclipse.pde.core.prefs b/examples/sample.js.servlet/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..4b2a050
--- /dev/null
+++ b/examples/sample.js.servlet/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Tue Feb 17 09:34:38 EST 2009
+eclipse.preferences.version=1
+pluginProject.extensions=true
+resolve.requirebundle=false
diff --git a/examples/sample.js.servlet/META-INF/MANIFEST.MF b/examples/sample.js.servlet/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..81fead2
--- /dev/null
+++ b/examples/sample.js.servlet/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Servlet
+Bundle-SymbolicName: sample.js.servlet;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Require-Bundle: org.eclipse.e4.languages.javascript.registry;bundle-version="0.9.0",
+ org.eclipse.equinox.http.registry;bundle-version="1.0.100"
+Import-Package: javax.servlet;version="2.5.0",
+ javax.servlet.http;version="2.5.0"
+JavaScript-Bundle: scripts/bundle.json
+
diff --git a/examples/sample.js.servlet/build.properties b/examples/sample.js.servlet/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/examples/sample.js.servlet/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/examples/sample.js.servlet/plugin.xml b/examples/sample.js.servlet/plugin.xml
new file mode 100644
index 0000000..322ccbf
--- /dev/null
+++ b/examples/sample.js.servlet/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.equinox.http.registry.servlets">
+ <servlet
+ alias="/jsFib"
+ class="org.eclipse.e4.languages.javascript.registry.JavaScriptFactory:FibonacciServlet">
+ </servlet>
+ </extension>
+</plugin>
diff --git a/examples/sample.js.servlet/scripts/bundle.json b/examples/sample.js.servlet/scripts/bundle.json
new file mode 100644
index 0000000..48d84bf
--- /dev/null
+++ b/examples/sample.js.servlet/scripts/bundle.json
@@ -0,0 +1,6 @@
+{
+"Bundle-SymbolicName":"sample.js.servlet.js",
+"Bundle-Version":"1.0",
+"Bundle-ScriptPath":"script.js",
+"Import-Package":"sample;version=1.0.0"
+}
\ No newline at end of file
diff --git a/examples/sample.js.servlet/scripts/script.js b/examples/sample.js.servlet/scripts/script.js
new file mode 100644
index 0000000..20582f1
--- /dev/null
+++ b/examples/sample.js.servlet/scripts/script.js
@@ -0,0 +1,21 @@
+
+function FibonacciServlet() {
+ var count = 0;
+ var o = {
+
+ "service" : function(req, resp) {
+ this.super$service(req, resp); // this is very important
+ },
+ "doGet" : function(req, resp) {
+ resp.getWriter().write("<html><body>");
+ resp.getWriter().write("<p>" + req.getMethod() + "</p>");
+ resp.getWriter().write("<p>Hello JavaScript World - count: " + (++count) + "</p>");
+ resp.getWriter().write("<p> Fibonacci (" + count + "): " + sample.fib(count) + "</p>");
+ resp.getWriter().write("</html></body>");
+ },
+ "getServletInfo" : function() {
+ return "JavaScript Servlet";
+ }
+ };
+ return new JavaAdapter(Packages.javax.servlet.http.HttpServlet, o);
+}
\ No newline at end of file