Provides an escape hatch to avoid metadata-related deprecation warnings.

Issue: #2183
Suggested by: bruce
Review by: mmendez


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2789 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/TypeOracle.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/TypeOracle.java
index fdc7a64..d3dcd7a 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/TypeOracle.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/TypeOracle.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.generator.GenUtil;
 
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
@@ -640,12 +641,14 @@
   }
 
   private void consumeTypeArgMetaData(TreeLogger logger) {
-    logger = logger.branch(
-        TreeLogger.DEBUG,
-        "Scanning source for uses of the deprecated "
-            + TAG_TYPEARGS
-            + " javadoc annotation; please use Java parameterized types instead",
-        null);
+    if (GenUtil.warnAboutMetadata()) {
+      logger = logger.branch(
+          TreeLogger.DEBUG,
+          "Scanning source for uses of the deprecated "
+              + TAG_TYPEARGS
+              + " javadoc annotation; please use Java parameterized types instead",
+          null);
+    }
     consumeTypeArgMetaData(logger, getTypes());
   }
 
@@ -693,10 +696,12 @@
         String[] token = tokensArray[tokensArray.length - 1];
         JType resultingType = determineActualType(branch, fieldType, token, 0);
 
-        branch.log(TreeLogger.WARN, "Deprecated use of " + TAG_TYPEARGS
-            + " for field " + field.getName() + "; Please use "
-            + resultingType.getParameterizedQualifiedSourceName()
-            + " as the field's type", null);
+        if (GenUtil.warnAboutMetadata()) {
+          branch.log(TreeLogger.WARN, "Deprecated use of " + TAG_TYPEARGS
+              + " for field " + field.getName() + "; Please use "
+              + resultingType.getParameterizedQualifiedSourceName()
+              + " as the field's type", null);
+        }
 
         field.setType(resultingType);
       } catch (UnableToCompleteException e) {
@@ -747,10 +752,12 @@
                   param.getType(), tokens, 1);
               param.setType(resultingType);
 
-              branch.log(TreeLogger.WARN, "Deprecated use of " + TAG_TYPEARGS
-                  + " for parameter " + param.getName() + "; Please use "
-                  + resultingType.getParameterizedQualifiedSourceName()
-                  + " as the parameter's type", null);
+              if (GenUtil.warnAboutMetadata()) {
+                branch.log(TreeLogger.WARN, "Deprecated use of " + TAG_TYPEARGS
+                    + " for parameter " + param.getName() + "; Please use "
+                    + resultingType.getParameterizedQualifiedSourceName()
+                    + " as the parameter's type", null);
+              }
               paramsAlreadySet.add(param);
             } else {
               // This parameter type has already been set.
@@ -768,10 +775,12 @@
                   method.getReturnType(), tokens, 0);
               method.setReturnType(resultingType);
 
