From 95c5b94fedde8ed6a563645df989c8293288a80f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Manuel=20Carrasco=20Mo=C3=B1ino?= Date: Mon, 9 Dec 2013 04:16:24 +0100 Subject: [PATCH] Allow custom replacers in jsni-bundle anotations --- .../gwt/query/client/builders/JsniBundle.java | 36 +++++++++++++------ .../gwt/query/rebind/JsniBundleGenerator.java | 7 ++++ 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; * */ 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); -- 2.39.5