aboutsummaryrefslogtreecommitdiff
path: root/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy
diff options
context:
space:
mode:
Diffstat (limited to 'gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy')
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy161
1 files changed, 97 insertions, 64 deletions
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy
index c3ede88..9bf6c46 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/model/ModelBuilder.groovy
@@ -26,23 +26,27 @@ import com.android.build.gradle.internal.variant.ApplicationVariantData
import com.android.build.gradle.internal.variant.BaseVariantData
import com.android.build.gradle.internal.variant.LibraryVariantData
import com.android.build.gradle.internal.variant.TestVariantData
-import com.android.builder.model.AndroidProject
-import com.android.builder.model.ArtifactInfo
-import com.android.builder.model.BuildTypeContainer
-import com.android.builder.model.ProductFlavorContainer
import com.android.builder.DefaultProductFlavor
import com.android.builder.SdkParser
import com.android.builder.VariantConfiguration
+import com.android.builder.model.AndroidArtifact
+import com.android.builder.model.AndroidProject
+import com.android.builder.model.ArtifactMetaData
+import com.android.builder.model.JavaArtifact
import com.android.builder.model.SigningConfig
import com.android.builder.model.SourceProvider
+import com.android.builder.model.SourceProviderContainer
import com.google.common.collect.Lists
-import com.google.common.collect.Maps
import org.gradle.api.Project
import org.gradle.api.plugins.UnknownPluginException
import org.gradle.tooling.provider.model.ToolingModelBuilder
import java.util.jar.Attributes
import java.util.jar.Manifest
+
+import static com.android.builder.model.AndroidProject.ARTIFACT_INSTRUMENT_TEST
+import static com.android.builder.model.AndroidProject.ARTIFACT_MAIN
+
/**
* Builder for the custom Android model.
*/
@@ -81,6 +85,15 @@ public class ModelBuilder implements ToolingModelBuilder {
List<File> frameworkSource = Collections.emptyList();
String compileTarget = sdkParser.target.hashString()
+ // list of extra artifacts
+ List<ArtifactMetaData> artifactMetaDataList = Lists.newArrayList(basePlugin.extraArtifacts)
+ // plus the instrumentation test one.
+ artifactMetaDataList.add(
+ new ArtifactMetaDataImpl(
+ ARTIFACT_INSTRUMENT_TEST,
+ true /*isTest*/,
+ ArtifactMetaData.TYPE_ANDROID));
+
//noinspection GroovyVariableNotAssigned
DefaultAndroidProject androidProject = new DefaultAndroidProject(
getModelVersion(),
@@ -89,29 +102,40 @@ public class ModelBuilder implements ToolingModelBuilder {
bootClasspath,
frameworkSource,
cloneSigningConfigs(signingConfigs),
+ artifactMetaDataList,
basePlugin.unresolvedDependencies,
basePlugin.extension.compileOptions,
libPlugin != null)
- .setDefaultConfig(createPFC(basePlugin.defaultConfigData))
+ .setDefaultConfig(ProductFlavorContainerImpl.createPFC(
+ basePlugin.defaultConfigData,
+ basePlugin.getExtraFlavorSourceProviders(basePlugin.defaultConfigData.productFlavor.name)))
if (appPlugin != null) {
for (BuildTypeData btData : appPlugin.buildTypes.values()) {
- androidProject.addBuildType(createBTC(btData))
+ androidProject.addBuildType(BuildTypeContainerImpl.createBTC(
+ btData,
+ basePlugin.getExtraBuildTypeSourceProviders(btData.buildType.name)))
}
for (ProductFlavorData pfData : appPlugin.productFlavors.values()) {
- androidProject.addProductFlavors(createPFC(pfData))
+ androidProject.addProductFlavors(ProductFlavorContainerImpl.createPFC(
+ pfData,
+ basePlugin.getExtraFlavorSourceProviders(pfData.productFlavor.name)))
}
} else if (libPlugin != null) {
- androidProject.addBuildType(createBTC(libPlugin.debugBuildTypeData))
- .addBuildType(createBTC(libPlugin.releaseBuildTypeData))
+ androidProject.addBuildType(BuildTypeContainerImpl.createBTC(
+ libPlugin.debugBuildTypeData,
+ basePlugin.getExtraBuildTypeSourceProviders(libPlugin.debugBuildTypeData.buildType.name)))
+ .addBuildType(BuildTypeContainerImpl.createBTC(
+ libPlugin.releaseBuildTypeData,
+ basePlugin.getExtraBuildTypeSourceProviders(libPlugin.releaseBuildTypeData.buildType.name)))
}
Set<Project> gradleProjects = project.getRootProject().getAllprojects();
for (BaseVariantData variantData : basePlugin.variantDataList) {
if (!(variantData instanceof TestVariantData)) {
- androidProject.addVariant(createVariant(variantData, gradleProjects))
+ androidProject.addVariant(createVariant(variantData, basePlugin, gradleProjects))
}
}
@@ -141,6 +165,7 @@ public class ModelBuilder implements ToolingModelBuilder {
@NonNull
private static VariantImpl createVariant(@NonNull BaseVariantData variantData,
+ @NonNull BasePlugin basePlugin,
@NonNull Set<Project> gradleProjects) {
TestVariantData testVariantData = null
if (variantData instanceof ApplicationVariantData ||
@@ -148,30 +173,43 @@ public class ModelBuilder implements ToolingModelBuilder {
testVariantData = variantData.testVariantData
}
- ArtifactInfo mainArtifact = createArtifactInfo(variantData, gradleProjects)
- ArtifactInfo testArtifact = testVariantData != null ?
- createArtifactInfo(testVariantData, gradleProjects) : null
+ AndroidArtifact mainArtifact = createArtifactInfo(
+ ARTIFACT_MAIN, variantData, basePlugin, gradleProjects)
+
+ String variantName = variantData.variantConfiguration.fullName
+
+ // extra Android Artifacts
+ AndroidArtifact testArtifact = testVariantData != null ?
+ createArtifactInfo(ARTIFACT_INSTRUMENT_TEST, testVariantData, basePlugin, gradleProjects) : null
- SourceProvider sp = variantData.variantConfiguration.getVariantSourceProvider();
- if (sp != null) {
- sp = SourceProviderImpl.cloneProvider(sp);
+ List<AndroidArtifact> extraAndroidArtifacts = Lists.newArrayList(
+ basePlugin.getExtraAndroidArtifacts(variantName))
+ if (testArtifact != null) {
+ extraAndroidArtifacts.add(testArtifact)
}
+ // extra Java Artifacts
+ List<JavaArtifact> extraJavaArtifacts = Lists.newArrayList(
+ basePlugin.getExtraJavaArtifacts(variantName))
+
VariantImpl variant = new VariantImpl(
- variantData.variantConfiguration.fullName,
+ variantName,
variantData.variantConfiguration.baseName,
variantData.variantConfiguration.buildType.name,
getProductFlavorNames(variantData),
ProductFlavorImpl.cloneFlavor(variantData.variantConfiguration.mergedFlavor),
mainArtifact,
- testArtifact,
- sp)
+ extraAndroidArtifacts,
+ extraJavaArtifacts)
return variant
}
- private static ArtifactInfo createArtifactInfo(@NonNull BaseVariantData variantData,
- @NonNull Set<Project> gradleProjects) {
+ private static AndroidArtifact createArtifactInfo(
+ @NonNull String name,
+ @NonNull BaseVariantData variantData,
+ @NonNull BasePlugin basePlugin,
+ @NonNull Set<Project> gradleProjects) {
VariantConfiguration vC = variantData.variantConfiguration
SigningConfig signingConfig = vC.signingConfig
@@ -180,7 +218,26 @@ public class ModelBuilder implements ToolingModelBuilder {
signingConfigName = signingConfig.name
}
- return new ArtifactInfoImpl(
+ SourceProvider variantSourceProvider = null;
+ SourceProvider multiFlavorSourceProvider = null;
+
+ if (ARTIFACT_MAIN.equals(name)) {
+ variantSourceProvider = variantData.variantConfiguration.variantSourceProvider
+ multiFlavorSourceProvider = variantData.variantConfiguration.multiFlavorSourceProvider
+ } else {
+ SourceProviderContainer container = getSourceProviderContainer(
+ basePlugin.getExtraVariantSourceProviders(variantData.getVariantConfiguration().getFullName()),
+ name)
+ if (container != null) {
+ variantSourceProvider = container.sourceProvider
+ }
+ }
+
+ variantSourceProvider = variantSourceProvider != null ? SourceProviderImpl.cloneProvider(variantSourceProvider) : null
+ multiFlavorSourceProvider = multiFlavorSourceProvider != null ? SourceProviderImpl.cloneProvider(multiFlavorSourceProvider) : null
+
+ return new AndroidArtifactImpl(
+ name,
variantData.assembleTask.name,
variantData.outputFile,
vC.isSigningReady(),
@@ -192,8 +249,9 @@ public class ModelBuilder implements ToolingModelBuilder {
getGeneratedSourceFolders(variantData),
getGeneratedResourceFolders(variantData),
variantData.javaCompileTask.destinationDir,
- DependenciesImpl.cloneDependencies(variantData.variantDependency, gradleProjects)
- )
+ DependenciesImpl.cloneDependencies(variantData.variantDependency, gradleProjects),
+ variantSourceProvider,
+ multiFlavorSourceProvider)
}
@NonNull
@@ -237,54 +295,29 @@ public class ModelBuilder implements ToolingModelBuilder {
return Collections.singletonList(variantData.renderscriptCompileTask.resOutputDir)
}
- /**
- * Create a ProductFlavorContainer from a ProductFlavorData
- * @param productFlavorData the product flavor data
- * @return a non-null ProductFlavorContainer
- */
- @NonNull
- private static ProductFlavorContainer createPFC(@NonNull ProductFlavorData productFlavorData) {
- return new ProductFlavorContainerImpl(
- ProductFlavorImpl.cloneFlavor(productFlavorData.productFlavor),
- SourceProviderImpl.cloneProvider((SourceProvider) productFlavorData.sourceSet),
- SourceProviderImpl.cloneProvider((SourceProvider) productFlavorData.testSourceSet))
- }
-
- /**
- * Create a BuildTypeContainer from a BuildTypeData
- * @param buildTypeData the build type data
- * @return a non-null BuildTypeContainer
- */
@NonNull
- private static BuildTypeContainer createBTC(@NonNull BuildTypeData buildTypeData) {
- return new BuildTypeContainerImpl(
- BuildTypeImpl.cloneBuildType(buildTypeData.buildType),
- SourceProviderImpl.cloneProvider((SourceProvider) buildTypeData.sourceSet))
- }
-
- @NonNull
- private static Map<String, SigningConfig> cloneSigningConfigs(
+ private static Collection<SigningConfig> cloneSigningConfigs(
@NonNull Collection<SigningConfig> signingConfigs) {
- Map<String, SigningConfig> results = Maps.newHashMapWithExpectedSize(signingConfigs.size())
+ Collection<SigningConfig> results = Lists.newArrayListWithCapacity(signingConfigs.size())
for (SigningConfig signingConfig : signingConfigs) {
- SigningConfig clonedSigningConfig = createSigningConfig(signingConfig)
- results.put(clonedSigningConfig.name, clonedSigningConfig)
+ results.add(SigningConfigImpl.createSigningConfig(signingConfig))
}
return results
}
- @NonNull
- private static SigningConfig createSigningConfig(@NonNull SigningConfig signingConfig) {
- return new SigningConfigImpl(
- signingConfig.getName(),
- signingConfig.getStoreFile(),
- signingConfig.getStorePassword(),
- signingConfig.getKeyAlias(),
- signingConfig.getKeyPassword(),
- signingConfig.getStoreType(),
- signingConfig.isSigningReady())
+ @Nullable
+ private static SourceProviderContainer getSourceProviderContainer(
+ @NonNull Collection<SourceProviderContainer> items,
+ @NonNull String name) {
+ for (SourceProviderContainer item : items) {
+ if (name.equals(item.getArtifactName())) {
+ return item;
+ }
+ }
+
+ return null;
}
/**