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 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()); }
public static ParameterSpec get(VariableElement element) { TypeName type = TypeName.get(element.asType()); String name = element.getSimpleName().toString(); return ParameterSpec.builder(type, name) .addModifiers(element.getModifiers()) .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)
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())); }
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)));
/** Returns the given parameters with a final modifier added. */ private final ImmutableList<ParameterSpec> makeFinal(Collection<ParameterSpec> parameters) { return parameters.stream() .map(param -> param.toBuilder().addModifiers(FINAL).build()) .collect(toImmutableList()); }
public static Builder builder(TypeName type, String name, Modifier... modifiers) { checkNotNull(type, "type == null"); checkArgument(SourceVersion.isName(name), "not a valid name: %s", name); return new Builder(type, name) .addModifiers(modifiers); }
public Builder addAnnotation(Class<?> annotation) { return addAnnotation(ClassName.get(annotation)); }
public static Builder builder(TypeName type, String name, Modifier... modifiers) { checkNotNull(type, "type == null"); checkArgument(SourceVersion.isName(name), "not a valid name: %s", name); return new Builder(type, name) .addModifiers(modifiers); }
public static Builder builder(TypeName type, String name, Modifier... modifiers) { checkNotNull(type, "type == null"); checkArgument(SourceVersion.isName(name), "not a valid name: %s", name); return new Builder(type, name) .addModifiers(modifiers); }
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()
@NonNull public Element fromBuilderDelegateMethod(@NonNull ExecutableElement method) { return new DelegateMethod(method.getSimpleName().toString(), TypeName.get(method.getReturnType()), getAnnotations(method).getLeft(), method.getParameters().stream().map(p -> ParameterSpec.builder(TypeName.get(p.asType()), p.getSimpleName().toString()).build()).collect(Collectors.toList()), method.getTypeParameters().stream().map(TypeVariableName::get).collect(Collectors.toList()), method.getModifiers(), elements.getDocComment(method)); }
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(); }
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(); }
@NonNull public Element fromConfigDelegateMethod(@NonNull ExecutableElement method) { return new DelegateMethod.Config(method.getSimpleName().toString(), TypeName.get(method.getReturnType()), getAnnotations(method).getLeft(), method.getParameters().stream().map(p -> ParameterSpec.builder(TypeName.get(p.asType()), p.getSimpleName().toString()).build()).collect(Collectors.toList()), method.getTypeParameters().stream().map(TypeVariableName::get).collect(Collectors.toList()), method.getModifiers(), elements.getDocComment(method)); }
private static MethodSpec transferService(String implClass, String serviceInstanceName) { return MethodSpec.methodBuilder("transferService") .addAnnotation(Override.class) .returns(TypeName.VOID) .addModifiers(Modifier.PROTECTED) .addParameter(ParameterSpec.builder(SectionClassNames.SECTION_CONTEXT, "c").build()) .addParameter(ParameterSpec.builder(SectionClassNames.SECTION, "previous").build()) .addParameter(ParameterSpec.builder(SectionClassNames.SECTION, "next").build()) .addStatement("$L $L = ($L) previous", implClass, "previousSection", implClass) .addStatement("$L $L = ($L) next", implClass, "nextSection", implClass) .addStatement( "nextSection.$L = previousSection.$L", serviceInstanceName, 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 {
public Builder addParameter(TypeName type, String name, Modifier... modifiers) { return addParameter(ParameterSpec.builder(type, name, modifiers).build()); }
private void addMethods(TypeElement interfaceClazz, TypeSpec.Builder classBuilder) { List<? extends Element> elements = interfaceClazz.getEnclosedElements(); if (elements != null && !elements.isEmpty()) { for (Element e : elements) { if (ElementKind.METHOD.equals(e.getKind())) { ExecutableElement method = (ExecutableElement) e; MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder(method.getSimpleName().toString() + ASYNC) .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT).returns(ResponseFuture.class) .addTypeVariables(getTypeNames(method.getTypeParameters())); // add method params List<? extends VariableElement> vars = method.getParameters(); for (VariableElement var : vars) { methodBuilder.addParameter(ParameterSpec.builder(TypeName.get(var.asType()), var.getSimpleName().toString()) .build()); } classBuilder.addMethod(methodBuilder.build()); } } } }