Bypass creating a private method if the component api already exposes a method.

Example Change:

Before:

  @Override
  public Foo foo() {
    return getFooInstance();
  }

  private Foo getFooInstance() {
    return new Foo();
  }

  private Bar getBarInstance() {
    return new Bar(getFooInstance());
  }

After:

  @Override
  public Foo foo() {
    return new Foo();
  }

  private Bar getBarInstance() {
    return new Bar(foo());
  }

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171602989
diff --git a/java/dagger/internal/codegen/ComponentBindingExpressions.java b/java/dagger/internal/codegen/ComponentBindingExpressions.java
index 7bb9312..11a1bd6 100644
--- a/java/dagger/internal/codegen/ComponentBindingExpressions.java
+++ b/java/dagger/internal/codegen/ComponentBindingExpressions.java
@@ -117,6 +117,17 @@
     return dependencyExpression;
   }
 
+  /**
+   * Returns an expression for the implementation of a component method with the given request.
+   *
+   * @throws IllegalStateException if there is no binding expression that satisfies the dependency
+   *     request
+   */
+  Expression getComponentMethodExpression(DependencyRequest request, ClassName requestingClass) {
+    return getBindingExpression(request.bindingKey())
+        .getComponentMethodExpression(request, requestingClass);
+  }
+
   private BindingExpression getBindingExpression(BindingKey bindingKey) {
     for (Map<BindingKey, BindingExpression> bindingExpressionsMap : bindingExpressionsMaps) {
       BindingExpression expression = bindingExpressionsMap.get(bindingKey);