11package com.github.gmazzo.buildconfig.internal.bindings
22
33import com.github.gmazzo.buildconfig.BuildConfigClassSpec
4- import com.github.gmazzo.buildconfig.BuildConfigValue
4+ import com.github.gmazzo.buildconfig.BuildConfigField
55import com.github.gmazzo.buildconfig.generators.BuildConfigKotlinGenerator
66import com.github.gmazzo.buildconfig.internal.BuildConfigExtensionInternal
77import com.github.gmazzo.buildconfig.internal.bindings.JavaBinder.registerExtension
@@ -142,23 +142,16 @@ internal object KotlinBinder {
142142 fillMissingActuals(specsOfTargets)
143143 }
144144
145- private fun BuildConfigClassSpec.hasExpects () =
146- buildConfigFields.any { it.value.orNull is BuildConfigValue .Expect }
147-
148- private fun BuildConfigClassSpec.hasActuals () =
149- buildConfigFields.any { it.tags.get().contains(BuildConfigKotlinGenerator .TagActual ) }
150-
151145 private fun lookForExpectFields (spec : BuildConfigClassSpec , dependsOnSpecs : Set <BuildConfigClassSpec >) {
152146 val expectSpecs = linkedSetOf<BuildConfigClassSpec >()
153147 for (field in spec.buildConfigFields) {
154148 for (dependsOnSpec in dependsOnSpecs) {
155149 val dependsOnField = dependsOnSpec.buildConfigFields.findByName(field.name) ? : continue
156150
157- check(dependsOnField.value.orNull is BuildConfigValue . Expect ) {
151+ check(dependsOnField.isExpect ) {
158152 " Field '${dependsOnField.name} ' in '$dependsOnSpec ' must be `expect`, since it's defined as `actual` in '$spec '"
159153 }
160154
161- dependsOnField.tags.add(BuildConfigKotlinGenerator .TagExpect )
162155 field.tags.add(BuildConfigKotlinGenerator .TagActual )
163156 expectSpecs.add(dependsOnSpec)
164157
@@ -170,9 +163,7 @@ internal object KotlinBinder {
170163 // then, in case we have mixed expect and regular constants in the same spec, we promote them all to this spec
171164 for (expectSpec in expectSpecs) {
172165 for (expectField in expectSpec.buildConfigFields) {
173- expectField.tags.add(BuildConfigKotlinGenerator .TagExpect )
174-
175- if (expectField.value.orNull.isExpectNoDefault) continue
166+ if (expectField.isExpectNoDefault) continue
176167 if (spec.buildConfigFields.names.contains(expectField.name)) continue
177168
178169 spec.buildConfigField(expectField).tags.add(BuildConfigKotlinGenerator .TagActual )
@@ -187,7 +178,7 @@ internal object KotlinBinder {
187178 for (expectSpec in dependsOnSpecs) {
188179 for (expectField in expectSpec.buildConfigFields) {
189180 if (spec.buildConfigFields.names.contains(expectField.name)) continue
190- if (expectField.value.orNull. isExpectNoDefault) continue
181+ if (expectField.isExpectNoDefault) continue
191182
192183 spec.buildConfigField(expectField)
193184 .tags.add(BuildConfigKotlinGenerator .TagActual )
@@ -199,8 +190,20 @@ internal object KotlinBinder {
199190 }
200191 }
201192
202- private val BuildConfigValue ?.isExpectNoDefault: Boolean
203- get() = this is BuildConfigValue .Expect && value == null
193+ private fun BuildConfigClassSpec.hasExpects () =
194+ buildConfigFields.any { it.isExpect }
195+
196+ private fun BuildConfigClassSpec.hasActuals () =
197+ buildConfigFields.any { it.isActual }
198+
199+ private val BuildConfigField .isExpect: Boolean
200+ get() = BuildConfigKotlinGenerator .TagExpect in tags.get()
201+
202+ private val BuildConfigField .isExpectNoDefault: Boolean
203+ get() = isExpect && value.get().value == null
204+
205+ private val BuildConfigField .isActual: Boolean
206+ get() = BuildConfigKotlinGenerator .TagActual in tags.get()
204207
205208 }
206209
0 commit comments