stateContainerClassBuilder.addField( FieldSpec.builder( ParameterizedTypeName.get(ClassNames.LIST, specModel.getTransitionClass().box()), GeneratorConstants.STATE_TRANSITIONS_FIELD_NAME) .initializer("new $T<>()", ClassNames.ARRAY_LIST) .addAnnotation(Override.class) .returns( ParameterizedTypeName.get(ClassNames.LIST, specModel.getTransitionClass().box())) .addCode( CodeBlock.builder()
@Override protected void registerItem(EndpointsEntry entry, MethodSpec.Builder methodBuilder) { final FullClassName handlerEndpoint = new FullClassName(entry.element.fullQualifiedNoneGenericName() + "EndpointHandler"); String path = entry.element.getAnnotation(Handler.class).value(); ClassName handlerEndpointType = ClassName.get(handlerEndpoint.asPackage(), handlerEndpoint.asSimpleName()); MethodSpec getMethod = MethodSpec.methodBuilder("get") .addAnnotation(Override.class) .addModifiers(Modifier.PUBLIC) .returns(handlerEndpointType) .addStatement("return new $T()", handlerEndpointType) .build(); TypeSpec factoryType = TypeSpec.anonymousClassBuilder("") .addSuperinterface(ParameterizedTypeName.get(ClassName.get(Supplier.class), handlerEndpointType.box())) .addMethod(getMethod) .build(); methodBuilder.addStatement("registry.registerEndpoint(\"" + path + "\", $L)", factoryType); }
public static ParameterSpec getParameterSpec(ClassName className, Modifier... modifiers) { return ParameterSpec.builder( className.box(), getLowerCamelFromUpperCamel(className.simpleName()), modifiers ).build(); }