From 3fa71a29448c1641c151846526e6eac83b16b346 Mon Sep 17 00:00:00 2001 From: kaush <1042037+kaushikgopal@users.noreply.github.com> Date: Mon, 26 Jun 2023 23:55:43 -0700 Subject: [PATCH] generate a test file --- .../msusf/processors/ViewModelProcessor.kt | 48 ++++++++++++++++++- app/build.gradle.kts | 3 ++ .../co/kaush/msusf/movies/MSMovieVmImpl.kt | 2 + 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/annotations-processors/src/main/java/co/kaush/msusf/processors/ViewModelProcessor.kt b/annotations-processors/src/main/java/co/kaush/msusf/processors/ViewModelProcessor.kt index ea7336f..50c7d74 100644 --- a/annotations-processors/src/main/java/co/kaush/msusf/processors/ViewModelProcessor.kt +++ b/annotations-processors/src/main/java/co/kaush/msusf/processors/ViewModelProcessor.kt @@ -2,11 +2,13 @@ package co.kaush.msusf.processor import co.kaush.msusf.annotations.ViewModel import com.google.devtools.ksp.processing.CodeGenerator +import com.google.devtools.ksp.processing.Dependencies import com.google.devtools.ksp.processing.KSPLogger import com.google.devtools.ksp.processing.Resolver import com.google.devtools.ksp.processing.SymbolProcessor import com.google.devtools.ksp.symbol.KSAnnotated import com.google.devtools.ksp.symbol.KSClassDeclaration +import com.google.devtools.ksp.validate import com.squareup.kotlinpoet.asClassName /** @@ -44,6 +46,50 @@ class ViewModelProcessor( // hence the use of an iterator to check if it's empty if (!symbols.iterator().hasNext()) return emptyList() - return emptyList() + val sourceFiles = symbols.mapNotNull { it.containingFile } + val fileText = buildString { + append("// ") + append(sourceFiles.joinToString(", ")) + } + val file = + codeGenerator.createNewFile( + Dependencies( + false, + *sourceFiles.toList().toTypedArray(), + ), + "your.generated.file.package", + "GeneratedLists", + ) + + file.write(fileText.toByteArray()) + + /* + symbols.forEach { classDeclaration -> + // The ViewModelContainer provide information on what Dagger Scope the generated classes + // should be added to all of these values are hard coded strings not the best, but I couldn't + // figure out a better way + val scopeArg: KSValueArgument? = + classDeclaration.annotations + .first { it.shortName.asString() == viewModelClassName.simpleName } + .arguments + .firstOrNull { arg -> arg.name?.asString() == "scope" } + + if (scopeArg == null) { + classDeclaration.accept(ViewModelVisitor(codeGenerator, logger), Unit) + } else { + val scopeClassType = (scopeArg.value as KSType).toClassName() + + if (scopeClassType == Nothing::class.asClassName() || + scopeClassType == Void::class.asClassName()) { + classDeclaration.accept(ViewModelVisitor(codeGenerator, logger), Unit) + } else { + // classDeclaration.accept(Visitor(scopeClassType), Unit) + } + } + + } + */ + + return (symbols).filterNot { it.validate() }.toList() } } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bdc9533..f311a45 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -48,6 +48,9 @@ dependencies { ksp(libs.kotlin.inject.compiler) implementation(libs.kotlin.inject.runtime) + ksp(project(":annotations-processors")) + implementation(project(":annotations")) + implementation(libs.kotlin.stdlib) implementation(libs.constraintlayout) implementation(libs.flowbinding) diff --git a/app/src/main/java/co/kaush/msusf/movies/MSMovieVmImpl.kt b/app/src/main/java/co/kaush/msusf/movies/MSMovieVmImpl.kt index 13cd075..392d5f5 100644 --- a/app/src/main/java/co/kaush/msusf/movies/MSMovieVmImpl.kt +++ b/app/src/main/java/co/kaush/msusf/movies/MSMovieVmImpl.kt @@ -1,10 +1,12 @@ package co.kaush.msusf.movies +import co.kaush.msusf.annotations.ViewModel import co.kaush.msusf.usf.UsfVmImpl import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow +@ViewModel class MSMovieVmImpl( private val movieRepo: MSMovieRepository, coroutineScope: CoroutineScope,