diff --git a/CHANGELOG.md b/CHANGELOG.md index f17c71c..3bc05f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. --- ## master +* Workaround issue where mock and spy cache was not invalidated properly * Adding doc for `delegate` and removed return type where not needed ## 2.10.0 diff --git a/gradle.properties b/gradle.properties index 59260a3..9027c7c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,10 +11,10 @@ org.gradle.jvmargs=-Xmx1536m # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true +org.gradle.caching=true + +ksp.incremental=true +ksp.incremental.log=true GROUP=com.careem.mockingbird VERSION=2.11.0-SNAPSHOT diff --git a/mockingbird-processor/src/main/kotlin/com/careem/mockingbird/processor/GenerateMocksSymbolProcessor.kt b/mockingbird-processor/src/main/kotlin/com/careem/mockingbird/processor/GenerateMocksSymbolProcessor.kt index d54e09d..72edc4e 100644 --- a/mockingbird-processor/src/main/kotlin/com/careem/mockingbird/processor/GenerateMocksSymbolProcessor.kt +++ b/mockingbird-processor/src/main/kotlin/com/careem/mockingbird/processor/GenerateMocksSymbolProcessor.kt @@ -17,6 +17,7 @@ package com.careem.mockingbird.processor 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 @@ -39,25 +40,21 @@ class GenerateMocksSymbolProcessor( mockGenerator = MockGenerator(resolver, logger, functionsMiner) spyGenerator = SpyGenerator(resolver, logger, functionsMiner) - resolver.getSymbolsWithAnnotation(MOCK_ANNOTATION) - .map { - if (it !is KSPropertyDeclaration) error("$it is not a property declaration but is annotated with @Mock, not supported") - it.type - } - .distinctBy { - it.resolve().toClassName().canonicalName - } - .forEach { - logger.info(it.resolve().toClassName().canonicalName) - mockGenerator.createClass(it).writeTo( - codeGenerator = codeGenerator, - aggregating = false - ) - } + resolver + .getSymbolsWithAnnotation(MOCK_ANNOTATION) + .generateCode(mockGenerator) - resolver.getSymbolsWithAnnotation(SPY_ANNOTATION) + resolver + .getSymbolsWithAnnotation(SPY_ANNOTATION) + .generateCode(spyGenerator) + return emptyList() + } + + private fun Sequence.generateCode(generator: Generator) { + this .map { - if (it !is KSPropertyDeclaration) error("$it is not a property declaration but is annotated with @Mock, not supported") + if (it !is KSPropertyDeclaration) error("$it is not a property declaration but is annotated with @${generator.resolveSupertype()}, not supported") + logger.info("Process: ${it.type}") it.type } .distinctBy { @@ -65,13 +62,19 @@ class GenerateMocksSymbolProcessor( } .forEach { logger.info(it.resolve().toClassName().canonicalName) - spyGenerator.createClass(it).writeTo( - codeGenerator = codeGenerator, - aggregating = false - ) + generator.createClass(it).apply { + try { + writeTo( + codeGenerator = codeGenerator, + // TODO remove this once ksp will be able to see `containingFiles` of class declared in common main ( required for incremental processing ) + // TODO Dependencies.ALL_FILES is basically disabling incremental processing + dependencies = Dependencies.ALL_FILES + ) + } catch (e: FileAlreadyExistsException) { + logger.info("${generator.resolveSupertype()} already generated by parsing another test") + } + } } - - return emptyList() } companion object {