-              branch.log(TreeLogger.WARN, "Deprecated use of " + TAG_TYPEARGS
-                  + " for the return type; Please use "
-                  + resultingType.getParameterizedQualifiedSourceName()
-                  + " as the method's return type", null);
+              if (GenUtil.warnAboutMetadata()) {
+                branch.log(TreeLogger.WARN, "Deprecated use of " + TAG_TYPEARGS
+                    + " for the return type; Please use "
+                    + resultingType.getParameterizedQualifiedSourceName()
+                    + " as the method's return type", null);
+              }
               returnTypeHandled = true;
             } else {
               // The return type has already been set.
diff --git a/dev/core/src/com/google/gwt/dev/generator/GenUtil.java b/dev/core/src/com/google/gwt/dev/generator/GenUtil.java
new file mode 100644
index 0000000..4a70da7
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/generator/GenUtil.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2008 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dev.generator;
+
+/**
+ * Utility methods for generators to use.
+ */
+public class GenUtil {
+
+  /**
+   * If <code>true</code>, the default, generators should warn when a client
+   * uses old-style javadoc metadata rather than Java 1.5 annotations. If
+   * <code>false</code>, generators should not warn.
+   */
+  public static boolean warnAboutMetadata() {
+    return System.getProperty("gwt.nowarn.metadata") != null;
+  }
+
+  /**
+   * Not instantiable.
+   */
+  private GenUtil() {
+  }
+}
diff --git a/user/src/com/google/gwt/benchmarks/BenchmarkReport.java b/user/src/com/google/gwt/benchmarks/BenchmarkReport.java
index 3094d33..637b0c5 100644
--- a/user/src/com/google/gwt/benchmarks/BenchmarkReport.java
+++ b/user/src/com/google/gwt/benchmarks/BenchmarkReport.java
@@ -436,7 +436,7 @@
   private <T extends HasMetaData & HasAnnotations> String getBenchmarkCategory(
       TreeLogger deprecationBranch, T element) {
     String category = getSimpleMetaData(element, GWT_BENCHMARK_CATEGORY);
-    if (category != null) {
+    if (category != null && deprecationBranch != null) {
       deprecationBranch.log(TreeLogger.WARN, GWT_BENCHMARK_CATEGORY + " has "
           + "been deprecated with no replacement.", null);
     }
@@ -471,7 +471,8 @@
     String categoryDescription = getSimpleMetaData(categoryType,
         GWT_BENCHMARK_DESCRIPTION);
 
-    if (categoryName != null || categoryDescription != null) {
+    if ((categoryName != null || categoryDescription != null)
+        && deprecationBranch != null) {
       deprecationBranch.log(TreeLogger.WARN, GWT_BENCHMARK_NAME + " and "
           + GWT_BENCHMARK_DESCRIPTION + " have been deprecated with no "
           + "replacement", null);
diff --git a/user/src/com/google/gwt/benchmarks/rebind/BenchmarkGenerator.java b/user/src/com/google/gwt/benchmarks/rebind/BenchmarkGenerator.java
index 3174958..4c5863f 100644
--- a/user/src/com/google/gwt/benchmarks/rebind/BenchmarkGenerator.java
+++ b/user/src/com/google/gwt/benchmarks/rebind/BenchmarkGenerator.java
@@ -32,6 +32,7 @@
 import com.google.gwt.core.ext.typeinfo.JField;
 import com.google.gwt.core.ext.typeinfo.JMethod;
 import com.google.gwt.core.ext.typeinfo.JParameter;
+import com.google.gwt.dev.generator.GenUtil;
 import com.google.gwt.dev.generator.ast.ForLoop;
 import com.google.gwt.dev.generator.ast.MethodCall;
 import com.google.gwt.dev.generator.ast.Statement;
@@ -240,9 +241,11 @@
   public void writeSource() throws UnableToCompleteException {
     super.writeSource();
 
-    deprecationBranch = logger.branch(TreeLogger.TRACE,
-        "Scanning Benchmarks for deprecated annotations; please see "
-            + BENCHMARK_CLASS + " for more information", null);
+    if (GenUtil.warnAboutMetadata()) {
+      deprecationBranch = logger.branch(TreeLogger.TRACE,
+          "Scanning Benchmarks for deprecated annotations; please see "
+              + BENCHMARK_CLASS + " for more information", null);
+    }
 
     generateEmptyFunc(getSourceWriter());
     implementZeroArgTestMethods();
@@ -491,10 +494,12 @@
       return getAnnotationMetaData(method, bound);
     }
 
-    deprecationBranch.log(TreeLogger.WARN, "Deprecated use of "
-        + BENCHMARK_PARAM_META + " at " + method.getEnclosingType() + " in "
-        + method + "; please use the new Benchmark JDK 1.5 annotations in "
-        + "com.google.gwt.benchmark.client", null);
+    if (deprecationBranch != null) {
+      deprecationBranch.log(TreeLogger.WARN, "Deprecated use of "
+          + BENCHMARK_PARAM_META + " at " + method.getEnclosingType() + " in "
+          + method + "; please use the new Benchmark JDK 1.5 annotations in "
+          + "com.google.gwt.benchmark.client", null);
+    }
 
     Map<String, String> params = new HashMap<String, String>();
 
diff --git a/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java b/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java
index 0b92056..03036b4 100644
--- a/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java
+++ b/user/src/com/google/gwt/i18n/rebind/AbstractLocalizableImplCreator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -337,9 +337,11 @@
    * @param method method to warn about
    */
   void warnOnMetadata(JMethod method) {
-    deprecatedLogger.log(TreeLogger.WARN, "Deprecated metadata found on "
-        + method.getEnclosingType().getSimpleSourceName() + "."
-        + method.getName() + ";svn use annotations instead", null);
+    if (deprecatedLogger != null) {
+      deprecatedLogger.log(TreeLogger.WARN, "Deprecated metadata found on "
+          + method.getEnclosingType().getSimpleSourceName() + "."
+          + method.getName() + ";svn use annotations instead", null);
+    }
   }
 
 }
diff --git a/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java b/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
index 6107c6c..2f8295b 100644
--- a/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
+++ b/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -24,6 +24,7 @@
 import com.google.gwt.core.ext.typeinfo.JClassType;
 import com.google.gwt.core.ext.typeinfo.NotFoundException;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.dev.generator.GenUtil;
 import com.google.gwt.i18n.client.Constants;
 import com.google.gwt.i18n.client.ConstantsWithLookup;
 import com.google.gwt.i18n.client.Messages;
@@ -107,9 +108,12 @@
       throw new UnableToCompleteException();
     }
 
-    TreeLogger deprecatedLogger = logger.branch(TreeLogger.TRACE,
-        "Checking for deprecated metadata", null);
-    
+    TreeLogger deprecatedLogger = null;
+    if (GenUtil.warnAboutMetadata()) {
+      deprecatedLogger = logger.branch(TreeLogger.TRACE,
+          "Checking for deprecated metadata", null);
+    }
+
     // Link current locale and interface type to correct implementation class.
     String generatedClass = AbstractLocalizableImplCreator.generateConstantOrMessageClass(
         logger, deprecatedLogger , context, locale, targetClass);
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
index 556d9dc..e8c04c9 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -26,6 +26,7 @@
 import com.google.gwt.core.ext.typeinfo.JPrimitiveType;
 import com.google.gwt.core.ext.typeinfo.JType;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.dev.generator.GenUtil;
 import com.google.gwt.dev.generator.NameFactory;
 import com.google.gwt.dev.util.Util;
 import com.google.gwt.http.client.Request;
@@ -99,11 +100,13 @@
       throws UnableToCompleteException {
     TypeOracle typeOracle = context.getTypeOracle();
 
-    TreeLogger javadocAnnotationDeprecationBranch = logger.branch(
-        TreeLogger.TRACE,
-        "Scanning this RemoteService for deprecated annotations; "
-            + "Please see " + RemoteServiceRelativePath.class.getName()
-            + " for more information.", null);
+    TreeLogger javadocAnnotationDeprecationBranch = null;
+    if (GenUtil.warnAboutMetadata()) {
+      javadocAnnotationDeprecationBranch = logger.branch(TreeLogger.TRACE,
+          "Scanning this RemoteService for deprecated annotations; "
+              + "Please see " + RemoteServiceRelativePath.class.getName()
+              + " for more information.", null);
+    }
 
     JClassType serviceAsync = typeOracle.findType(serviceIntf.getQualifiedSourceName()
         + "Async");
@@ -373,9 +376,11 @@
       TreeLogger javadocAnnotationDeprecationBranch) {
     String[][] metaData = serviceIntf.getMetaData(ENTRY_POINT_TAG);
     if (metaData.length != 0) {
-      javadocAnnotationDeprecationBranch.log(TreeLogger.WARN,
-          "Deprecated use of " + ENTRY_POINT_TAG + "; Please use "
-              + RemoteServiceRelativePath.class.getName() + " instead", null);
+      if (javadocAnnotationDeprecationBranch != null) {
+        javadocAnnotationDeprecationBranch.log(TreeLogger.WARN,
+            "Deprecated use of " + ENTRY_POINT_TAG + "; Please use "
+                + RemoteServiceRelativePath.class.getName() + " instead", null);
+      }
       return metaData[0][0];
     } else {
       RemoteServiceRelativePath moduleRelativeURL = serviceIntf.getAnnotation(RemoteServiceRelativePath.class);
diff --git a/user/src/com/google/gwt/user/rebind/ui/ImageBundleGenerator.java b/user/src/com/google/gwt/user/rebind/ui/ImageBundleGenerator.java
index 258d001..34b9c68 100644
--- a/user/src/com/google/gwt/user/rebind/ui/ImageBundleGenerator.java
+++ b/user/src/com/google/gwt/user/rebind/ui/ImageBundleGenerator.java
@@ -23,6 +23,7 @@
 import com.google.gwt.core.ext.typeinfo.JMethod;
 import com.google.gwt.core.ext.typeinfo.NotFoundException;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.dev.generator.GenUtil;
 import com.google.gwt.user.client.ui.ImageBundle;
 import com.google.gwt.user.client.ui.ImageBundle.Resource;
 import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
@@ -455,7 +456,9 @@
       if (imgNameAnn == null) {
         // There is JavaDoc metadata but no annotation.
         imgFileName = imgNameJavaDoc;
-        logger.log(TreeLogger.WARN, MSG_JAVADOC_FORM_DEPRECATED, null);
+        if (GenUtil.warnAboutMetadata()) {
+          logger.log(TreeLogger.WARN, MSG_JAVADOC_FORM_DEPRECATED, null);
+        }
       } else {
         // There is both JavaDoc metadata and an annotation.
         logger.log(TreeLogger.WARN, MSG_MULTIPLE_ANNOTATIONS, null);
diff --git a/user/test/com/google/gwt/user/rebind/ui/ImageBundleGeneratorTest.java b/user/test/com/google/gwt/user/rebind/ui/ImageBundleGeneratorTest.java
index e36b869..9b8a63a 100644
--- a/user/test/com/google/gwt/user/rebind/ui/ImageBundleGeneratorTest.java
+++ b/user/test/com/google/gwt/user/rebind/ui/ImageBundleGeneratorTest.java
@@ -16,6 +16,7 @@
 package com.google.gwt.user.rebind.ui;
 
 import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.generator.GenUtil;
 import com.google.gwt.dev.util.UnitTestTreeLogger;
 import com.google.gwt.user.client.ui.ImageBundle.Resource;
 import com.google.gwt.user.rebind.ui.ImageBundleBuilder.HasRect;
@@ -231,7 +232,9 @@
    */
   public void testResourceNotFoundGivenLegacyJavaDoc() {
     UnitTestTreeLogger.Builder b = new UnitTestTreeLogger.Builder();
-    b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    if (GenUtil.warnAboutMetadata()) {
+      b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    }
     b.expectError(
         ImageBundleGenerator.msgCannotFindImageFromMetaData("from/metadata/notfound.png"),
         null);
@@ -274,10 +277,12 @@
   public void testResourcesFoundFromImageBundleInDefaultPackage()
       throws UnableToCompleteException {
     UnitTestTreeLogger.Builder b = new UnitTestTreeLogger.Builder();
-    // Due to [2] below
-    b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
-    // Due to [4] below
-    b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    if (GenUtil.warnAboutMetadata()) {
+      // Due to [2] below
+      b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+      // Due to [4] below
+      b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    }
     UnitTestTreeLogger logger = b.createLogger();
 
     {
@@ -336,10 +341,12 @@
   public void testResourcesFoundFromImageBundleInNonDefaultPackage()
       throws UnableToCompleteException {
     UnitTestTreeLogger.Builder b = new UnitTestTreeLogger.Builder();
-    // Due to [2] below
-    b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
-    // Due to [4] below
-    b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    if (GenUtil.warnAboutMetadata()) {
+      // Due to [2] below
+      b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+      // Due to [4] below
+      b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    }
     UnitTestTreeLogger logger = b.createLogger();
 
     {
@@ -412,7 +419,9 @@
    */
   public void testWarnOnUseOfLegacyJavaDoc() throws UnableToCompleteException {
     UnitTestTreeLogger.Builder b = new UnitTestTreeLogger.Builder();
-    b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    if (GenUtil.warnAboutMetadata()) {
+      b.expectWarn(ImageBundleGenerator.MSG_JAVADOC_FORM_DEPRECATED, null);
+    }
     UnitTestTreeLogger logger = b.createLogger();
 
     String imgName = getImageName(logger, new String[] {