in thrifty-java-codegen/src/main/kotlin/com/microsoft.thrifty.gen/ServiceBuilder.kt [47:106]
fun buildServiceInterface(service: ServiceType): TypeSpec {
val serviceSpec = TypeSpec.interfaceBuilder(service.name)
.addModifiers(Modifier.PUBLIC)
service.documentation.let {
if (it.isNotEmpty()) {
serviceSpec.addJavadoc(it)
}
}
if (service.isDeprecated) {
serviceSpec.addAnnotation(AnnotationSpec.builder(Deprecated::class.java).build())
}
service.extendsService?.let {
val superType = it.trueType
val superTypeName = typeResolver.getJavaClass(superType)
serviceSpec.addSuperinterface(superTypeName)
}
for (method in service.methods) {
val allocator = NameAllocator()
var tag = 0
val methodBuilder = MethodSpec.methodBuilder(method.name)
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
if (method.hasJavadoc) {
methodBuilder.addJavadoc(method.documentation)
}
for (field in method.parameters) {
val fieldName = fieldNamer.getName(field)
val name = allocator.newName(fieldName, ++tag)
val paramType = field.type.trueType
val paramTypeName = typeResolver.getJavaClass(paramType)
methodBuilder.addParameter(paramTypeName, name)
}
val callbackName = allocator.newName("callback", ++tag)
val returnType = method.returnType
val returnTypeName = if (returnType == BuiltinType.VOID) {
ClassName.get("kotlin", "Unit")
} else {
typeResolver.getJavaClass(returnType.trueType)
}
val callbackInterfaceName = ParameterizedTypeName.get(
TypeNames.SERVICE_CALLBACK, returnTypeName)
methodBuilder.addParameter(callbackInterfaceName, callbackName)
serviceSpec.addMethod(methodBuilder.build())
}
return serviceSpec.build()
}