Skip to content

Commit

Permalink
Release version 0.4.0-beta01: Update Anvil to 2.5.0-beta01 and use Ge…
Browse files Browse the repository at this point in the history
…neratedFileWithSources instead of GeneratedFile to support incremental compilation
  • Loading branch information
SteinerOk committed Feb 16, 2024
1 parent 435a84c commit 08c189e
Show file tree
Hide file tree
Showing 13 changed files with 151 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.appcomponent.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -76,7 +77,7 @@ public class AppcomponentInjectionGenerator : AlwaysApplicableCodeGenerator {
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> = projectFiles
): Collection<FileWithContent> = projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
clazz.isAnnotatedWith(FqNames.injectWith) &&
Expand All @@ -91,7 +92,10 @@ public class AppcomponentInjectionGenerator : AlwaysApplicableCodeGenerator {
}
.toList()

private fun generateComponent(codeGenDir: File, clazz: ClassReference): GeneratedFile {
private fun generateComponent(
codeGenDir: File,
clazz: ClassReference,
): GeneratedFileWithSources {
val packageName = clazz.packageFqName.safePackageString(dotSuffix = false)
val fileName = clazz.generateClassName().relativeClassName.asString() + "_Injection"
//
Expand Down Expand Up @@ -142,6 +146,12 @@ public class AppcomponentInjectionGenerator : AlwaysApplicableCodeGenerator {
}
addType(ibmInterface)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.appcomponent.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -68,7 +69,7 @@ public class AppcomponentIntegrationGenerator : AlwaysApplicableCodeGenerator {
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> {
): Collection<FileWithContent> {
return projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
Expand All @@ -85,7 +86,10 @@ public class AppcomponentIntegrationGenerator : AlwaysApplicableCodeGenerator {
.toList()
}

private fun generateIntegration(codeGenDir: File, clazz: ClassReference): GeneratedFile {
private fun generateIntegration(
codeGenDir: File,
clazz: ClassReference,
): GeneratedFileWithSources {
val packageName = integrationPkg
val scopeFqName = clazz.getScopeFromComponentOrSubcomponent()
val scopeClassName = scopeFqName.asClassName()
Expand Down Expand Up @@ -125,6 +129,12 @@ public class AppcomponentIntegrationGenerator : AlwaysApplicableCodeGenerator {
}
addType(ioInterface)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ tasks.withType<KotlinCompilationTask<*>>().configureEach {

anvil {
syncGeneratedSources.set(true)
trackSourceFiles.set(true)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.core.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -50,7 +51,7 @@ public class ChildScopesGenerator : AlwaysApplicableCodeGenerator {
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> = projectFiles
): Collection<FileWithContent> = projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
clazz.isAnnotatedWith(FqNames.sealantConfiguration)
Expand All @@ -63,7 +64,7 @@ public class ChildScopesGenerator : AlwaysApplicableCodeGenerator {
}
.toList()

private fun generateScopes(codeGenDir: File, clazz: ClassReference): GeneratedFile? {
private fun generateScopes(codeGenDir: File, clazz: ClassReference): GeneratedFileWithSources? {
val hasViewModelSupport = clazz.hasSealantFeatureForScope(SealantFeature.ViewModel)
if (!hasViewModelSupport) return null
//
Expand All @@ -85,6 +86,12 @@ public class ChildScopesGenerator : AlwaysApplicableCodeGenerator {
}
addType(vmScopeClass)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.fragment.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -66,7 +67,7 @@ public class FragmentCreationGenerator : AlwaysApplicableCodeGenerator {
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> = projectFiles
): Collection<FileWithContent> = projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
clazz.isAnnotatedWith(FqNames.contributesFragment) &&
Expand All @@ -84,7 +85,10 @@ public class FragmentCreationGenerator : AlwaysApplicableCodeGenerator {
}
.toList()

private fun generateCreation(codeGenDir: File, clazz: ClassReference): GeneratedFile {
private fun generateCreation(
codeGenDir: File,
clazz: ClassReference,
): GeneratedFileWithSources {
val packageName = clazz.packageFqName.safePackageString(dotSuffix = false)
val fileName = clazz.generateClassName().relativeClassName.asString() + "_Creation"
//
Expand Down Expand Up @@ -126,6 +130,12 @@ public class FragmentCreationGenerator : AlwaysApplicableCodeGenerator {
}
addType(bmInterface)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.fragment.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -78,7 +79,7 @@ public class FragmentIntegrationGenerator : AlwaysApplicableCodeGenerator {
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> = projectFiles
): Collection<FileWithContent> = projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
clazz.isComponentOrSubcomponentWithSealantFeature(SealantFeature.Fragment)
Expand All @@ -93,7 +94,10 @@ public class FragmentIntegrationGenerator : AlwaysApplicableCodeGenerator {
}
.toList()

private fun generateIntegration(codeGenDir: File, clazz: ClassReference): GeneratedFile {
private fun generateIntegration(
codeGenDir: File,
clazz: ClassReference,
): GeneratedFileWithSources {
val packageName = integrationPkg
val scopeFqName = clazz.getScopeFromComponentOrSubcomponent()
val scopeClassName = scopeFqName.asClassName()
Expand Down Expand Up @@ -149,6 +153,12 @@ public class FragmentIntegrationGenerator : AlwaysApplicableCodeGenerator {
}
addType(ffoInterface)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ android.nonTransitiveRClass=true
android.suppressUnsupportedCompileSdk=34
#
GROUP=io.github.steinerok.sealant
VERSION_NAME=0.3.2-SNAPSHOT
VERSION_NAME=0.4.0-beta01
#
POM_NAME=Sealant
POM_DESCRIPTION=Android injection using the Anvil and Dagger2.
Expand Down
2 changes: 1 addition & 1 deletion gradle/dependencies.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ androidPlugin = "8.2.2"
versionsPlugin = "0.51.0"
spotlessPlugin = "6.25.0"
ktlintTool = "1.0.1"
anvilPlugin = "2.4.9"
anvilPlugin = "2.5.0-beta01"
grgitPlugin = "5.2.1"
mavenPublishPlugin = "0.27.0"
# KotlinX libraries
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.viewmodel.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -109,25 +110,28 @@ public class ViewModelCreationGenerator : AlwaysApplicableCodeGenerator {
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> = projectFiles
): Collection<FileWithContent> = projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
clazz.isAnnotatedWith(FqNames.contributesViewModel) &&
clazz.getScopeFrom(FqNames.contributesViewModel)
.hasSealantFeatureForScope(SealantFeature.ViewModel)
clazz.getScopeFrom(FqNames.contributesViewModel)
.hasSealantFeatureForScope(SealantFeature.ViewModel)
}
.onEach { clazz ->
require(clazz.isViewModel()) {
"The annotation `@SealantViewModel` can only be applied " +
"to classes which extend ${FqNames.androidxViewModel.asString()}"
"to classes which extend ${FqNames.androidxViewModel.asString()}"
}
}
.flatMap { clazz ->
listOfNotNull(generateCreation(codeGenDir, clazz))
}
.toList()

private fun generateCreation(codeGenDir: File, clazz: ClassReference): GeneratedFile {
private fun generateCreation(
codeGenDir: File,
clazz: ClassReference,
): GeneratedFileWithSources {
val packageName = clazz.packageFqName.safePackageString(dotSuffix = false)
val fileName = clazz.generateClassName().relativeClassName.asString() + "_Creation"
//
Expand Down Expand Up @@ -178,6 +182,12 @@ public class ViewModelCreationGenerator : AlwaysApplicableCodeGenerator {
}
addType(bmInterface)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.viewmodel.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -109,7 +110,7 @@ public class ViewModelIntegrationGenerator : AlwaysApplicableCodeGenerator {
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> = projectFiles
): Collection<FileWithContent> = projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
clazz.isComponentOrSubcomponentWithSealantFeature(SealantFeature.ViewModel)
Expand All @@ -124,7 +125,10 @@ public class ViewModelIntegrationGenerator : AlwaysApplicableCodeGenerator {
}
.toList()

private fun generateIntegration(codeGenDir: File, clazz: ClassReference): GeneratedFile {
private fun generateIntegration(
codeGenDir: File,
clazz: ClassReference,
): GeneratedFileWithSources {
val packageName = integrationPkg
val scopeFqName = clazz.getScopeFromComponentOrSubcomponent()
val scopeClassName = scopeFqName.asClassName()
Expand Down Expand Up @@ -250,6 +254,12 @@ public class ViewModelIntegrationGenerator : AlwaysApplicableCodeGenerator {
}
addType(vmfoInterface)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ package dev.steinerok.sealant.viewmodel.generator

import com.google.auto.service.AutoService
import com.squareup.anvil.compiler.api.CodeGenerator
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.anvil.compiler.api.FileWithContent
import com.squareup.anvil.compiler.api.GeneratedFileWithSources
import com.squareup.anvil.compiler.api.createGeneratedFile
import com.squareup.anvil.compiler.internal.reference.ClassReference
import com.squareup.anvil.compiler.internal.reference.asClassName
Expand Down Expand Up @@ -57,7 +58,7 @@ public class ViewModelSubcomponentModuleWrapperGenerator : AlwaysApplicableCodeG
codeGenDir: File,
module: ModuleDescriptor,
projectFiles: Collection<KtFile>
): Collection<GeneratedFile> = projectFiles
): Collection<FileWithContent> = projectFiles
.classAndInnerClassReferences(module)
.filter { clazz ->
clazz.isAnnotatedWith(FqNames.contributesToViewModel) &&
Expand All @@ -72,7 +73,7 @@ public class ViewModelSubcomponentModuleWrapperGenerator : AlwaysApplicableCodeG
}
.toList()

private fun generateWrapper(codeGenDir: File, clazz: ClassReference): GeneratedFile {
private fun generateWrapper(codeGenDir: File, clazz: ClassReference): GeneratedFileWithSources {
val packageName = clazz.packageFqName.safePackageString(dotSuffix = false)
val fileName = clazz.generateClassName().relativeClassName.asString() + "_Wrapper"
//
Expand All @@ -95,6 +96,12 @@ public class ViewModelSubcomponentModuleWrapperGenerator : AlwaysApplicableCodeG
}
addType(wInterface)
}
return createGeneratedFile(codeGenDir, packageName, fileName, content)
return createGeneratedFile(
codeGenDir = codeGenDir,
packageName = packageName,
fileName = fileName,
content = content,
sourceFile = clazz.containingFileAsJavaFile,
)
}
}
Loading

0 comments on commit 08c189e

Please sign in to comment.