diff options
author | Yuriy Solodkyy <solodkyy@google.com> | 2022-07-07 16:50:17 +0100 |
---|---|---|
committer | Yuriy Solodkyy <solodkyy@google.com> | 2022-07-11 13:04:14 +0000 |
commit | 7a13ce4e8873f40796d3c772ba4fbde069baee8d (patch) | |
tree | 1ad9e8b4809385c0117a7f3a9cf9b062093d3554 | |
parent | 84fda5ecebf42e908e30bb33234acd4aa5fe70bd (diff) | |
download | idea-7a13ce4e8873f40796d3c772ba4fbde069baee8d.tar.gz |
Extract project various project ids into IdeProjectPath
Note, `IdeModelDumper` is intentionally updated not to keep snapshots
intact. The format will change soon with automatic dumping.
Bug: 238292294
Test: snapshots not changed
Change-Id: If26d89eeaa44a2bb85f884f98d33e2dacf478b7a
10 files changed, 110 insertions, 48 deletions
diff --git a/android-lint/src/com/android/tools/idea/lint/model/LintModelFactory.kt b/android-lint/src/com/android/tools/idea/lint/model/LintModelFactory.kt index 0a3f0db5927..30e14561ea5 100644 --- a/android-lint/src/com/android/tools/idea/lint/model/LintModelFactory.kt +++ b/android-lint/src/com/android/tools/idea/lint/model/LintModelFactory.kt @@ -116,7 +116,7 @@ class LintModelFactory : LintModelModuleLoader { val module = DefaultLintModelModule( loader = this, dir = dir, - modulePath = project.projectPath, + modulePath = project.projectPath.projectPath, type = getModuleType(project.projectType), mavenName = getMavenName(project), gradleVersion = gradleVersion, @@ -602,7 +602,7 @@ class LintModelFactory : LintModelModuleLoader { private fun getMavenName(androidProject: IdeAndroidProject): LintModelMavenName? { val groupId = androidProject.groupId ?: return null - return DefaultLintModelMavenName(groupId, androidProject.projectPath, "") + return DefaultLintModelMavenName(groupId, androidProject.projectPath.projectPath, "") } private fun getMavenName(artifactAddress: String): LintModelMavenName { @@ -689,7 +689,7 @@ class LintModelFactory : LintModelModuleLoader { override val gradleVersion: GradleVersion? ) : LintModelModule { override val modulePath: String - get() = project.projectPath + get() = project.projectPath.projectPath override val type: LintModelModuleType get() = getModuleType(project.projectType) override val mavenName: LintModelMavenName? diff --git a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt index 6271586c433..0c2d41e648a 100644 --- a/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt +++ b/android-test-framework/testSrc/com/android/tools/idea/testing/AndroidGradleTestUtils.kt @@ -55,6 +55,7 @@ import com.android.tools.idea.gradle.model.impl.IdeLintOptionsImpl import com.android.tools.idea.gradle.model.impl.IdeModuleLibraryImpl import com.android.tools.idea.gradle.model.impl.IdeProductFlavorContainerImpl import com.android.tools.idea.gradle.model.impl.IdeProductFlavorImpl +import com.android.tools.idea.gradle.model.impl.IdeProjectPathImpl import com.android.tools.idea.gradle.model.impl.IdeSourceProviderContainerImpl import com.android.tools.idea.gradle.model.impl.IdeSourceProviderImpl import com.android.tools.idea.gradle.model.impl.IdeVariantBuildInformationImpl @@ -1020,10 +1021,12 @@ fun AndroidProjectStubBuilder.buildAndroidProjectStub(): IdeAndroidProjectImpl { val projectType = projectType return IdeAndroidProjectImpl( agpVersion = agpVersion, - rootBuildId = File("/"), - buildId = File("/"), - buildName = ":", - projectPath = gradleProjectPath, + projectPath = IdeProjectPathImpl( + rootBuildId = File("/"), + buildId = File("/"), + buildName = ":", + projectPath = gradleProjectPath + ), projectType = projectType, defaultConfig = defaultConfig, buildTypes = buildTypes, diff --git a/project-system-gradle-models/src/com/android/tools/idea/gradle/model/IdeAndroidProject.kt b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/IdeAndroidProject.kt index 99d38a0a67e..86f3f669d8a 100644 --- a/project-system-gradle-models/src/com/android/tools/idea/gradle/model/IdeAndroidProject.kt +++ b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/IdeAndroidProject.kt @@ -25,30 +25,9 @@ interface IdeAndroidProject : Serializable { val agpVersion: String /** - * The build ID (directory containing the settings file) of the root build of this project. - * - * Note, this directory might be different from the root directory of the root project of the root build if the root project directory is - * relocated. - */ - val rootBuildId: File - - /** - * The build ID (directory containing the settings file) of the (included) build containing this project. - * - * Note, this directory might be different from the root directory of the root project of the root build if the root project directory is - * relocated. - */ - val buildId: File - - /** - * The name of the included build containing this project or ":" if this project belongs to the root build. - */ - val buildName: String - - /** - * Returns the Gradle project path of the module (excluding the build name, if in an included build). + * Returns a project path together with the name and location of the build containing it. */ - val projectPath: String + val projectPath: IdeProjectPath /** * Returns the type of project: Android application, library, feature, instantApp. diff --git a/project-system-gradle-models/src/com/android/tools/idea/gradle/model/IdeProjectPath.kt b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/IdeProjectPath.kt new file mode 100644 index 00000000000..2f09b8aa676 --- /dev/null +++ b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/IdeProjectPath.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2022 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.tools.idea.gradle.model + +import java.io.File +import java.io.Serializable + +/** + * A project path together with the name and location of the build containing it. + */ +interface IdeProjectPath: Serializable { + /** + * The build ID (directory containing the settings file) of the root build of this project. + * + * Note, this directory might be different from the root directory of the root project of the root build if the root project directory is + * relocated. + */ + val rootBuildId: File + + /** + * The build ID (directory containing the settings file) of the (included) build containing this project. + * + * Note, this directory might be different from the root directory of the root project of the root build if the root project directory is + * relocated. + */ + val buildId: File + + /** + * The name of the included build containing this project or ":" if this project belongs to the root build. + */ + val buildName: String + + /** + * Returns the Gradle project path of the module (excluding the build name, if in an included build). + */ + val projectPath: String +}
\ No newline at end of file diff --git a/project-system-gradle-models/src/com/android/tools/idea/gradle/model/impl/IdeAndroidProjectImpl.kt b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/impl/IdeAndroidProjectImpl.kt index 3d498a2f245..a0c8ced5147 100644 --- a/project-system-gradle-models/src/com/android/tools/idea/gradle/model/impl/IdeAndroidProjectImpl.kt +++ b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/impl/IdeAndroidProjectImpl.kt @@ -22,10 +22,7 @@ import java.io.Serializable data class IdeAndroidProjectImpl( override val agpVersion: String, - override val rootBuildId: File, - override val buildId: File, - override val buildName: String, - override val projectPath: String, + override val projectPath: IdeProjectPathImpl, override val projectType: IdeAndroidProjectType, override val defaultConfig: IdeProductFlavorContainerImpl, override val buildTypes: Collection<IdeBuildTypeContainerImpl>, diff --git a/project-system-gradle-models/src/com/android/tools/idea/gradle/model/impl/IdeProjectPathImpl.kt b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/impl/IdeProjectPathImpl.kt new file mode 100644 index 00000000000..8048dce1ff8 --- /dev/null +++ b/project-system-gradle-models/src/com/android/tools/idea/gradle/model/impl/IdeProjectPathImpl.kt @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2022 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.tools.idea.gradle.model.impl + +import com.android.tools.idea.gradle.model.IdeProjectPath +import java.io.File +import java.io.Serializable + +data class IdeProjectPathImpl( + override val rootBuildId: File, + override val buildId: File, + override val buildName: String, + override val projectPath: String +): IdeProjectPath, Serializable
\ No newline at end of file diff --git a/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV1Impl.kt b/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV1Impl.kt index 8d9d366ad3d..2f33c0a88e6 100644 --- a/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV1Impl.kt +++ b/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV1Impl.kt @@ -98,6 +98,7 @@ import com.android.tools.idea.gradle.model.impl.IdeMavenCoordinatesImpl import com.android.tools.idea.gradle.model.impl.IdePreResolvedModuleLibraryImpl import com.android.tools.idea.gradle.model.impl.IdeProductFlavorContainerImpl import com.android.tools.idea.gradle.model.impl.IdeProductFlavorImpl +import com.android.tools.idea.gradle.model.impl.IdeProjectPathImpl import com.android.tools.idea.gradle.model.impl.IdeSigningConfigImpl import com.android.tools.idea.gradle.model.impl.IdeSourceProviderContainerImpl import com.android.tools.idea.gradle.model.impl.IdeSourceProviderImpl @@ -1237,10 +1238,12 @@ internal fun modelCacheV1Impl(internedModels: InternedModels, buildFolderPaths: } return IdeAndroidProjectImpl( agpVersion = project.modelVersion, - rootBuildId = rootBuildId.asFile, - buildId = buildId.asFile, - buildName = buildName, - projectPath = projectPath, + projectPath = IdeProjectPathImpl( + rootBuildId = rootBuildId.asFile, + buildId = buildId.asFile, + buildName = buildName, + projectPath = projectPath + ), defaultConfig = defaultConfigCopy, buildTypes = buildTypesCopy, productFlavors = productFlavorCopy, diff --git a/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV2Impl.kt b/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV2Impl.kt index 60e0f2962f4..641bd1e07cf 100644 --- a/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV2Impl.kt +++ b/project-system-gradle-sync/src/com/android/tools/idea/gradle/project/sync/ModelCacheV2Impl.kt @@ -96,6 +96,7 @@ import com.android.tools.idea.gradle.model.impl.IdeModelSyncFileImpl import com.android.tools.idea.gradle.model.impl.IdePreResolvedModuleLibraryImpl import com.android.tools.idea.gradle.model.impl.IdeProductFlavorContainerImpl import com.android.tools.idea.gradle.model.impl.IdeProductFlavorImpl +import com.android.tools.idea.gradle.model.impl.IdeProjectPathImpl import com.android.tools.idea.gradle.model.impl.IdeSigningConfigImpl import com.android.tools.idea.gradle.model.impl.IdeSourceProviderContainerImpl import com.android.tools.idea.gradle.model.impl.IdeSourceProviderImpl @@ -1187,10 +1188,12 @@ internal fun modelCacheV2Impl(internedModels: InternedModels, lock: ReentrantLoc return IdeAndroidProjectImpl( agpVersion = modelsVersions.agp, - rootBuildId = rootBuildId.asFile, - buildId = buildId.asFile, - buildName = basicProject.buildName, - projectPath = basicProject.path, + projectPath = IdeProjectPathImpl( + rootBuildId = rootBuildId.asFile, + buildId = buildId.asFile, + buildName = basicProject.buildName, + projectPath = basicProject.path, + ), defaultConfig = defaultConfigCopy, buildTypes = buildTypesCopy, productFlavors = productFlavorCopy, diff --git a/project-system-gradle/src/com/android/tools/idea/gradle/project/sync/internal/IdeModelDumper.kt b/project-system-gradle/src/com/android/tools/idea/gradle/project/sync/internal/IdeModelDumper.kt index 4ecf72d3179..35fa4539048 100644 --- a/project-system-gradle/src/com/android/tools/idea/gradle/project/sync/internal/IdeModelDumper.kt +++ b/project-system-gradle/src/com/android/tools/idea/gradle/project/sync/internal/IdeModelDumper.kt @@ -205,10 +205,10 @@ private fun ideModelDumper(projectDumper: ProjectDumper) = with(projectDumper) { val modelDumper = ModelDumper(jbModelDumpers) object { fun dump(ideAndroidModel: IdeAndroidProject) { - prop("RootBuildId") { ideAndroidModel.rootBuildId.path.toPrintablePath() } - prop("BuildId") { ideAndroidModel.buildId.path.toPrintablePath() } - prop("BuildName") { ideAndroidModel.buildName } - prop("ProjectPath") { ideAndroidModel.projectPath } + prop("RootBuildId") { ideAndroidModel.projectPath.rootBuildId.path.toPrintablePath() } + prop("BuildId") { ideAndroidModel.projectPath.buildId.path.toPrintablePath() } + prop("BuildName") { ideAndroidModel.projectPath.buildName } + prop("ProjectPath") { ideAndroidModel.projectPath.projectPath } prop("ModelVersion") { ideAndroidModel.agpVersion.replaceKnownPatterns() } prop("ProjectType") { ideAndroidModel.projectType.toString() } prop("CompileTarget") { ideAndroidModel.compileTarget.replaceCurrentSdkVersion() } diff --git a/project-system-gradle/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt b/project-system-gradle/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt index 9a7a7d2a8d4..44189097e2c 100644 --- a/project-system-gradle/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt +++ b/project-system-gradle/src/com/android/tools/idea/projectsystem/gradle/sync/AndroidModuleDataService.kt @@ -254,7 +254,7 @@ internal constructor(private val myModuleValidatorFactory: AndroidModuleValidato // Android model is null for the root project module. val sdkToUse = AndroidSdks.getInstance().computeSdkReloadingAsNeeded( project, - androidModel.androidProject.projectPath, + androidModel.androidProject.projectPath.projectPath, androidModel.androidProject.compileTarget, androidModel.androidProject.bootClasspath, IdeSdks.getInstance() @@ -262,7 +262,7 @@ internal constructor(private val myModuleValidatorFactory: AndroidModuleValidato if (sdkToUse == null) { modulesWithSDKSetupFailureByCompileTarget.getOrPut(androidModel.androidProject.compileTarget) { mutableListOf() } - .add(androidModel.androidProject.projectPath) + .add(androidModel.androidProject.projectPath.projectPath) } val modules = mainIdeModule.getAllLinkedModules() |