use of com.squareup.javapoet.ClassName in project tiger by google.
the class NewInjectorGenerator method generateInheritedProvisionMethods.
private void generateInheritedProvisionMethods(ClassName packagedInjectorClassName) {
ComponentInfo component = getComponentFromPackagedInjectorClassName(packagedInjectorClassName);
Preconditions.checkArgument(componentTree.get(component) != null, String.format("No inherited provision methods to generate for %s", packagedInjectorClassName));
TypeSpec.Builder componentSpecBuilder = getInjectorTypeSpecBuilder(packagedInjectorClassName);
ClassName containingPackagedInjectorClassName = getInjectorNameOfScope(packagedInjectorClassName, componentTree.get(component).getScope());
for (NewBindingKey key : generatedBindingsForPackagedInjector.get(containingPackagedInjectorClassName)) {
String provisionMethodName = getProvisionMethodName(key);
componentSpecBuilder.addMethod(MethodSpec.methodBuilder(provisionMethodName).addModifiers(Modifier.PUBLIC).returns(key.getTypeName()).addStatement("return $L.$L()", CONTAINING_PACKAGED_INJECTOR_FIELD, provisionMethodName).build());
Preconditions.checkState(generatedBindingsForPackagedInjector.put(packagedInjectorClassName, key), String.format("Injector %s already provides %s.", packagedInjectorClassName, key));
}
}
use of com.squareup.javapoet.ClassName in project tiger by google.
the class NewInjectorGenerator method generateProvisionMethodAndAppendAsParameter.
private void generateProvisionMethodAndAppendAsParameter(NewBindingKey key, TypeElement referencingClass, ClassName packagedInjectorClassName, StringBuilder builder) {
TypeElement scope = getComponentFromPackagedInjectorClassName(packagedInjectorClassName).getScope();
generateProvisionMethodIfNeeded(key, referencingClass);
ClassName dependencyPackagedInjectorClassName = getInjectorOfScope(key, referencingClass, scope);
if (!dependencyPackagedInjectorClassName.equals(packagedInjectorClassName)) {
builder.append(TOP_LEVEL_INJECTOR_FIELD).append(".").append(Utils.getGetMethodName(dependencyPackagedInjectorClassName)).append("().");
}
builder.append(getProvisionMethodName(key)).append("(), ");
}
use of com.squareup.javapoet.ClassName in project tiger by google.
the class Utils method getDependencyInfoByGeneric.
/**
* Return {@link NewDependencyInfo} for the generalized {@link NewBindingKey} for
* the give key. Null if not applicable or not exist.
*/
public static NewDependencyInfo getDependencyInfoByGeneric(SetMultimap<NewBindingKey, NewDependencyInfo> dependencies, NewBindingKey key) {
TypeName typeName = key.getTypeName();
Preconditions.checkArgument(key.getQualifier() == null, String.format("Binding to %s is supposed to be resolved through generic type of %s" + "but has non-null qualifier.", key, typeName));
if (typeName instanceof ParameterizedTypeName) {
ParameterizedTypeName parameterizedTypeName = (ParameterizedTypeName) typeName;
ClassName rawTypeName = parameterizedTypeName.rawType;
NewBindingKey rawKey = NewBindingKey.get(rawTypeName);
if (dependencies.containsKey(rawKey)) {
NewDependencyInfo dependencyInfo = Iterables.getOnlyElement(dependencies.get(rawKey));
TypeName formalTypeName = dependencyInfo.getDependant().getTypeName();
Preconditions.checkState(formalTypeName instanceof ParameterizedTypeName, String.format("Formal type %s is not of type ParameterizedTypeName. Related actual type is %s", formalTypeName, parameterizedTypeName));
Map<TypeVariableName, TypeName> mapTypeVariableToSpecialized = getMapFromTypeVariableToSpecialized(parameterizedTypeName, (ParameterizedTypeName) formalTypeName);
Set<NewBindingKey> specializedDependencies = specializeIfNeeded(dependencyInfo.getDependencies(), mapTypeVariableToSpecialized);
return new NewDependencyInfo(key, specializedDependencies, dependencyInfo.getSourceClassElement(), dependencyInfo.getProvisionMethodElement(), dependencyInfo.getType());
}
}
return null;
}
use of com.squareup.javapoet.ClassName in project bazel by bazelbuild.
the class JavaCodeGeneratorHelper method targetWithNextHelper.
/**
* Writes a class file {@code Deps(index).java} to the directory
* {@code projectPath/com/example/deps(index)}
*
* @param callNext if we should call the method from {@code Deps(index+1).java}
*/
static void targetWithNextHelper(int index, boolean callNext, Path projectPath) throws IOException {
ClassName nextClass = ClassName.get("com.example.deps" + (index + 1), "Deps" + (index + 1));
MethodSpec callNextMethod = MethodSpec.methodBuilder("CallNext").addModifiers(Modifier.PUBLIC, Modifier.STATIC).returns(void.class).addStatement("$T.PrintSth()", nextClass).build();
TypeSpec.Builder klassBuilder = TypeSpec.classBuilder("Deps" + index).addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(randomMethod);
if (callNext) {
klassBuilder.addMethod(callNextMethod);
}
TypeSpec klass = klassBuilder.build();
writeClassToDir(klass, "com.example.deps" + index, projectPath);
}
use of com.squareup.javapoet.ClassName in project bazel by bazelbuild.
the class JavaCodeGeneratorHelper method targetWithNextExtraHelper.
/**
* Writes a class file {@code Deps(index).java} with extra method {@code printSthElse()}
* to the directory {@code projectPath/com/example/deps(index)}
*
* @param callNext if we should call the method from {@code Deps(index+1).java}
*/
static void targetWithNextExtraHelper(int index, boolean callNext, Path projectPath) throws IOException {
ClassName nextClass = ClassName.get("com.example.deps" + (index + 1), "Deps" + (index + 1));
MethodSpec callNextMethod = MethodSpec.methodBuilder("CallNext").addModifiers(Modifier.PUBLIC, Modifier.STATIC).returns(void.class).addStatement("$T.PrintSth()", nextClass).build();
TypeSpec.Builder klassBuilder = TypeSpec.classBuilder("Deps" + index).addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(randomMethod).addMethod(somethingElseMethod);
if (callNext) {
klassBuilder.addMethod(callNextMethod);
}
TypeSpec klass = klassBuilder.build();
writeClassToDir(klass, "com.example.deps" + index, projectPath);
}
Aggregations