@@ -7,15 +7,10 @@ import dev.mokkery.internal.MokkeryConfig.RUNTIME_DEPENDENCY
77import dev.mokkery.internal.MokkeryConfig.VERSION
88import dev.mokkery.internal.options.MokkeryOptionProjection
99import dev.mokkery.internal.options.MokkeryOptions
10- import dev.mokkery.internal.options.get
10+ import dev.mokkery.internal.options.MokkeryOptionsContainer
1111import org.gradle.api.Project
12- import org.gradle.api.provider.Property
13- import org.gradle.api.provider.Provider
1412import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
15- import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
16- import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
1713import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
18- import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
1914import org.jetbrains.kotlin.gradle.plugin.kotlinToolingVersion
2015import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
2116import org.jetbrains.kotlin.tooling.core.toKotlinVersion
@@ -25,34 +20,41 @@ import org.jetbrains.kotlin.tooling.core.toKotlinVersion
2520 * * Adding runtime dependency
2621 * * Adding configured compiler plugin
2722 */
28- public class MokkeryGradlePlugin : KotlinCompilerPluginSupportPlugin {
23+ public class MokkeryGradlePlugin : BaseMokkeryGradlePlugin () {
24+
25+ override val options: MokkeryOptionsContainer = MokkeryOptions
26+
27+ override fun rule (project : Project ): ApplicationRule = project.mokkery.rule.get()
28+
29+ override fun optionProjection (project : Project ): MokkeryOptionProjection <MokkeryGradleProperty <Any >> {
30+ val extension = project.mokkery
31+ return MokkeryOptionProjection { option ->
32+ val property = when (option) {
33+ MokkeryOptions .Core .defaultMockMode -> extension.defaultMockMode
34+ MokkeryOptions .Core .defaultVerifyMode -> extension.defaultVerifyMode
35+ MokkeryOptions .Core .ignoreFinalMembers -> extension.ignoreFinalMembers
36+ MokkeryOptions .Core .ignoreInlineMembers -> extension.ignoreInlineMembers
37+ MokkeryOptions .Core .enableFirDiagnostics -> extension.enableFirDiagnostics
38+ MokkeryOptions .Stubs .allowClassInheritance -> extension.stubs.allowClassInheritance
39+ MokkeryOptions .Stubs .allowConcreteClassInstantiation -> extension.stubs.allowConcreteClassInstantiation
40+ MokkeryOptions .Annotations .copyToMock -> extension.annotations.copyToMock
41+ else -> error(" Missing mapping for option $option " )
42+ }
43+ MokkeryGradleProperty .fromAsAny(property)
44+ }
45+ }
2946
3047 override fun apply (target : Project ) {
3148 target.checkKotlinSetup()
3249 val mokkery = target
3350 .extensions
3451 .create(" mokkery" , MokkeryGradleExtension ::class .java)
3552 mokkery.rule.convention(ApplicationRule .AllTests )
36- val gradleProperty = gradlePropertyProjection(target)
37- MokkeryOptions .forEach {
38- it.get(gradleProperty)?.convention(it.defaultValues.singleOrNull())
39- }
53+ applyOptionConventions(target)
4054 target.configureDependencies()
4155 super .apply (target)
4256 }
4357
44- override fun applyToCompilation (
45- kotlinCompilation : KotlinCompilation <* >
46- ): Provider <List <SubpluginOption >> = kotlinCompilation.run {
47- target.project.provider {
48- val gradleProperty = gradlePropertyProjection(project)
49- MokkeryOptions .mapNotNull {
50- val value = it.get(gradleProperty)?.get() ? : return @mapNotNull null
51- SubpluginOption (it.name, it.type.serializer.serialize(value))
52- }
53- }
54- }
55-
5658 override fun getCompilerPluginId (): String = MokkeryConfig .PLUGIN_ID
5759
5860 override fun getPluginArtifact (): SubpluginArtifact {
@@ -63,27 +65,6 @@ public class MokkeryGradlePlugin : KotlinCompilerPluginSupportPlugin {
6365 )
6466 }
6567
66- override fun isApplicable (kotlinCompilation : KotlinCompilation <* >): Boolean {
67- val project = kotlinCompilation.target.project
68- val sourceSet = runCatching { kotlinCompilation.defaultSourceSet }
69- .getOrNull()
70- ? : return run {
71- val unsupportedCompilationWarning = project
72- .findProperty(" dev.mokkery.unsupportedCompilationWarnings" )
73- .toString()
74- .toBooleanStrictOrNull()
75- ? : true
76- if (unsupportedCompilationWarning) {
77- val log = " w: Compilation {} might not support compiler plugins (e.g. known issue with Android test fixtures compilations)!" +
78- " Mokkery might not work correctly in associated source set!" +
79- " To hide this message, add 'dev.mokkery.unsupportedCompilationWarnings=false' to the Gradle properties."
80- project.logger.warn(log, kotlinCompilation.name)
81- }
82- false
83- }
84- return project.mokkery.rule.get().isApplicable(sourceSet)
85- }
86-
8768 private fun Project.checkKotlinSetup () {
8869 if (extensions.findByName(" kotlin" ) == null ) {
8970 error(" Kotlin plugin not applied! Mokkery requires kotlin plugin!" )
@@ -130,24 +111,4 @@ public class MokkeryGradlePlugin : KotlinCompilerPluginSupportPlugin {
130111 private fun KotlinVersion (string : String ): KotlinVersion = KotlinToolingVersion (string).toKotlinVersion()
131112}
132113
133- @Suppress(" UNCHECKED_CAST" )
134- private fun gradlePropertyProjection (
135- project : Project
136- ) : MokkeryOptionProjection <Property <Any >? > {
137- val extension = project.mokkery
138- return MokkeryOptionProjection {
139- when (it) {
140- MokkeryOptions .Core .defaultMockMode -> extension.defaultMockMode
141- MokkeryOptions .Core .defaultVerifyMode -> extension.defaultVerifyMode
142- MokkeryOptions .Core .ignoreFinalMembers -> extension.ignoreFinalMembers
143- MokkeryOptions .Core .ignoreInlineMembers -> extension.ignoreInlineMembers
144- MokkeryOptions .Core .enableFirDiagnostics -> extension.enableFirDiagnostics
145- MokkeryOptions .Stubs .allowClassInheritance -> extension.stubs.allowClassInheritance
146- MokkeryOptions .Stubs .allowConcreteClassInstantiation -> extension.stubs.allowConcreteClassInstantiation
147- MokkeryOptions .Annotations .copyToMock -> extension.annotations.copyToMock
148- else -> null
149- } as ? Property <Any >
150- }
151- }
152-
153114private val Project .mokkery get() = extensions.getByType(MokkeryGradleExtension ::class .java)
0 commit comments