private void writeAsyncClass(Element elem) throws ClassNotFoundException, IOException, Exception { if (elem.getKind().isInterface()) { TypeElement interfaceClazz = (TypeElement) elem; String className = interfaceClazz.getSimpleName().toString(); TypeSpec.Builder classBuilder = TypeSpec.interfaceBuilder(className + ASYNC).addModifiers(Modifier.PUBLIC) .addSuperinterface(TypeName.get(elem.asType())); // add class generic type classBuilder.addTypeVariables(getTypeNames(interfaceClazz.getTypeParameters())); // add direct method addMethods(interfaceClazz, classBuilder); // add method form superinterface addSuperInterfaceMethods(interfaceClazz.getInterfaces(), classBuilder); // write class JavaFile javaFile = JavaFile.builder(processingEnv.getElementUtils().getPackageOf(interfaceClazz).getQualifiedName().toString(), classBuilder.build()).build(); javaFile.writeTo(new File(System.getProperty("basedir"), TARGET_DIR)); } else { processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "MotanAsyncProcessor not process, because " + elem.toString() + " not a interface."); } }
renderInfoClassBuilder.addTypeVariables(specModel.getTypeVariables());
propsBuilderClassBuilder.addTypeVariables(specModel.getTypeVariables());
private TypeSpec valueClass(final Descriptor d) throws AutoMatterProcessorException { TypeSpec.Builder value = TypeSpec.classBuilder("Value") .addTypeVariables(d.typeVariables()) .addModifiers(PRIVATE, STATIC, FINAL) .addSuperinterface(valueType(d)); for (ExecutableElement field : d.fields()) { value.addField(FieldSpec.builder(fieldType(d, field), fieldName(field), PRIVATE, FINAL).build()); } value.addMethod(valueConstructor(d)); for (ExecutableElement field : d.fields()) { value.addMethod(valueGetter(d, field)); } value.addMethod(valueToBuilder(d)); value.addMethod(valueEquals(d)); value.addMethod(valueHashCode(d)); value.addMethod(valueToString(d)); return value.build(); }
private TypeSpec valueClass(final Descriptor d) throws AutoMatterProcessorException { TypeSpec.Builder value = TypeSpec.classBuilder("Value") .addTypeVariables(d.typeVariables()) .addModifiers(PRIVATE, STATIC, FINAL) .addSuperinterface(valueType(d)); for (ExecutableElement field : d.fields()) { value.addField(FieldSpec.builder(fieldType(d, field), fieldName(field), PRIVATE, FINAL).build()); } value.addMethod(valueConstructor(d)); for (ExecutableElement field : d.fields()) { value.addMethod(valueGetter(d, field)); } value.addMethod(valueToBuilder(d)); value.addMethod(valueEquals(d)); value.addMethod(valueHashCode(d)); value.addMethod(valueToString(d)); return value.build(); }
private TypeSpec mapperTypeSpec(DataConstructor dc) { return TypeSpec.interfaceBuilder(mapperInterfaceName(dc)) .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .addTypeVariables(mapperVariables(dc).collect(Collectors.toList())) .addMethod(MethodSpec.methodBuilder(dc.deconstructor().method().getSimpleName().toString()) .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) .addParameters(zip(dc.deconstructor() .method() .getParameters(), dc.deconstructor().visitorMethodType().getParameterTypes()) .stream() .map(param -> ParameterSpec .builder(TypeName.get(param._2()), param._1().getSimpleName().toString()) .build()) .collect(Collectors.toList())) .returns(TypeName.get(dc.deconstructor().returnTypeVariable())) .build()) .build(); }
private TypeSpec.Builder factoryBuilder(ProvisionBinding binding) { TypeSpec.Builder factoryBuilder = classBuilder(nameGeneratedType(binding)) .addModifiers(PUBLIC, FINAL) .addSuperinterface(factoryTypeName(binding)) .addTypeVariables(bindingTypeElementTypeVariableNames(binding)); addConstructorAndFields(binding, factoryBuilder); factoryBuilder.addMethod(getMethod(binding)); addCreateMethod(binding, factoryBuilder); factoryBuilder.addMethod( ProvisionMethod.create(binding, compilerOptions, elements).toMethodSpec()); gwtIncompatibleAnnotation(binding).ifPresent(factoryBuilder::addAnnotation); return factoryBuilder; }
/** * Creates a new {@link TypeSpec.Builder} for the class that is generated by the extension. It * will add a final or abstract modifier, the superclass and a constructor that calls super. The * returned TypeSpec will also include all TypeVariables if the AutoValue class is generic. */ public static TypeSpec.Builder newTypeSpecBuilder( Context context, String className, String classToExtend, boolean isFinal) { TypeVariableName[] typeVariables = getTypeVariables(context.autoValueClass()); return TypeSpec.classBuilder(className) .addModifiers(isFinal ? FINAL : ABSTRACT) .addTypeVariables(Arrays.asList(typeVariables)) .superclass(getSuperClass(context.packageName(), classToExtend, typeVariables)) .addMethod(newConstructor(context.properties())); }
public final TypeSpec type() { return TypeSpec.classBuilder(naming.levelClassName()) .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .addTypeVariables(typeVariables()) .superclass(naming.levelSuperclassTypeName()) .addFields(fields()) .addMethod(constructor()) .addMethods(allowedChildMethods()) .addMethod(endTag()) .addMethod(self()) .build(); }
typeBuilder = TypeSpec.classBuilder(newTypeName); typeBuilder.addTypeVariables(typeToExtend.getTypeParameterElements() .stream() .map(TypeVariableName::get)
private void generateDefaultTraversal(final Context ctx) throws IOException { final TypeSpec.Builder defaultTraversalClass = TypeSpec.classBuilder(ctx.defaultTraversalClazz) .addModifiers(Modifier.PUBLIC) .addTypeVariables(Arrays.asList(TypeVariableName.get("S"), TypeVariableName.get("E"))) .superclass(TypeName.get(elementUtils.getTypeElement(DefaultTraversal.class.getCanonicalName()).asType())) .addSuperinterface(ParameterizedTypeName.get(ctx.traversalClassName, TypeVariableName.get("S"), TypeVariableName.get("E")));
private void generateTraversalInterface(final Context ctx) throws IOException { final TypeSpec.Builder traversalInterface = TypeSpec.interfaceBuilder(ctx.traversalClazz) .addModifiers(Modifier.PUBLIC) .addTypeVariables(Arrays.asList(TypeVariableName.get("S"), TypeVariableName.get("E"))) .addSuperinterface(TypeName.get(ctx.annotatedDslType.asType())); // process the methods of the GremlinDsl annotated class for (ExecutableElement templateMethod : findMethodsOfElement(ctx.annotatedDslType, null)) { traversalInterface.addMethod(constructMethod(templateMethod, ctx.traversalClassName, ctx.dslName, Modifier.PUBLIC, Modifier.DEFAULT)); } // process the methods of GraphTraversal final TypeElement graphTraversalElement = elementUtils.getTypeElement(GraphTraversal.class.getCanonicalName()); final Predicate<ExecutableElement> ignore = e -> e.getSimpleName().contentEquals("asAdmin") || e.getSimpleName().contentEquals("iterate"); for (ExecutableElement templateMethod : findMethodsOfElement(graphTraversalElement, ignore)) { traversalInterface.addMethod(constructMethod(templateMethod, ctx.traversalClassName, ctx.dslName, Modifier.PUBLIC, Modifier.DEFAULT)); } // there are weird things with generics that require this method to be implemented if it isn't already present // in the GremlinDsl annotated class extending from GraphTraversal traversalInterface.addMethod(MethodSpec.methodBuilder("iterate") .addModifiers(Modifier.PUBLIC, Modifier.DEFAULT) .addAnnotation(Override.class) .addStatement("$T.super.iterate()", ClassName.get(ctx.annotatedDslType)) .addStatement("return this") .returns(ParameterizedTypeName.get(ctx.traversalClassName, TypeVariableName.get("S"), TypeVariableName.get("E"))) .build()); final JavaFile traversalJavaFile = JavaFile.builder(ctx.packageName, traversalInterface.build()).build(); traversalJavaFile.writeTo(filer); }
propsBuilderClassBuilder.addTypeVariables(specModel.getTypeVariables());
TypeSpec.classBuilder(getStateUpdateClassName(updateStateMethod)) .addModifiers(Modifier.PRIVATE, Modifier.STATIC) .addTypeVariables(specModel.getTypeVariables()) .addSuperinterface(specModel.getUpdateStateInterface()); stateUpdateClassBuilder.addTypeVariables( MethodParamModelUtils.getTypeVariables(methodParam));
.build()) .addModifiers(Modifier.STATIC) .addTypeVariables(specModel.getTypeVariables());
TypeSpec.classBuilder(mountSpecModel.getComponentName()) .superclass(ClassNames.COMPONENT) .addTypeVariables(mountSpecModel.getTypeVariables());
TypeSpec.classBuilder(layoutSpecModel.getComponentName()) .superclass(ClassNames.COMPONENT) .addTypeVariables(layoutSpecModel.getTypeVariables());
TypeSpec.classBuilder(specModel.getComponentName()) .superclass(SectionClassNames.SECTION) .addTypeVariables(specModel.getTypeVariables());
TypeSpec.classBuilder(specModel.getComponentName()) .superclass(SectionClassNames.SECTION) .addTypeVariables(specModel.getTypeVariables());
@Override public <T extends SpecModel & HasEnclosedSpecModel> TypeSpec generate(T specModel) { final TypeSpec.Builder typeSpec = TypeSpec.classBuilder(specModel.getComponentName()) .addSuperinterface(specModel.getSpecTypeName()) .addModifiers(Modifier.FINAL); if (!specModel.getTypeVariables().isEmpty()) { typeSpec.addTypeVariables(specModel.getTypeVariables()); } if (specModel.isPublic()) { typeSpec.addModifiers(Modifier.PUBLIC); } TypeSpecDataHolder.newBuilder() .addTypeSpecDataHolder(JavadocGenerator.generate(specModel)) .addTypeSpecDataHolder(MatcherGenerator.generate(specModel)) .build() .addToTypeSpec(typeSpec); return typeSpec.build(); } }