Skip to content

Commit da49325

Browse files
author
jossonsmith
committed
Search path for "java" and "swt" by peeking path of j2slib.z.js.
Now pure JavaScript developer can write HTML in much simpler way: <script type="text/javascript" src="j2slib/j2slib.z.js"></script> <script type="text/javascript"> ClazzLoader.loadAppMain ("org.eclipse.swt.examples.helloworld.HelloWorld1"); </script> <script type="text/javascript"> And the former way may be: <script type="text/javascript" src="j2slib/j2slib.z.js"></script> <script type="text/javascript"> ClazzLoader.packageClasspath ("java", "j2slib/", true); ClazzLoader.packageClasspath ("org.eclipse.swt", "j2slib/", true); ClazzLoader.setPrimaryFolder ("bin"); ClazzLoader.packageClasspath (["$wt.examples.addressbook", "$.imageanalyzer", "$.clipboard", "$.browserexample", "$.paint", "$.hoverhelp", "$wt.examples", "$wt.examples.layoutexample", "$.dnd", "$.texteditor", "$.javaviewer", "$.helloworld", "$.graphics", "$.fileviewer", "$.controlexample"], "bin/"); ClazzLoader.loadClass ("org.eclipse.swt.examples.helloworld.HelloWorld1", function () { org.eclipse.swt.examples.helloworld.HelloWorld1.main([]); }); </script>
1 parent 6f53c3f commit da49325

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

sources/net.sf.j2s.java.core/src/java/lang/ClassLoader.js

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ if (window["Clazz"] != null && Clazz.isClassDefined) {
136136
return ClazzLoader.definedClasses[clazzName] == true;
137137
};
138138
}
139+
140+
/*
141+
* binaryFolders will be used for ResourceBundle to check *.properties
142+
* files. The default should always be "bin/"!
143+
*/
139144
if (window["Clazz"] != null && Clazz.binaryFolders != null) {
140145
ClazzLoader.binaryFolders = Clazz.binaryFolders;
141146
} else {
@@ -1773,6 +1778,45 @@ ClazzLoader.runtimeKeyClass = "java.lang.String";
17731778
/* private */
17741779
ClazzLoader.queueBe4KeyClazz = new Array ();
17751780

1781+
/**
1782+
* Return J2SLib base path from existed SCRIPT src attribute.
1783+
*/
1784+
/* private */
1785+
/*-# getJ2SLibBase -> gLB #-*/
1786+
ClazzLoader.getJ2SLibBase = function () {
1787+
var ss = document.getElementsByTagName ("SCRIPT");
1788+
for (var i = 0; i < ss.length; i++) {
1789+
var src = ss[i].src;
1790+
var idx = src.indexOf ("j2slib.z.js"); // consider it as key string!
1791+
if (idx != -1) {
1792+
return src.substring (0, idx);
1793+
}
1794+
idx = src.indexOf ("java/lang/ClassLoader.js"); // may be not packed yet
1795+
if (idx != -1) {
1796+
return src.substring (0, idx);
1797+
}
1798+
}
1799+
return null;
1800+
};
1801+
1802+
/*
1803+
* Check whether given package's classpath is setup or not.
1804+
* Only "java" and "org.eclipse.swt" are accepted in argument.
1805+
*/
1806+
/* private */
1807+
/*-# assurePackageClasspath -> acp #-*/
1808+
ClazzLoader.assurePackageClasspath = function (pkg) {
1809+
var r = window[pkg + ".registered"];
1810+
if (r != false && r != true) {
1811+
window[pkg + ".registered"] = false;
1812+
var base = ClazzLoader.getJ2SLibBase ();
1813+
if (base == null) {
1814+
base = "http://archive.java2script.org/1.0.0/"; // only after 1.0.0
1815+
}
1816+
ClazzLoader.packageClasspath (pkg, base, true);
1817+
}
1818+
};
1819+
17761820
/**
17771821
* Load the given class ant its related classes.
17781822
*/
@@ -1781,6 +1825,17 @@ ClazzLoader.loadClass = function (name, optionalsLoaded, forced, async) {
17811825
if (typeof optionalsLoaded == "boolean") {
17821826
return Clazz.evalType (name);
17831827
}
1828+
/*
1829+
* Make sure that
1830+
* ClazzLoader.packageClasspath ("java", base, true);
1831+
* is called before any ClazzLoader#loadClass is called.
1832+
*/
1833+
ClazzLoader.assurePackageClasspath ("java");
1834+
var swtPkg = "org.eclipse.swt";
1835+
if (name.indexOf (swtPkg) == 0 || name.indexOf ("$wt") == 0) {
1836+
ClazzLoader.assurePackageClasspath (swtPkg);
1837+
}
1838+
17841839
ClazzLoader.keepOnLoading = true;
17851840
if (!forced && ((ClazzLoader.pkgRefCount != 0
17861841
&& name.lastIndexOf (".package") != name.length - 8)
@@ -1835,6 +1890,35 @@ ClazzLoader.loadClass = function (name, optionalsLoaded, forced, async) {
18351890

18361891
};
18371892

1893+
/**
1894+
* Load the application by the given class name and run its static main method.
1895+
*/
1896+
/* public */
1897+
$w$ = ClazzLoader.loadAppMain = function (clazz, args) {
1898+
if (clazz == null) {
1899+
return ;
1900+
}
1901+
var clazzStr = clazz;
1902+
if (clazz.charAt (0) == '$') {
1903+
clazzStr = "org.eclipse.s" + clazz.substring (1);
1904+
}
1905+
var idx = -1;
1906+
if ((idx = clazzStr.indexOf ("@")) != -1) {
1907+
ClazzLoader.setPrimaryFolder (clazzStr.substring (idx + 1));
1908+
clazzStr = clazzStr.substring (0, idx);
1909+
}
1910+
var agmts = args;
1911+
if (agmts == null || !(agmts instanceof Array)) {
1912+
agmts = [];
1913+
}
1914+
var afterLoaded = (function (clazzName, argv) {
1915+
return function () {
1916+
Clazz.evalType (clazzName).main (argv);
1917+
};
1918+
}) (clazzStr, agmts);
1919+
ClazzLoader.loadClass (clazzStr, afterLoaded);
1920+
};
1921+
18381922
/* private */
18391923
ClazzLoader.runtimeLoaded = function () {
18401924
if (ClazzLoader.pkgRefCount != 0

0 commit comments

Comments
 (0)