*/
package com.android.build.gradle
-
import com.android.build.gradle.internal.BuildTypeData
import com.android.build.gradle.internal.DefaultBuildVariant
import com.android.build.gradle.internal.ProductFlavorData
import com.android.build.gradle.internal.ProductionAppVariant
import com.android.build.gradle.internal.TestAppVariant
import com.android.build.gradle.internal.dependency.ConfigurationDependencies
+import com.android.build.gradle.internal.dsl.BuildTypeDsl
import com.android.build.gradle.internal.dsl.BuildTypeFactory
import com.android.build.gradle.internal.dsl.GroupableProductFlavor
import com.android.build.gradle.internal.dsl.GroupableProductFlavorFactory
+import com.android.build.gradle.internal.dsl.SigningConfigDsl
import com.android.build.gradle.internal.dsl.SigningConfigFactory
import com.android.build.gradle.internal.tasks.AndroidReportTask
import com.android.build.gradle.internal.tasks.AndroidTestTask
import com.android.build.gradle.internal.test.report.ReportType
import com.android.builder.AndroidDependency
import com.android.builder.BuildType
+import com.android.builder.BuilderConstants
import com.android.builder.JarDependency
import com.android.builder.SigningConfig
import com.android.builder.VariantConfiguration
import org.gradle.internal.reflect.Instantiator
import javax.inject.Inject
-
/**
* Gradle plugin class for 'application' projects.
*/
buildTypeContainer, productFlavorContainer, signingConfigContainer)
setDefaultConfig(extension.defaultConfig, extension.sourceSetsContainer)
+ // map the whenObjectAdded callbacks on the containers.
+ signingConfigContainer.whenObjectAdded { SigningConfig signingConfig ->
+ signingConfigs[((SigningConfigDsl)signingConfig).name] = signingConfig
+ }
+
buildTypeContainer.whenObjectAdded { BuildType buildType ->
+ ((BuildTypeDsl)buildType).init(signingConfigContainer.getByName(BuilderConstants.DEBUG))
addBuildType(buildType)
}
- buildTypeContainer.whenObjectRemoved {
- throw new UnsupportedOperationException("Removing build types is not implemented yet.")
- }
-
- buildTypeContainer.create(BuildType.DEBUG)
- buildTypeContainer.create(BuildType.RELEASE)
productFlavorContainer.whenObjectAdded { GroupableProductFlavor productFlavor ->
addProductFlavor(productFlavor)
}
- productFlavorContainer.whenObjectRemoved {
- throw new UnsupportedOperationException(
- "Removing product flavors is not implemented yet.")
- }
+ // create default Objects, signingConfig first as its used by the BuildTypes.
+ signingConfigContainer.create(BuilderConstants.DEBUG)
+ buildTypeContainer.create(BuilderConstants.DEBUG)
+ buildTypeContainer.create(BuilderConstants.RELEASE)
- signingConfigContainer.whenObjectAdded { SigningConfig signingConfig ->
- signingConfigs[signingConfig.name] = signingConfig
- }
+ // map whenOjbectRemoved on the containers to throw an exception.
signingConfigContainer.whenObjectRemoved {
- throw new UnsupportedOperationException("Removing signingConfigs is not implemented yet.")
+ throw new UnsupportedOperationException("Removing signingConfigs is not supported.")
+ }
+ buildTypeContainer.whenObjectRemoved {
+ throw new UnsupportedOperationException("Removing build types is not supported.")
+ }
+ productFlavorContainer.whenObjectRemoved {
+ throw new UnsupportedOperationException("Removing product flavors is not supported.")
}
- signingConfigContainer.create(SigningConfig.DEBUG)
+
}
private void addBuildType(BuildType buildType) {
- if (buildType.name.startsWith("test")) {
+ String name = buildType.name
+ if (name.startsWith("test")) {
throw new RuntimeException("BuildType names cannot start with 'test'")
}
- if (productFlavors.containsKey(buildType.name)) {
+ if (productFlavors.containsKey(name)) {
throw new RuntimeException("BuildType names cannot collide with ProductFlavor names")
}
- def sourceSet = extension.sourceSetsContainer.create(buildType.name)
+ def sourceSet = extension.sourceSetsContainer.create(name)
BuildTypeData buildTypeData = new BuildTypeData(buildType, sourceSet, project)
project.tasks.assemble.dependsOn buildTypeData.assembleTask
- buildTypes[buildType.name] = buildTypeData
+ buildTypes[name] = buildTypeData
}
private void addProductFlavor(GroupableProductFlavor productFlavor) {