Give the UiBinder safehtml warning once per compile.

Review at http://gwt-code-reviews.appspot.com/1434801

Review by: hermes@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10147 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/uibinder/elementparsers/DockPanelParser.java b/user/src/com/google/gwt/uibinder/elementparsers/DockPanelParser.java
index 8151147..7e66ece 100644
--- a/user/src/com/google/gwt/uibinder/elementparsers/DockPanelParser.java
+++ b/user/src/com/google/gwt/uibinder/elementparsers/DockPanelParser.java
@@ -43,9 +43,6 @@
 
   public void parse(XMLElement elem, String fieldName, JClassType type,
       UiBinderWriter writer) throws UnableToCompleteException {
-    writer.warn(elem,
-        "%1$s:%2$s is deprecated. Use the %1$s:DockLayoutPanel instead.",
-        elem.getPrefix(), elem.getLocalName());
     // Parse children.
     for (XMLElement child : elem.consumeChildElements()) {
       // DockPanel can only contain Dock elements.
diff --git a/user/src/com/google/gwt/uibinder/elementparsers/StackPanelParser.java b/user/src/com/google/gwt/uibinder/elementparsers/StackPanelParser.java
index 1c08ffc..679a265 100644
--- a/user/src/com/google/gwt/uibinder/elementparsers/StackPanelParser.java
+++ b/user/src/com/google/gwt/uibinder/elementparsers/StackPanelParser.java
@@ -29,9 +29,6 @@
 
   public void parse(XMLElement elem, String fieldName, JClassType type,
       UiBinderWriter writer) throws UnableToCompleteException {
-    writer.warn(elem,
-        "%1$s:%2$s is deprecated. Use the %1$s:StackLayoutPanel instead.",
-        elem.getPrefix(), elem.getLocalName());
     // Parse children.
     for (XMLElement child : elem.consumeChildElements()) {
 
diff --git a/user/src/com/google/gwt/uibinder/elementparsers/TabPanelParser.java b/user/src/com/google/gwt/uibinder/elementparsers/TabPanelParser.java
index f5c4730..c7e45f6 100644
--- a/user/src/com/google/gwt/uibinder/elementparsers/TabPanelParser.java
+++ b/user/src/com/google/gwt/uibinder/elementparsers/TabPanelParser.java
@@ -30,9 +30,6 @@
 
   public void parse(XMLElement panelElem, String fieldName, JClassType type,
       UiBinderWriter writer) throws UnableToCompleteException {
-    writer.warn(panelElem,
-        "%1$s:%2$s is deprecated. Use the %1$s:TabLayoutPanel instead.",
-        panelElem.getPrefix(), panelElem.getLocalName());
     // Parse children.
     for (XMLElement tabElem : panelElem.consumeChildElements()) {
       // TabPanel can only contain Tab elements.
diff --git a/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java b/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java
index ede0383..b8175e9 100644
--- a/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java
+++ b/user/src/com/google/gwt/uibinder/rebind/UiBinderGenerator.java
@@ -49,6 +49,8 @@
 
   private static final String XSS_SAFE_CONFIG_PROPERTY = "UiBinder.useSafeHtmlTemplates";
   private static final String LAZY_WIDGET_BUILDERS_PROPERTY = "UiBinder.useLazyWidgetBuilders";
+  
+  private static boolean gaveSafeHtmlWarning;
 
   /**
    * Given a UiBinder interface, return the path to its ui.xml file, suitable
@@ -214,10 +216,11 @@
     Boolean rtn = extractConfigProperty(
         logger, propertyOracle, XSS_SAFE_CONFIG_PROPERTY, true);
 
-    if (!rtn) {
+    if (!gaveSafeHtmlWarning && !rtn) {
       logger.warn("Configuration property %s is false! UiBinder SafeHtml integration is off, "
           + "leaving your users more vulnerable to cross-site scripting attacks.",
           XSS_SAFE_CONFIG_PROPERTY);
+      gaveSafeHtmlWarning = true;
     }
     return rtn;
   }