blob: 6bc51aae9e4a332dabf2cb7460929687005f31e5 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* 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 com.android.build.api.component.impl
import com.android.build.api.artifact.impl.ArtifactsImpl
import com.android.build.api.variant.AarMetadata
import com.android.build.api.variant.AndroidVersion
import com.android.build.api.variant.ComponentIdentity
import com.android.build.api.variant.JavaCompilation
import com.android.build.api.variant.ResValue
import com.android.build.api.variant.TestFixtures
import com.android.build.api.variant.impl.ResValueKeyImpl
import com.android.build.gradle.internal.component.PublishableCreationConfig
import com.android.build.gradle.internal.component.TestFixturesCreationConfig
import com.android.build.gradle.internal.component.VariantCreationConfig
import com.android.build.gradle.internal.component.features.BuildConfigCreationConfig
import com.android.build.gradle.internal.component.features.FeatureNames
import com.android.build.gradle.internal.component.features.ManifestPlaceholdersCreationConfig
import com.android.build.gradle.internal.component.legacy.OldVariantApiLegacySupport
import com.android.build.gradle.internal.core.VariantSources
import com.android.build.gradle.internal.core.dsl.TestFixturesComponentDslInfo
import com.android.build.gradle.internal.dependency.VariantDependencies
import com.android.build.gradle.internal.publishing.VariantPublishingInfo
import com.android.build.gradle.internal.scope.BuildFeatureValues
import com.android.build.gradle.internal.scope.MutableTaskContainer
import com.android.build.gradle.internal.services.TaskCreationServices
import com.android.build.gradle.internal.services.VariantServices
import com.android.build.gradle.internal.tasks.AarMetadataTask.Companion.DEFAULT_MIN_AGP_VERSION
import com.android.build.gradle.internal.tasks.AarMetadataTask.Companion.DEFAULT_MIN_COMPILE_SDK_EXTENSION
import com.android.build.gradle.internal.tasks.factory.GlobalTaskCreationConfig
import com.android.build.gradle.internal.testFixtures.testFixturesFeatureName
import com.android.build.gradle.internal.utils.isKotlinBaseApiPluginApplied
import com.android.build.gradle.internal.variant.VariantPathHelper
import com.android.build.gradle.options.BooleanOption
import com.android.builder.core.BuilderConstants
import com.android.utils.appendCapitalized
import com.android.utils.capitalizeAndAppend
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import javax.inject.Inject
open class TestFixturesImpl @Inject constructor(
componentIdentity: ComponentIdentity,
buildFeatureValues: BuildFeatureValues,
variantDslInfo: TestFixturesComponentDslInfo,
variantDependencies: VariantDependencies,
variantSources: VariantSources,
paths: VariantPathHelper,
artifacts: ArtifactsImpl,
taskContainer: MutableTaskContainer,
override val mainVariant: VariantCreationConfig,
variantServices: VariantServices,
taskCreationServices: TaskCreationServices,
global: GlobalTaskCreationConfig
): ComponentImpl<TestFixturesComponentDslInfo>(
componentIdentity,
buildFeatureValues,
variantDslInfo,
variantDependencies,
variantSources,
paths,
artifacts,
taskContainer = taskContainer,
internalServices = variantServices,
services = taskCreationServices,
global = global
), TestFixtures, TestFixturesCreationConfig {
override val description: String
get() = if (productFlavorList.isNotEmpty()) {
val sb = StringBuilder(50)
dslInfo.componentIdentity.buildType?.let { sb.appendCapitalized(it) }
sb.append(" build for flavor ")
dslInfo.componentIdentity.flavorName?.let { sb.appendCapitalized(it) }
sb.toString()
} else {
dslInfo.componentIdentity.buildType!!.capitalizeAndAppend(" build")
}
// test fixtures doesn't exist in the old variant api
override val oldVariantApiLegacySupport: OldVariantApiLegacySupport? = null
// ---------------------------------------------------------------------------------------------
// PUBLIC API
// ---------------------------------------------------------------------------------------------
override val applicationId: Provider<String> =
internalServices.providerOf(String::class.java, variantDslInfo.namespace)
override val debuggable: Boolean
get() = mainVariant.debuggable
override val minSdk: AndroidVersion
get() = mainVariant.minSdk
override val publishInfo: VariantPublishingInfo?
get() = (mainVariant as? PublishableCreationConfig)?.publishInfo
override val aarMetadata: AarMetadata =
internalServices.newInstance(AarMetadata::class.java).also {
it.minCompileSdk.set(1)
it.minCompileSdkExtension.set(DEFAULT_MIN_COMPILE_SDK_EXTENSION)
it.minAgpVersion.set(DEFAULT_MIN_AGP_VERSION)
}
override val javaCompilation: JavaCompilation =
JavaCompilationImpl(
variantDslInfo.javaCompileOptionsSetInDSL,
buildFeatures.dataBinding,
internalServices
)
// ---------------------------------------------------------------------------------------------
// INTERNAL API
// ---------------------------------------------------------------------------------------------
override val aarOutputFileName: Property<String> =
variantServices.newPropertyBackingDeprecatedApi(
String::class.java,
services.projectInfo.getProjectBaseName().map {
"it-$baseName-testFixtures.${BuilderConstants.EXT_LIB_ARCHIVE}"
}
)
override val buildConfigCreationConfig: BuildConfigCreationConfig? = null
override val manifestPlaceholdersCreationConfig: ManifestPlaceholdersCreationConfig?
get() = mainVariant.manifestPlaceholdersCreationConfig
override val resValues: MapProperty<ResValue.Key, ResValue> by lazy {
resValuesCreationConfig?.resValues
?: warnAboutAccessingVariantApiValueForDisabledFeature(
featureName = FeatureNames.RES_VALUES,
apiName = "resValues",
value = internalServices.mapPropertyOf(
ResValue.Key::class.java,
ResValue::class.java,
dslInfo.androidResourcesDsl!!.getResValues()
)
)
}
override fun makeResValueKey(type: String, name: String): ResValue.Key = ResValueKeyImpl(type, name)
override val pseudoLocalesEnabled: Property<Boolean> by lazy {
androidResourcesCreationConfig?.pseudoLocalesEnabled
?: warnAboutAccessingVariantApiValueForDisabledFeature(
featureName = FeatureNames.ANDROID_RESOURCES,
apiName = "pseudoLocalesEnabled",
value = internalServices.newPropertyBackingDeprecatedApi(
Boolean::class.java,
dslInfo.androidResourcesDsl!!.isPseudoLocalesEnabled
)
)
}
override fun getArtifactName(name: String): String {
return "$testFixturesFeatureName-$name"
}
override val useBuiltInKotlinSupport: Boolean =
internalServices.projectOptions.get(BooleanOption.ENABLE_TEST_FIXTURES_KOTLIN_SUPPORT)
&& isKotlinBaseApiPluginApplied(internalServices.projectInfo)
}