Search in sources :

Example 66 with ClassName

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));
    }
}
Also used : Builder(com.squareup.javapoet.TypeSpec.Builder) ClassName(com.squareup.javapoet.ClassName) TypeSpec(com.squareup.javapoet.TypeSpec)

Example 67 with ClassName

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("(), ");
}
Also used : TypeElement(javax.lang.model.element.TypeElement) ClassName(com.squareup.javapoet.ClassName)

Example 68 with ClassName

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;
}
Also used : TypeName(com.squareup.javapoet.TypeName) WildcardTypeName(com.squareup.javapoet.WildcardTypeName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) ArrayTypeName(com.squareup.javapoet.ArrayTypeName) ClassName(com.squareup.javapoet.ClassName) TypeVariableName(com.squareup.javapoet.TypeVariableName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName)

Example 69 with ClassName

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);
}
Also used : MethodSpec(com.squareup.javapoet.MethodSpec) ClassName(com.squareup.javapoet.ClassName) TypeSpec(com.squareup.javapoet.TypeSpec)

Example 70 with ClassName

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);
}
Also used : MethodSpec(com.squareup.javapoet.MethodSpec) ClassName(com.squareup.javapoet.ClassName) TypeSpec(com.squareup.javapoet.TypeSpec)

Aggregations

ClassName (com.squareup.javapoet.ClassName)99 TypeSpec (com.squareup.javapoet.TypeSpec)60 MethodSpec (com.squareup.javapoet.MethodSpec)41 TypeElement (javax.lang.model.element.TypeElement)37 ParameterizedTypeName (com.squareup.javapoet.ParameterizedTypeName)35 TypeName (com.squareup.javapoet.TypeName)30 Element (javax.lang.model.element.Element)19 TypeMirror (javax.lang.model.type.TypeMirror)17 Builder (com.squareup.javapoet.TypeSpec.Builder)16 FieldSpec (com.squareup.javapoet.FieldSpec)15 ArrayList (java.util.ArrayList)15 CodeBlock (com.squareup.javapoet.CodeBlock)11 ExecutableElement (javax.lang.model.element.ExecutableElement)11 NotNull (org.jetbrains.annotations.NotNull)10 VariableElement (javax.lang.model.element.VariableElement)9 JavaFile (com.squareup.javapoet.JavaFile)8 Map (java.util.Map)8 WildcardTypeName (com.squareup.javapoet.WildcardTypeName)7 IOException (java.io.IOException)7 HashMap (java.util.HashMap)7