1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2018 The Dagger Authors. 3*f585d8a3SJacky Wang * 4*f585d8a3SJacky Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5*f585d8a3SJacky Wang * you may not use this file except in compliance with the License. 6*f585d8a3SJacky Wang * You may obtain a copy of the License at 7*f585d8a3SJacky Wang * 8*f585d8a3SJacky Wang * http://www.apache.org/licenses/LICENSE-2.0 9*f585d8a3SJacky Wang * 10*f585d8a3SJacky Wang * Unless required by applicable law or agreed to in writing, software 11*f585d8a3SJacky Wang * distributed under the License is distributed on an "AS IS" BASIS, 12*f585d8a3SJacky Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f585d8a3SJacky Wang * See the License for the specific language governing permissions and 14*f585d8a3SJacky Wang * limitations under the License. 15*f585d8a3SJacky Wang */ 16*f585d8a3SJacky Wang 17*f585d8a3SJacky Wang package dagger.spi; 18*f585d8a3SJacky Wang 19*f585d8a3SJacky Wang import com.google.errorprone.annotations.FormatMethod; 20*f585d8a3SJacky Wang import dagger.model.BindingGraph; 21*f585d8a3SJacky Wang import dagger.model.BindingGraph.ChildFactoryMethodEdge; 22*f585d8a3SJacky Wang import dagger.model.BindingGraph.ComponentNode; 23*f585d8a3SJacky Wang import dagger.model.BindingGraph.DependencyEdge; 24*f585d8a3SJacky Wang import dagger.model.BindingGraph.MaybeBinding; 25*f585d8a3SJacky Wang import javax.tools.Diagnostic; 26*f585d8a3SJacky Wang 27*f585d8a3SJacky Wang /** 28*f585d8a3SJacky Wang * An object that {@link BindingGraphPlugin}s can use to report diagnostics while visiting a {@link 29*f585d8a3SJacky Wang * BindingGraph}. 30*f585d8a3SJacky Wang * 31*f585d8a3SJacky Wang * <p>Note: This API is still experimental and will change. 32*f585d8a3SJacky Wang */ 33*f585d8a3SJacky Wang public interface DiagnosticReporter { 34*f585d8a3SJacky Wang /** 35*f585d8a3SJacky Wang * Reports a diagnostic for a component. For non-root components, includes information about the 36*f585d8a3SJacky Wang * path from the root component. 37*f585d8a3SJacky Wang */ reportComponent(Diagnostic.Kind diagnosticKind, ComponentNode componentNode, String message)38*f585d8a3SJacky Wang void reportComponent(Diagnostic.Kind diagnosticKind, ComponentNode componentNode, String message); 39*f585d8a3SJacky Wang 40*f585d8a3SJacky Wang /** 41*f585d8a3SJacky Wang * Reports a diagnostic for a component. For non-root components, includes information about the 42*f585d8a3SJacky Wang * path from the root component. 43*f585d8a3SJacky Wang */ 44*f585d8a3SJacky Wang @FormatMethod reportComponent( Diagnostic.Kind diagnosticKind, ComponentNode componentNode, String messageFormat, Object firstArg, Object... moreArgs)45*f585d8a3SJacky Wang void reportComponent( 46*f585d8a3SJacky Wang Diagnostic.Kind diagnosticKind, 47*f585d8a3SJacky Wang ComponentNode componentNode, 48*f585d8a3SJacky Wang String messageFormat, 49*f585d8a3SJacky Wang Object firstArg, 50*f585d8a3SJacky Wang Object... moreArgs); 51*f585d8a3SJacky Wang 52*f585d8a3SJacky Wang /** 53*f585d8a3SJacky Wang * Reports a diagnostic for a binding or missing binding. Includes information about how the 54*f585d8a3SJacky Wang * binding is reachable from entry points. 55*f585d8a3SJacky Wang */ reportBinding(Diagnostic.Kind diagnosticKind, MaybeBinding binding, String message)56*f585d8a3SJacky Wang void reportBinding(Diagnostic.Kind diagnosticKind, MaybeBinding binding, String message); 57*f585d8a3SJacky Wang 58*f585d8a3SJacky Wang /** 59*f585d8a3SJacky Wang * Reports a diagnostic for a binding or missing binding. Includes information about how the 60*f585d8a3SJacky Wang * binding is reachable from entry points. 61*f585d8a3SJacky Wang */ 62*f585d8a3SJacky Wang @FormatMethod reportBinding( Diagnostic.Kind diagnosticKind, MaybeBinding binding, String messageFormat, Object firstArg, Object... moreArgs)63*f585d8a3SJacky Wang void reportBinding( 64*f585d8a3SJacky Wang Diagnostic.Kind diagnosticKind, 65*f585d8a3SJacky Wang MaybeBinding binding, 66*f585d8a3SJacky Wang String messageFormat, 67*f585d8a3SJacky Wang Object firstArg, 68*f585d8a3SJacky Wang Object... moreArgs); 69*f585d8a3SJacky Wang 70*f585d8a3SJacky Wang /** 71*f585d8a3SJacky Wang * Reports a diagnostic for a dependency. Includes information about how the dependency is 72*f585d8a3SJacky Wang * reachable from entry points. 73*f585d8a3SJacky Wang */ reportDependency( Diagnostic.Kind diagnosticKind, DependencyEdge dependencyEdge, String message)74*f585d8a3SJacky Wang void reportDependency( 75*f585d8a3SJacky Wang Diagnostic.Kind diagnosticKind, DependencyEdge dependencyEdge, String message); 76*f585d8a3SJacky Wang 77*f585d8a3SJacky Wang /** 78*f585d8a3SJacky Wang * Reports a diagnostic for a dependency. Includes information about how the dependency is 79*f585d8a3SJacky Wang * reachable from entry points. 80*f585d8a3SJacky Wang */ 81*f585d8a3SJacky Wang @FormatMethod reportDependency( Diagnostic.Kind diagnosticKind, DependencyEdge dependencyEdge, String messageFormat, Object firstArg, Object... moreArgs)82*f585d8a3SJacky Wang void reportDependency( 83*f585d8a3SJacky Wang Diagnostic.Kind diagnosticKind, 84*f585d8a3SJacky Wang DependencyEdge dependencyEdge, 85*f585d8a3SJacky Wang String messageFormat, 86*f585d8a3SJacky Wang Object firstArg, 87*f585d8a3SJacky Wang Object... moreArgs); 88*f585d8a3SJacky Wang 89*f585d8a3SJacky Wang /** Reports a diagnostic for a subcomponent factory method. */ reportSubcomponentFactoryMethod( Diagnostic.Kind diagnosticKind, ChildFactoryMethodEdge childFactoryMethodEdge, String message)90*f585d8a3SJacky Wang void reportSubcomponentFactoryMethod( 91*f585d8a3SJacky Wang Diagnostic.Kind diagnosticKind, 92*f585d8a3SJacky Wang ChildFactoryMethodEdge childFactoryMethodEdge, 93*f585d8a3SJacky Wang String message); 94*f585d8a3SJacky Wang 95*f585d8a3SJacky Wang /** Reports a diagnostic for a subcomponent factory method. */ 96*f585d8a3SJacky Wang @FormatMethod reportSubcomponentFactoryMethod( Diagnostic.Kind diagnosticKind, ChildFactoryMethodEdge childFactoryMethodEdge, String messageFormat, Object firstArg, Object... moreArgs)97*f585d8a3SJacky Wang void reportSubcomponentFactoryMethod( 98*f585d8a3SJacky Wang Diagnostic.Kind diagnosticKind, 99*f585d8a3SJacky Wang ChildFactoryMethodEdge childFactoryMethodEdge, 100*f585d8a3SJacky Wang String messageFormat, 101*f585d8a3SJacky Wang Object firstArg, 102*f585d8a3SJacky Wang Object... moreArgs); 103*f585d8a3SJacky Wang } 104