Home | History | Annotate | Download | only in codegen
      1 /*
      2  * Copyright (C) 2014 Google, Inc.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package dagger.internal.codegen;
     17 
     18 import com.google.common.base.Optional;
     19 
     20 import static com.google.auto.common.MoreElements.asExecutable;
     21 import static com.google.auto.common.MoreTypes.asDeclared;
     22 
     23 /**
     24  * Formats a {@link ContributionBinding} into a {@link String} suitable for use in error messages.
     25  *
     26  * @author Christian Gruber
     27  * @since 2.0
     28  */
     29 final class ContributionBindingFormatter extends Formatter<ContributionBinding> {
     30   private final MethodSignatureFormatter methodSignatureFormatter;
     31 
     32   ContributionBindingFormatter(MethodSignatureFormatter methodSignatureFormatter) {
     33     this.methodSignatureFormatter = methodSignatureFormatter;
     34   }
     35 
     36   @Override public String format(ContributionBinding binding) {
     37     switch (binding.bindingKind()) {
     38       case COMPONENT_PROVISION:
     39       case COMPONENT_PRODUCTION:
     40         return methodSignatureFormatter.format(asExecutable(binding.bindingElement()));
     41 
     42       case PROVISION:
     43       case SUBCOMPONENT_BUILDER:
     44       case IMMEDIATE:
     45       case FUTURE_PRODUCTION:
     46         return methodSignatureFormatter.format(
     47             asExecutable(binding.bindingElement()),
     48             Optional.of(asDeclared(binding.contributedBy().get().asType())));
     49 
     50       default:
     51         throw new UnsupportedOperationException(
     52             "Not yet supporting " + binding.bindingKind() + " binding types.");
     53     }
     54   }
     55 }
     56