Skip synthetic/bridge methods when validating CheckedProvider interfaces, otherwise java8 breaks validation by adding a synthetic bridge default method.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=66122172
diff --git a/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java b/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
index 01cbee5..637099a 100644
--- a/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
+++ b/extensions/throwingproviders/src/com/google/inject/throwingproviders/ThrowingProviderBinder.java
@@ -18,11 +18,12 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.inject.Binder;
-import com.google.inject.ConfigurationException;
 import com.google.inject.Key;
 import com.google.inject.Module;
 import com.google.inject.Provider;
@@ -32,8 +33,6 @@
 import com.google.inject.binder.ScopedBindingBuilder;
 import com.google.inject.internal.UniqueAnnotations;
 import com.google.inject.spi.Dependency;
-import com.google.inject.spi.InjectionPoint;
-import com.google.inject.spi.Message;
 import com.google.inject.spi.ProviderWithDependencies;
 import com.google.inject.util.Types;
 
@@ -392,8 +391,15 @@
         }
       }
       
-      if (interfaceType.getDeclaredMethods().length == 1) {
-        Method method = interfaceType.getDeclaredMethods()[0];
+      // Skip synthetic/bridge methods because java8 generates
+      // a default method on the interface w/ the superinterface type that
+      // just delegates directly to the overridden method.
+      List<Method> declaredMethods = FluentIterable
+          .from(Arrays.asList(interfaceType.getDeclaredMethods()))
+          .filter(NotSyntheticOrBridgePredicate.INSTANCE)
+          .toList();
+      if (declaredMethods.size() == 1) {
+        Method method = declaredMethods.get(0);
         if(!checkArgument(method.getName().equals("get"),
             "%s may not declare any new methods, but declared %s",
             interfaceType, method)) {
@@ -405,7 +411,7 @@
           return false;
         }
       } else {
-        if(!checkArgument(interfaceType.getDeclaredMethods().length == 0,
+        if(!checkArgument(declaredMethods.isEmpty(),
             "%s may not declare any new methods, but declared %s",
             interfaceType, Arrays.asList(interfaceType.getDeclaredMethods()))) {
           return false;
@@ -479,4 +485,11 @@
     
     private static final long serialVersionUID = 0L;
   }
+  
+  private static class NotSyntheticOrBridgePredicate implements Predicate<Method> {
+    static NotSyntheticOrBridgePredicate INSTANCE = new NotSyntheticOrBridgePredicate();
+    @Override public boolean apply(Method input) {
+      return !input.isBridge() && !input.isSynthetic();
+    }
+  }
 }
diff --git a/extensions/throwingproviders/test/com/google/inject/throwingproviders/CheckedProviderTest.java b/extensions/throwingproviders/test/com/google/inject/throwingproviders/CheckedProviderTest.java
index ca13c63..7a640be 100644
--- a/extensions/throwingproviders/test/com/google/inject/throwingproviders/CheckedProviderTest.java
+++ b/extensions/throwingproviders/test/com/google/inject/throwingproviders/CheckedProviderTest.java
@@ -746,7 +746,7 @@
   }
 
   interface StringRemoteProvider extends CheckedProvider<String> {
-    String get() throws RemoteException;  
+    @Override String get() throws RemoteException;  
   }
 
   @SuppressWarnings("deprecation")