use of dagger.Module in project tiger by google.
the class ProxyGenerator method addMethodsCallingModuleMethods.
private void addMethodsCallingModuleMethods(Builder typeBuilder, TypeElement module) {
Preconditions.checkArgument(utils.hasAnnotationMirror(module, Module.class), "Expect a module but got " + module);
for (Element e : module.getEnclosedElements()) {
if (!utils.isMethod(e)) {
continue;
}
ExecutableElement method = (ExecutableElement) e;
if (utils.isBindsMethod(method)) {
continue;
}
if (utils.isMultibindsMethod(method)) {
continue;
}
if (!utils.isProvidesMethod(method)) {
continue;
}
addMethodCallingMethodOrCtor(typeBuilder, method.getReturnType(), module, method, utils.getMethodNameCallingMethod(module, method));
}
}
use of dagger.Module in project tiger by google.
the class Utils method getIncludedModules.
/**
* Returns included {@link Module}s of the specified {@link Module}
* recursively.
*/
private List<Class<?>> getIncludedModules(Class<?> module) {
List<Class<?>> result = new ArrayList<>();
Module childModule = module.getAnnotation(Module.class);
Class<?>[] includes = childModule.includes();
result.addAll(Lists.newArrayList(includes));
for (Class<?> clazz : includes) {
logger.n("module: " + module + " child: " + clazz);
result.addAll(getIncludedModules(clazz));
}
return result;
}
use of dagger.Module in project dagger by square.
the class GraphAnalysisProcessor method process.
/**
* Perform full-graph analysis on complete modules. This checks that all of
* the module's dependencies are satisfied.
*/
@Override
public boolean process(Set<? extends TypeElement> types, RoundEnvironment env) {
if (!env.processingOver()) {
// passes.
for (Element e : env.getElementsAnnotatedWith(Module.class)) {
if (!(e instanceof TypeElement)) {
error("@Module applies to a type, " + e.getSimpleName() + " is a " + e.getKind(), e);
continue;
}
delayedModuleNames.add(((TypeElement) e).getQualifiedName().toString());
}
return false;
}
Set<Element> modules = new LinkedHashSet<Element>();
for (String moduleName : delayedModuleNames) {
modules.add(elements().getTypeElement(moduleName));
}
for (Element element : modules) {
Map<String, Object> annotation = null;
try {
annotation = getAnnotation(Module.class, element);
} catch (CodeGenerationIncompleteException e) {
// skip this element. An up-stream compiler error is in play.
continue;
}
TypeElement moduleType = (TypeElement) element;
if (annotation == null) {
error("Missing @Module annotation.", moduleType);
continue;
}
if (annotation.get("complete").equals(Boolean.TRUE)) {
Map<String, Binding<?>> bindings;
try {
bindings = processCompleteModule(moduleType, false);
new ProblemDetector().detectCircularDependencies(bindings.values());
} catch (ModuleValidationException e) {
error("Graph validation failed: " + e.getMessage(), e.source);
continue;
} catch (InvalidBindingException e) {
error("Graph validation failed: " + e.getMessage(), elements().getTypeElement(e.type));
continue;
} catch (RuntimeException e) {
if (ERROR_NAMES_TO_PROPAGATE.contains(e.getClass().getName())) {
throw e;
}
error("Unknown error " + e.getClass().getName() + " thrown by javac in graph validation: " + e.getMessage(), moduleType);
continue;
}
try {
writeDotFile(moduleType, bindings);
} catch (IOException e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, "Graph visualization failed. Please report this as a bug.\n\n" + sw, moduleType);
}
}
if (annotation.get("library").equals(Boolean.FALSE)) {
Map<String, Binding<?>> bindings = processCompleteModule(moduleType, true);
try {
new ProblemDetector().detectUnusedBinding(bindings.values());
} catch (IllegalStateException e) {
error("Graph validation failed: " + e.getMessage(), moduleType);
}
}
}
return false;
}
Aggregations