private static MethodSpec createService(String serviceInstanceName) { return MethodSpec.methodBuilder("createService") .addAnnotation(Override.class) .addModifiers(Modifier.PUBLIC) .addParameter(ParameterSpec.builder(SectionClassNames.SECTION_CONTEXT, "context").build()) .addStatement( "$L = onCreateService(context)", serviceInstanceName) .build(); }
public static MethodSpec.Builder overriding(ExecutableElement method) { return MethodSpec.methodBuilder(method.getSimpleName().toString()) .addAnnotation(Override.class) .addModifiers(method.getModifiers().stream().filter(modifier -> modifier != Modifier.ABSTRACT).collect(Collectors.toList())) .returns(TypeName.get(method.getReturnType())) .varargs(method.isVarArgs()) .addExceptions(method.getThrownTypes().stream().map(TypeName::get).collect(Collectors.toList())) .addTypeVariables(method.getTypeParameters().stream().map(TypeVariableName::get).collect(Collectors.toList())) .addParameters(method.getParameters().stream().map(element -> ParameterSpec.get(element).toBuilder() .addAnnotations(element.getAnnotationMirrors().stream().map(AnnotationSpec::get).collect(Collectors.toList())).build()).collect(Collectors.toList())); }
private MethodSpec buildConstructor(ControllerClassInfo controllerInfo) { ParameterSpec controllerParam = ParameterSpec .builder(controllerInfo.getControllerClassType(), "controller") .build(); return MethodSpec.constructorBuilder() .addParameter(controllerParam) .addModifiers(Modifier.PUBLIC) .addStatement("this.controller = controller") .build(); }
TypeSpec.Builder typeSpec = TypeSpec.classBuilder(getInputsClassName(cachedValueName)) .addModifiers(Modifier.PRIVATE, Modifier.STATIC); MethodSpec.Builder constructor = MethodSpec.constructorBuilder(); typeSpec.addField( FieldSpec.builder(param.getTypeName(), param.getName(), Modifier.PRIVATE, Modifier.FINAL) .build()); constructor .addParameter(ParameterSpec.builder(param.getTypeName(), param.getName()).build()) .addStatement("this.$L = $L", param.getName(), param.getName()); typeSpec.addMethod(constructor.build()); MethodSpec.methodBuilder("hashCode") .addAnnotation(Override.class) .returns(TypeName.INT) MethodSpec.methodBuilder("equals") .addAnnotation(Override.class) .returns(TypeName.BOOLEAN)
private void generateAnonymousTraversal(final Context ctx) throws IOException { final TypeSpec.Builder anonymousClass = TypeSpec.classBuilder("__") .addModifiers(Modifier.PUBLIC, Modifier.FINAL); anonymousClass.addMethod(MethodSpec.constructorBuilder() .addModifiers(Modifier.PRIVATE) .build()); anonymousClass.addMethod(MethodSpec.methodBuilder("start") .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .addTypeVariable(TypeVariableName.get("A")) .addStatement("return new $N<>()", ctx.defaultTraversalClazz) getReturnTypeDefinition(ctx.traversalClassName, templateMethod); final MethodSpec.Builder methodToAdd = MethodSpec.methodBuilder(methodName) .addModifiers(Modifier.STATIC, Modifier.PUBLIC) .addExceptions(templateMethod.getThrownTypes().stream().map(TypeName::get).collect(Collectors.toList())) methodToAdd.addParameter(ParameterSpec.get(param));
public static Builder builder(Type type, String name, Modifier... modifiers) { return builder(TypeName.get(type), name, modifiers); }
private MethodSpec buildOpMethod( String methodName, ClassName opClassName, ExecutableElement factoryMethod) { MethodSpec.Builder builder = MethodSpec.methodBuilder(methodName) .addModifiers(Modifier.PUBLIC) .returns(TypeName.get(factoryMethod.getReturnType())) .varargs(factoryMethod.isVarArgs()) .addJavadoc("$L", buildOpMethodJavadoc(opClassName, factoryMethod)); boolean first = true; for (VariableElement param : factoryMethod.getParameters()) { ParameterSpec p = ParameterSpec.get(param); if (first) { first = false;
@Override public MethodSpec.Builder onMethod(ResourceContext context, GMethod method, GRequest gRequest, MethodSpec.Builder methodSpec) { MethodSpec spec = methodSpec.build(); MethodSpec.Builder builder = MethodSpec.methodBuilder(spec.name); builder.addAnnotations(spec.annotations); builder.addCode(spec.code); builder.addParameter(parameter.toBuilder().addAnnotation(Valid.class).build()); } else { builder.addParameter(parameter);
TypeMirror resolvedReturnType = executableType.getReturnType(); Builder builder = overriding(method); builder.returns(TypeName.get(resolvedReturnType)); for (int i = 0, size = builder.parameters.size(); i < size; i++) { ParameterSpec parameter = builder.parameters.get(i); TypeName type = TypeName.get(resolvedParameterTypes.get(i)); builder.parameters.set(i, parameter.toBuilder(type, parameter.name).build()); builder.addException(TypeName.get(resolvedThrownTypes.get(i)));
static List<ParameterSpec> parametersOf(ExecutableElement method) { List<ParameterSpec> result = new ArrayList<>(); for (VariableElement parameter : method.getParameters()) { result.add(ParameterSpec.get(parameter)); } return result; }
public Builder toBuilder() { return toBuilder(type, name); }
private void createConfigClass(@NonNull List<Element> elements) throws IOException { final TypeSpec.Builder classBuilder = TypeSpec.classBuilder(configName) .addSuperinterface(Serializable.class) .addSuperinterface(org.acra.config.Configuration.class) .addModifiers(Modifier.PUBLIC, Modifier.FINAL); Strings.addClassJavadoc(classBuilder, ClassName.get(baseAnnotation.asType())); final MethodSpec.Builder constructor = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC) .addParameter(ParameterSpec.builder(ClassName.get(PACKAGE, builderName), PARAM_0).addAnnotation(Types.NON_NULL).build()); elements.stream().filter(ConfigElement.class::isInstance).map(ConfigElement.class::cast).forEach(element -> element.addToConfig(classBuilder, constructor)); classBuilder.addMethod(constructor.build()); Strings.writeClass(processingEnv.getFiler(), classBuilder.build()); }
ParameterizedTypeName entityList = ParameterizedTypeName.get(listClassName, entityClassName); MethodSpec.Builder registerModuleBuilder = MethodSpec.methodBuilder("registerModule") .addAnnotation(Override.class) .addModifiers(Modifier.PROTECTED) .returns(void.class); List<? extends Element> allMembers = mElementUtils.getAllMembers(typeElement); MethodSpec registerModuleMethod = registerModuleBuilder.build(); MethodSpec ctorFirst = MethodSpec.constructorBuilder() .addJavadoc("无参构造,默认创建空集合\n") .addModifiers(Modifier.PUBLIC) .build(); MethodSpec ctorSecond = MethodSpec.constructorBuilder() .addJavadoc("@param data 数据集合\n") .addModifiers(Modifier.PUBLIC) .build(); ParameterSpec modeParam = ParameterSpec.builder(ParameterizedTypeName.get(int.class), "mode") .addAnnotation(ClassName.bestGuess("com.crazysunj.multitypeadapter.helper.RecyclerViewAdapterHelper.RefreshMode")) .build(); MethodSpec ctorThird = MethodSpec.constructorBuilder()
private void generateAnonymousTraversal(final Context ctx) throws IOException { final TypeSpec.Builder anonymousClass = TypeSpec.classBuilder("__") .addModifiers(Modifier.PUBLIC, Modifier.FINAL); anonymousClass.addMethod(MethodSpec.constructorBuilder() .addModifiers(Modifier.PRIVATE) .build()); anonymousClass.addMethod(MethodSpec.methodBuilder("start") .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .addTypeVariable(TypeVariableName.get("A")) .addStatement("return new $N<>()", ctx.defaultTraversalClazz) getReturnTypeDefinition(ctx.traversalClassName, templateMethod); final MethodSpec.Builder methodToAdd = MethodSpec.methodBuilder(methodName) .addModifiers(Modifier.STATIC, Modifier.PUBLIC) .addExceptions(templateMethod.getThrownTypes().stream().map(TypeName::get).collect(Collectors.toList())) methodToAdd.addParameter(ParameterSpec.get(param));
public Builder addParameter(TypeName type, String name, Modifier... modifiers) { return addParameter(ParameterSpec.builder(type, name, modifiers).build()); }
/** * Returns a new method spec builder that overrides {@code method} as a member of {@code * enclosing}. This will resolve type parameters: for example overriding {@link * Comparable#compareTo} in a type that implements {@code Comparable<Movie>}, the {@code T} * parameter will be resolved to {@code Movie}. * * <p>This will copy its visibility modifiers, type parameters, return type, name, parameters, and * throws declarations. An {@link Override} annotation will be added. * * <p>Note that in JavaPoet 1.2 through 1.7 this method retained annotations from the method and * parameters of the overridden method. Since JavaPoet 1.8 annotations must be added separately. */ public static Builder overriding( ExecutableElement method, DeclaredType enclosing, Types types) { ExecutableType executableType = (ExecutableType) types.asMemberOf(enclosing, method); List<? extends TypeMirror> resolvedParameterTypes = executableType.getParameterTypes(); TypeMirror resolvedReturnType = executableType.getReturnType(); Builder builder = overriding(method); builder.returns(TypeName.get(resolvedReturnType)); for (int i = 0, size = builder.parameters.size(); i < size; i++) { ParameterSpec parameter = builder.parameters.get(i); TypeName type = TypeName.get(resolvedParameterTypes.get(i)); builder.parameters.set(i, parameter.toBuilder(type, parameter.name).build()); } return builder; }
private void addMethodBody(final MethodSpec.Builder methodToAdd, final ExecutableElement templateMethod, final String startBody, final String endBody, final Object... statementArgs) { final List<? extends VariableElement> parameters = templateMethod.getParameters(); final StringBuilder body = new StringBuilder(startBody); final int numberOfParams = parameters.size(); for (int ix = 0; ix < numberOfParams; ix++) { final VariableElement param = parameters.get(ix); methodToAdd.addParameter(ParameterSpec.get(param)); body.append(param.getSimpleName()); if (ix < numberOfParams - 1) { body.append(","); } } body.append(endBody); // treat a final array as a varargs param if (!parameters.isEmpty() && parameters.get(parameters.size() - 1).asType().getKind() == TypeKind.ARRAY) methodToAdd.varargs(true); methodToAdd.addStatement(body.toString(), statementArgs); }
public Builder toBuilder() { return toBuilder(type, name); }
private static MethodSpec getService(String implClass, String serviceInstanceName) { return MethodSpec.methodBuilder("getService") .addAnnotation(Override.class) .addModifiers(Modifier.PROTECTED) .returns(TypeName.OBJECT) .addParameter(ParameterSpec.builder(SectionClassNames.SECTION, "section").build()) .addStatement("return (($L) section).$L", implClass, serviceInstanceName) .build(); } }
private void createBuilderClass(@NonNull List<Element> elements) throws IOException { final TypeSpec.Builder classBuilder = TypeSpec.classBuilder(builderName) .addModifiers(Modifier.FINAL); final TypeName baseAnnotation = TypeName.get(this.baseAnnotation.asType()); Strings.addClassJavadoc(classBuilder, baseAnnotation); final MethodSpec.Builder constructor = MethodSpec.constructorBuilder() .addParameter(ParameterSpec.builder(Types.CONTEXT, PARAM_0).addAnnotation(Types.NON_NULL).build()) .addJavadoc("@param $L object annotated with {@link $T}\n", PARAM_0, baseAnnotation) .addStatement("final $1T $2L = $3L.getClass().getAnnotation($1T.class)", baseAnnotation, VAR_ANNOTATION, PARAM_0); if (!configuration.isPlugin()) { classBuilder.addModifiers(Modifier.PUBLIC) .addSuperinterface(ConfigurationBuilder.class); constructor.addModifiers(Modifier.PUBLIC); } else {