Kotlin Academy · Aula

Gerando arquivos de código-fonte Kotlin com KotlinPoet

Use KotlinPoet em um processador KSP para gerar código Kotlin seguro quanto a tipos.

Aula 3 de 414 etapas

Gerando arquivos de código-fonte Kotlin com KotlinPoet é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

O que é KotlinPoet?

KotlinPoet é a API Kotlin da Square para gerar arquivos de código-fonte .kt de forma programática. Ela produz código Kotlin bem formatado e idiomático e se integra naturalmente ao CodeGenerator do KSP.

Adicionando a dependência

Adicione KotlinPoet ao módulo do processador:

dependencies {
    implementation("com.squareup:kotlinpoet:1.17.0")
    implementation("com.squareup:kotlinpoet-ksp:1.17.0") // KSP extensions
}

FileSpec: a raiz de um arquivo gerado

FileSpec.builder(packageName, fileName) é o ponto de entrada. Adicione tipos, funções e propriedades a ele e, em seguida, grave o resultado por meio do CodeGenerator do KSP:

val file = FileSpec.builder("com.example.generated", "MyFactory")
    .addType( /* TypeSpec here */ )
    .build()

TypeSpec: definindo uma classe

Use TypeSpec.classBuilder() para classes, objectBuilder() para objetos e interfaceBuilder() para interfaces. Encadeie chamadas do construtor para adicionar funções, propriedades e interfaces superiores:

val classSpec = TypeSpec.classBuilder("MyFactory")
    .addModifiers(KModifier.PUBLIC)
    .addFunction( /* FunSpec */ )
    .build()

FunSpec: gerando uma função

FunSpec.builder(name) cria uma função. Use addParameter(), returns() e addStatement() para construir sua assinatura e seu corpo:

val funSpec = FunSpec.builder("create")
    .addParameter("name", String::class)
    .returns(String::class)
    .addStatement("return "Hello, %L!", name")
    .build()

PropertySpec: gerando uma propriedade

Use PropertySpec.builder(name, type) para gerar propriedades. Especifique KModifier.PRIVATE, KModifier.OVERRIDE ou use mutable() para var:

val propSpec = PropertySpec.builder("tag", String::class)
    .initializer("%S", "MyClass")
    .addModifiers(KModifier.PRIVATE)
    .build()

Especificadores de formato de código

O KotlinPoet usa especificadores de formato em addStatement() e initializer():

  • %L — literal (sem aspas)
  • %S — literal de cadeia de caracteres (com aspas)
  • %T — nome do tipo (gerencia as importações automaticamente)
  • %N — nome (de uma especificação ou cadeia de caracteres)

Importações automáticas com %T

Quando você usa %T com um ClassName, o KotlinPoet adiciona automaticamente a importação necessária. Você nunca precisa escrever instruções de importação manualmente:

val listType = ClassName("kotlin.collections", "List")
val funSpec = FunSpec.builder("items")
    .returns(listType.parameterizedBy(String::class.asTypeName()))
    .addStatement("return emptyList()")
    .build()

Gravando no CodeGenerator do KSP

Use a ponte kotlinpoet-ksp para gravar o FileSpec gerado por meio do CodeGenerator do KSP, preservando os metadados da compilação incremental:

file.writeTo(
    codeGenerator = codeGenerator,
    aggregating = false
)

Gerando funções de extensão

Use FunSpec.builder(name).receiver(type) para gerar funções de extensão:

val extFun = FunSpec.builder("toJson")
    .receiver(ClassName("com.example", "User"))
    .returns(String::class)
    .addStatement("return Gson().toJson(this)")
    .build()

Caso de uso prático: gerador de fábricas

Um processador KSP anota classes de dados com @AutoFactory e usa KotlinPoet para gerar um objeto de fábrica companheiro para cada uma. O arquivo gerado é colocado no mesmo pacote da classe original.

Testando código gerado

Use FileSpec.toString() do KotlinPoet em testes unitários para verificar o texto do código-fonte gerado sem gravá-lo no disco. A biblioteca kotlin-compile-testing-ksp pode compilar e executar código gerado em testes.

Verificação rápida

No KotlinPoet, qual especificador de formato adiciona automaticamente a importação necessária para uma classe referenciada?

Recapitulação: gerando arquivos de código-fonte Kotlin com KotlinPoet

Principais conclusões:

  • FileSpec → arquivo de nível superior; TypeSpec → classe/objeto/interface; FunSpec → função; PropertySpec → propriedade
  • Use %T para referências de tipos — as importações são automáticas
  • Grave usando file.writeTo(codeGenerator) nos processadores KSP
  • Use FileSpec.toString() para testes unitários da saída gerada
Grátis para começar

Aprenda Kotlin com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Gerando arquivos de código-fonte Kotlin com KotlinPoet” é grátis?

Sim — o texto completo de “Gerando arquivos de código-fonte Kotlin com KotlinPoet” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “Gerando arquivos de código-fonte Kotlin com KotlinPoet”?

Use KotlinPoet em um processador KSP para gerar código Kotlin seguro quanto a tipos. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Gerando arquivos de código-fonte Kotlin com KotlinPoet”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. KSP vs KAPT: por que KSP é mais rápido
  2. Escrevendo seu primeiro SymbolProcessor
  3. Gerando arquivos de código-fonte Kotlin com KotlinPoet
  4. Integrando processadores KSP a uma compilação Gradle
← Voltar para Kotlin Academy