summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvmadalin <vmadalin@google.com>2022-08-12 10:31:07 +0100
committerMadalin Valceleanu <vmadalin@google.com>2022-08-15 16:49:12 +0000
commit2053fad3a9bae04ae0108a618d826f27c656bfc0 (patch)
treec98e998fdd6746e7c128ba08cc800cb2dd77533b
parent4a1ac2ca2897f17a8d21ac6150f95e98170a10a4 (diff)
downloadidea-2053fad3a9bae04ae0108a618d826f27c656bfc0.tar.gz
Sort build variants alphabetically
We lost sorting after creating the new BuildVariantTableModel on the CL: I9fdae24e5fbb946897ba1df0e4365e78cdd72398, in particular by removing the following sorting: ``` gradleModules.stream().sorted(ModuleTypeComparator.INSTANCE) ``` This change applies again our ModuleTypeComparator but also adds some test coverage. Note: The ModuleTypeComparator is sorting numbers in lexical order as we had before, but potentially we would like to change this behaviour in the future Bug: 241699420 Test: Added coverage + manual validation Change-Id: I635b887b304d7b67e3910e29624d6f3d32e288e3
-rw-r--r--project-system-gradle/src/com/android/tools/idea/gradle/variant/view/BuildVariantTableModel.kt20
-rw-r--r--project-system-gradle/testSrc/com/android/tools/idea/gradle/variant/view/BuildVariantTableModelTest.kt88
2 files changed, 88 insertions, 20 deletions
diff --git a/project-system-gradle/src/com/android/tools/idea/gradle/variant/view/BuildVariantTableModel.kt b/project-system-gradle/src/com/android/tools/idea/gradle/variant/view/BuildVariantTableModel.kt
index 59fede9c667..b5c54c4a6e4 100644
--- a/project-system-gradle/src/com/android/tools/idea/gradle/variant/view/BuildVariantTableModel.kt
+++ b/project-system-gradle/src/com/android/tools/idea/gradle/variant/view/BuildVariantTableModel.kt
@@ -22,6 +22,7 @@ import com.android.tools.idea.gradle.project.model.NdkModuleModel
import com.android.tools.idea.gradle.project.model.NdkModuleModel.Companion.get
import com.android.tools.idea.gradle.project.model.VariantAbi
import com.android.tools.idea.gradle.project.sync.idea.getVariantAndAbi
+import com.android.tools.idea.gradle.util.ModuleTypeComparator
import com.android.tools.idea.projectsystem.getAndroidFacets
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
@@ -103,14 +104,16 @@ private constructor(
private fun BuildVariantTableRow.toArray(hasAbis: Boolean): Array<Any?> = if (hasAbis) arrayOf(module, variant, abi)
else arrayOf(module, variant)
-private fun buildVariantTableModelRows(project: Project): List<BuildVariantTableRow> {
- return project.getAndroidFacets().map { androidFacet ->
- val variantAndAbi = androidFacet.getVariantAndAbi()
- val buildVariantItems = getBuildVariantItems(androidFacet)
- val abiItems = getAbiItems(androidFacet, variantAndAbi.variant)
- BuildVariantTableRow(androidFacet.holderModule, variantAndAbi.variant, variantAndAbi.abi, buildVariantItems, abiItems)
- }
-}
+private fun buildVariantTableModelRows(project: Project) =
+ project
+ .getAndroidFacets()
+ .sortedWith(compareBy(ModuleTypeComparator.INSTANCE) { it.module })
+ .map { androidFacet ->
+ val variantAndAbi = androidFacet.getVariantAndAbi()
+ val buildVariantItems = getBuildVariantItems(androidFacet)
+ val abiItems = getAbiItems(androidFacet, variantAndAbi.variant)
+ BuildVariantTableRow(androidFacet.holderModule, variantAndAbi.variant, variantAndAbi.abi, buildVariantItems, abiItems)
+ }
private fun getBuildVariantItems(facet: AndroidFacet): List<BuildVariantItem> {
return GradleAndroidModel.get(facet)?.variantNames.orEmpty().map { BuildVariantItem(it) }.sorted()
@@ -137,4 +140,3 @@ private fun getNdkModuleModelIfNotJustDummy(facet: AndroidFacet): NdkModuleModel
val ndkFacet = getInstance(facet.holderModule) ?: return null
return getNdkModuleModelIfNotJustDummy(ndkFacet)
}
-
diff --git a/project-system-gradle/testSrc/com/android/tools/idea/gradle/variant/view/BuildVariantTableModelTest.kt b/project-system-gradle/testSrc/com/android/tools/idea/gradle/variant/view/BuildVariantTableModelTest.kt
index 9d2b37928a9..6c301614fe7 100644
--- a/project-system-gradle/testSrc/com/android/tools/idea/gradle/variant/view/BuildVariantTableModelTest.kt
+++ b/project-system-gradle/testSrc/com/android/tools/idea/gradle/variant/view/BuildVariantTableModelTest.kt
@@ -45,7 +45,7 @@ class BuildVariantTableModelTest {
fun withoutAbi() {
projectRule.setupProjectFrom(
JavaModuleModelBuilder.rootModuleBuilder,
- appModuleBuilder(),
+ appModuleBuilder(dependencyList = listOf(AndroidModuleDependency(":lib", "debug"))),
libModuleBuilder()
)
val model = BuildVariantTableModel.create(projectRule.project)
@@ -79,7 +79,7 @@ class BuildVariantTableModelTest {
fun withAbi() {
projectRule.setupProjectFrom(
JavaModuleModelBuilder.rootModuleBuilder,
- appModuleBuilder(),
+ appModuleBuilder(dependencyList = listOf(AndroidModuleDependency(":lib", "debug"))),
ndkLibModuleBuilder()
)
val model = BuildVariantTableModel.create(projectRule.project)
@@ -108,21 +108,68 @@ class BuildVariantTableModelTest {
)
)
}
+
+ @Test
+ fun `Given project modules with same type When create VariantTableModel Then TableRows is sorted`() {
+ val projectModules = arrayOf(
+ appModuleBuilder(":appB"),
+ appModuleBuilder(":appA"),
+ appModuleBuilder(":appD"),
+ appModuleBuilder(":appC")
+ )
+ projectRule.setupProjectFrom(*projectModules)
+
+ val model = BuildVariantTableModel.create(projectRule.project)
+
+ expect.that(model.rows).hasSize(projectModules.size)
+ // Assert modules with same type are sorted
+ val expectedSortedModules = arrayOf("appA", "appB", "appC", "appD")
+ expectedSortedModules.forEachIndexed { index, moduleName ->
+ expect.that(model.rows[index].module.name).isEqualTo("${projectRule.project.name}.$moduleName")
+ }
+ }
+
+ @Test
+ fun `Given project modules with different type When create VariantTableModel Then TableRows is sorted by IdeAndroidProjectType`() {
+ val projectModules = arrayOf(
+ appModuleBuilder(":xappC"),
+ appModuleBuilder(":appB"),
+ appModuleBuilder(":appA"),
+ featureModuleBuilder(),
+ libModuleBuilder(":libB"),
+ libModuleBuilder(":alibA"),
+ testModuleBuilder()
+ )
+ projectRule.setupProjectFrom(*projectModules)
+
+ val model = BuildVariantTableModel.create(projectRule.project)
+
+ expect.that(model.rows).hasSize(projectModules.size)
+ // Assert modules sorted and grouped by IdeAndroidProjectType order
+ val expectedSortedModules = arrayOf("appA", "appB", "xappC", "alibA", "libB", "test", "feature")
+ expectedSortedModules.forEachIndexed { index, moduleName ->
+ expect.that(model.rows[index].module.name).isEqualTo("${projectRule.project.name}.$moduleName")
+ }
+ }
}
private fun appModuleBuilder(
appPath: String = ":app",
selectedVariant: String = "debug",
- dependOnVariant: String? = "debug"
-) = AndroidModuleModelBuilder(
- appPath,
- selectedVariant,
- AndroidProjectBuilder(androidModuleDependencyList = { listOf(AndroidModuleDependency(":lib", dependOnVariant)) })
-)
-
-private fun libModuleBuilder(selectedVariant: String = "debug") =
+ dependencyList: List<AndroidModuleDependency> = emptyList()
+) =
AndroidModuleModelBuilder(
- ":lib",
+ appPath,
+ selectedVariant,
+ AndroidProjectBuilder(androidModuleDependencyList = { dependencyList })
+ )
+
+private fun libModuleBuilder(
+ libPath: String = ":lib",
+ selectedVariant: String = "debug"
+) =
+ AndroidModuleModelBuilder(
+ libPath,
selectedVariant,
AndroidProjectBuilder(projectType = { IdeAndroidProjectType.PROJECT_TYPE_LIBRARY })
)
@@ -134,3 +181,22 @@ private fun ndkLibModuleBuilder(selectedVariant: String = "debug") =
AndroidProjectBuilder(projectType = { IdeAndroidProjectType.PROJECT_TYPE_LIBRARY }, ndkModel = { buildNdkModelStub() })
)
+private fun featureModuleBuilder(
+ featurePath: String = ":feature",
+ selectedVariant: String = "debug"
+) =
+ AndroidModuleModelBuilder(
+ featurePath,
+ selectedVariant,
+ AndroidProjectBuilder(projectType = { IdeAndroidProjectType.PROJECT_TYPE_FEATURE })
+ )
+
+private fun testModuleBuilder(
+ testPath: String = ":test",
+ selectedVariant: String = "debug"
+) =
+ AndroidModuleModelBuilder(
+ testPath,
+ selectedVariant,
+ AndroidProjectBuilder(projectType = { IdeAndroidProjectType.PROJECT_TYPE_TEST })
+ )