93 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Java
		
	
	
	
| /*
 | |
|  * Copyright (C) 2018 The Dagger Authors.
 | |
|  *
 | |
|  * 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 dagger.spi;
 | |
| 
 | |
| import static javax.tools.Diagnostic.Kind.ERROR;
 | |
| 
 | |
| import com.google.auto.service.AutoService;
 | |
| import com.google.common.collect.ImmutableSet;
 | |
| import dagger.model.BindingGraph;
 | |
| import java.util.Map;
 | |
| import java.util.Set;
 | |
| 
 | |
| @AutoService(BindingGraphPlugin.class)
 | |
| public final class FailingPlugin implements BindingGraphPlugin {
 | |
|   private Map<String, String> options;
 | |
| 
 | |
|   @Override
 | |
|   public Set<String> supportedOptions() {
 | |
|     return ImmutableSet.of(
 | |
|         "error_on_binding",
 | |
|         "error_on_dependency",
 | |
|         "error_on_component",
 | |
|         "error_on_subcomponents");
 | |
|   }
 | |
| 
 | |
|   @Override
 | |
|   public void initOptions(Map<String, String> options) {
 | |
|     this.options = options;
 | |
|   }
 | |
| 
 | |
|   @Override
 | |
|   public void visitGraph(BindingGraph bindingGraph, DiagnosticReporter diagnosticReporter) {
 | |
|     if (options.containsKey("error_on_binding")) {
 | |
|       String key = options.get("error_on_binding");
 | |
|       bindingGraph.bindings().stream()
 | |
|           .filter(binding -> binding.key().toString().equals(key))
 | |
|           .forEach(
 | |
|               binding ->
 | |
|                   diagnosticReporter.reportBinding(ERROR, binding, "Bad Binding: %s", binding));
 | |
|     }
 | |
| 
 | |
|     if (options.containsKey("error_on_component")) {
 | |
|       diagnosticReporter.reportComponent(
 | |
|           ERROR,
 | |
|           bindingGraph.rootComponentNode(),
 | |
|           "Bad Component: %s",
 | |
|           bindingGraph.rootComponentNode());
 | |
|     }
 | |
| 
 | |
|     if (options.containsKey("error_on_subcomponents")) {
 | |
|       bindingGraph.componentNodes().stream()
 | |
|           .filter(componentNode -> !componentNode.componentPath().atRoot())
 | |
|           .forEach(
 | |
|               componentNode ->
 | |
|                   diagnosticReporter.reportComponent(
 | |
|                       ERROR, componentNode, "Bad Subcomponent: %s", componentNode));
 | |
|     }
 | |
| 
 | |
|     if (options.containsKey("error_on_dependency")) {
 | |
|       String dependency = options.get("error_on_dependency");
 | |
|       bindingGraph.dependencyEdges().stream()
 | |
|           .filter(
 | |
|               edge ->
 | |
|                   edge.dependencyRequest()
 | |
|                       .requestElement()
 | |
|                       .get()
 | |
|                       .getSimpleName()
 | |
|                       .contentEquals(dependency))
 | |
|           .forEach(
 | |
|               edge -> diagnosticReporter.reportDependency(ERROR, edge, "Bad Dependency: %s", edge));
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @Override
 | |
|   public String pluginName() {
 | |
|     return "FailingPlugin";
 | |
|   }
 | |
| }
 |