aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>2013-12-09 04:16:24 +0100
committerManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>2013-12-09 04:16:24 +0100
commit95c5b94fedde8ed6a563645df989c8293288a80f (patch)
tree9ce41c734064244e1e554a241faae453dda1438e
parent954aad695f838e3f1ecc0b9003df20633dd0466c (diff)
downloadgwtquery-95c5b94fedde8ed6a563645df989c8293288a80f.tar.gz
gwtquery-95c5b94fedde8ed6a563645df989c8293288a80f.zip
Allow custom replacers in jsni-bundle anotations
-rw-r--r--gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsniBundle.java36
-rw-r--r--gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsniBundleGenerator.java7
2 files changed, 32 insertions, 11 deletions
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsniBundle.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsniBundle.java
index 14b3f1f2..a0a77e2e 100644
--- a/gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsniBundle.java
+++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/builders/JsniBundle.java
@@ -15,7 +15,7 @@
*/
package com.google.gwt.query.client.builders;
-import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.ElementType.METHOD;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@@ -23,11 +23,11 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * A tag interface that is used in the generation of jsni bundles.
- *
+ * A tag interface that is used in the generation of jsni bundles.
+ *
* A jsni-bundle is a class with jsni methods whose content is taken from
* external handwritten javascript files.
- *
+ *
* The goals of using this technique are:
* - Use pure javascript files so as we can use IDEs for editing, formating etc,
* instead of dealing with code in comment blocks.
@@ -65,13 +65,13 @@ import java.lang.annotation.Target;
* </pre>
*/
public interface JsniBundle {
-
+
/**
* Annotation to mark inclusion of third-party libraries.
- *
+ *
* The content is wrapped with an inner javascript function to set
* the context to the document window instead of the iframe where GWT
- * code is run.
+ * code is run.
*/
@Target({METHOD})
@Retention(RetentionPolicy.RUNTIME)
@@ -92,12 +92,19 @@ public interface JsniBundle {
* Fragment of code to include after the external javascript has been
* written.
*/
- String postpend() default "\n}.apply($wnd, [$wnd, $doc, $wnd.console]));";
+ String postpend() default "\n}.apply($wnd, [$wnd, $doc, $wnd.console]));";
+
+ /**
+ * Regular expression to run over the javascript code to import.
+ *
+ * You should add pairs of values with the same syntax than String.replaceAll.
+ */
+ String[] replace() default {};
}
-
+
/**
* Annotation to mark inclusion of jsni code writen in external js files.
- *
+ *
* The content is not wrapped by default, so the developer has the responsibility
* to return the suitable value and to handle correctly parameters.
*/
@@ -120,6 +127,13 @@ public interface JsniBundle {
* Fragment of code to include after the external javascript has been
* written.
*/
- String postpend() default "";
+ String postpend() default "";
+
+ /**
+ * Regular expression to run over the javascript code to import.
+ *
+ * You should add pairs of values with the same syntax than String.replaceAll.
+ */
+ String[] replace() default {};
}
}
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsniBundleGenerator.java b/gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsniBundleGenerator.java
index a1520304..66ed45a4 100644
--- a/gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsniBundleGenerator.java
+++ b/gwtquery-core/src/main/java/com/google/gwt/query/rebind/JsniBundleGenerator.java
@@ -75,16 +75,19 @@ public class JsniBundleGenerator extends Generator {
for (JMethod method : clazz.getMethods()) {
LibrarySource librarySource = method.getAnnotation(LibrarySource.class);
String value, prepend, postpend;
+ String replace[];
if (librarySource != null) {
value = librarySource.value();
prepend = librarySource.prepend();
postpend = librarySource.postpend();
+ replace = librarySource.replace();
} else {
MethodSource methodSource = method.getAnnotation(MethodSource.class);
if (methodSource != null) {
value = methodSource.value();
prepend = methodSource.prepend();
postpend = methodSource.postpend();
+ replace = methodSource.replace();
} else {
continue;
}
@@ -97,6 +100,10 @@ public class JsniBundleGenerator extends Generator {
// breaking java syntax.
String jsni = parseJavascriptSource(content);
+ for (int i = 0; i < replace.length - 1; i += 2) {
+ jsni = jsni.replaceAll(replace[i], replace[i+1]);
+ }
+
pw.println(method.toString().replace("abstract", "native") + "/*-{");
pw.println(prepend);
pw.println(jsni);