tangle.work.compiler.component.WorkerMergeComponentModuleGenerator.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tangle-work-compiler Show documentation
Show all versions of tangle-work-compiler Show documentation
Android dependency injection using Anvil
/*
* Copyright (C) 2021 Rick Busarow
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package tangle.work.compiler.component
import com.squareup.anvil.compiler.api.GeneratedFile
import com.squareup.kotlinpoet.AnnotationSpec
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.TypeSpec
import tangle.inject.compiler.ClassNames
import tangle.inject.compiler.FileGenerator
import tangle.inject.compiler.addFunction
import tangle.inject.compiler.buildFile
import tangle.work.compiler.assistedWorkerFactoryMap
import tangle.work.compiler.tangleAssistedWorkerFactoryMap
import java.io.File
object WorkerMergeComponentModuleGenerator : FileGenerator {
override fun generate(
codeGenDir: File,
params: MergeComponentParams
): GeneratedFile {
val packageName = params.packageName
val className = params.mergeComponentModuleClassName
val classNameString = className.simpleName
val content = FileSpec.buildFile(packageName, classNameString) {
TypeSpec.interfaceBuilder(className)
.addAnnotation(ClassNames.module)
.addAnnotation(
AnnotationSpec.builder(ClassNames.contributesTo)
.addMember("%T::class", params.scopeClassName)
.build()
)
.addFunction("bindTangleWorkerFactoryMap") {
addAnnotation(ClassNames.multibinds)
addAnnotation(ClassNames.tangleAssistedWorkerFactoryMap)
addModifiers(KModifier.ABSTRACT)
returns(ClassNames.assistedWorkerFactoryMap)
}
.build()
.let { addType(it) }
}
return createGeneratedFile(codeGenDir, packageName, classNameString, content)
}
}