diff -r 4a1398eff4fb -r 234fea368401 rt/vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java
--- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java Sat Apr 26 21:30:06 2014 +0200
+++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java Sun Apr 27 22:40:17 2014 +0200
@@ -19,7 +19,6 @@
import java.io.IOException;
import java.io.InputStream;
-import java.net.URL;
import org.apidesign.bck2brwsr.core.Exported;
/** Build your own virtual machine! Use methods in this class to generate
@@ -57,14 +56,16 @@
private final ObfuscationLevel level;
private final StringArray rootcls;
private final StringArray classes;
+ private final StringArray resources;
private final Resources res;
private final boolean extension;
- private Bck2Brwsr(ObfuscationLevel level, StringArray rootcls, StringArray classes, Resources resources, boolean extension) {
+ private Bck2Brwsr(ObfuscationLevel level, StringArray rootcls, StringArray classes, StringArray resources, Resources res, boolean extension) {
this.level = level;
this.rootcls = rootcls;
this.classes = classes;
- this.res = resources;
+ this.resources = resources;
+ this.res = res;
this.extension = extension;
}
@@ -102,7 +103,7 @@
* @since 0.5
*/
public static Bck2Brwsr newCompiler() {
- return new Bck2Brwsr(ObfuscationLevel.NONE, new StringArray(), new StringArray(), null, false);
+ return new Bck2Brwsr(ObfuscationLevel.NONE, new StringArray(), new StringArray(), new StringArray(), null, false);
}
/** Adds additional classes
@@ -122,7 +123,7 @@
if (classes.length == 0) {
return this;
} else {
- return new Bck2Brwsr(level, rootcls.addAndNew(classes), this.classes, res,
+ return new Bck2Brwsr(level, rootcls.addAndNew(classes), this.classes, resources, res,
extension);
}
}
@@ -142,11 +143,32 @@
if (classes.length == 0) {
return this;
} else {
- return new Bck2Brwsr(level, rootcls, this.classes.addAndNew(classes), res,
+ return new Bck2Brwsr(level, rootcls, this.classes.addAndNew(classes), resources, res,
extension);
}
}
+ /** These resources should be made available in the compiled file in
+ * binary form. These resources can then be loaded
+ * by {@link ClassLoader#getResource(java.lang.String)} and similar
+ * methods.
+ *
+ * @param resources names of the resources to be loaded by {@link Resources#get(java.lang.String)}
+ * @return new instance of the Bck2Brwsr compiler which inherits
+ * all values from this
just adds few more resource names
+ * for processing
+ * @since 0.9
+ */
+ public Bck2Brwsr addResources(String... resources) {
+ if (resources.length == 0) {
+ return this;
+ } else {
+ return new Bck2Brwsr(level, rootcls, this.classes,
+ this.resources.addAndNew(resources), res, extension
+ );
+ }
+ }
+
/** Changes the obfuscation level for the compiler by creating new instance
* which inherits all values from this
and adjust the level
* of obfuscation.
@@ -156,7 +178,7 @@
* @since 0.5
*/
public Bck2Brwsr obfuscation(ObfuscationLevel level) {
- return new Bck2Brwsr(level, rootcls, classes, res, extension);
+ return new Bck2Brwsr(level, rootcls, classes, resources, res, extension);
}
/** A way to change the provider of additional resources (classes) for the
@@ -168,7 +190,7 @@
* @since 0.5
*/
public Bck2Brwsr resources(Resources res) {
- return new Bck2Brwsr(level, rootcls, classes, res, extension);
+ return new Bck2Brwsr(level, rootcls, classes, resources, res, extension);
}
/** Should one generate a library? By default the system generates
@@ -183,7 +205,7 @@
* @since 0.9
*/
public Bck2Brwsr library(boolean library) {
- return new Bck2Brwsr(level, rootcls, classes, res, library);
+ return new Bck2Brwsr(level, rootcls, classes, resources, res, library);
}
/** A way to change the provider of additional resources (classes) for the
@@ -205,10 +227,9 @@
* @since 0.5
*/
public void generate(Appendable out) throws IOException {
- Resources r = res != null ? res : new LdrRsrcs(Bck2Brwsr.class.getClassLoader());
if (level != ObfuscationLevel.NONE) {
try {
- ClosureWrapper.produceTo(out, level, r, rootcls, classes, extension);
+ ClosureWrapper.produceTo(out, level, this);
return;
} catch (IOException ex) {
throw ex;
@@ -218,7 +239,27 @@
}
}
- VM.compile(out, r, rootcls, classes, extension);
+ VM.compile(out, this);
+ }
+
+ //
+ // Internal getters
+ //
+
+ Resources getResources() {
+ return res != null ? res : new LdrRsrcs(Bck2Brwsr.class.getClassLoader());
+ }
+
+ String[] allClasses() {
+ return classes.addAndNew(rootcls.toArray()).toArray();
+ }
+
+ StringArray rootClasses() {
+ return rootcls;
+ }
+
+ boolean isExtension() {
+ return extension;
}
/** Provider of resources (classes and other files). The