From 6f7dbdb49e02efc4ab959fc3cc2e9ab8299ab54f Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 10 Jul 2024 15:15:25 +0800 Subject: [PATCH] fix - Use project dir instead of project path - In composite build scenario, the project path is not based on the build tree root, since the .getBuildTreePath() is not available before GradleApiConnectorTest 8.3, we use the project dir to identify a Gradle project instead. The project dir is used in dependency resolution. --- .../gradle/model/BuildTargetDependency.java | 2 +- .../impl/DefaultBuildTargetDependency.java | 25 ++++++++++--------- .../gradle/plugin/SourceSetsModelBuilder.java | 2 +- .../internal/managers/BuildTargetManager.java | 6 ++--- .../gradle/GradleApiConnectorTest.java | 4 +-- .../managers/BuildTargetManagerTest.java | 2 +- 6 files changed, 21 insertions(+), 20 deletions(-) diff --git a/model/src/main/java/com/microsoft/java/bs/gradle/model/BuildTargetDependency.java b/model/src/main/java/com/microsoft/java/bs/gradle/model/BuildTargetDependency.java index e6e44678..6d9229d9 100644 --- a/model/src/main/java/com/microsoft/java/bs/gradle/model/BuildTargetDependency.java +++ b/model/src/main/java/com/microsoft/java/bs/gradle/model/BuildTargetDependency.java @@ -10,7 +10,7 @@ * In Java this is a project:sourceset dependency on a project:sourceset. */ public interface BuildTargetDependency extends Serializable { - public String getProjectPath(); + public String getProjectDir(); public String getSourceSetName(); } diff --git a/model/src/main/java/com/microsoft/java/bs/gradle/model/impl/DefaultBuildTargetDependency.java b/model/src/main/java/com/microsoft/java/bs/gradle/model/impl/DefaultBuildTargetDependency.java index 4175f401..d6364baf 100644 --- a/model/src/main/java/com/microsoft/java/bs/gradle/model/impl/DefaultBuildTargetDependency.java +++ b/model/src/main/java/com/microsoft/java/bs/gradle/model/impl/DefaultBuildTargetDependency.java @@ -14,38 +14,39 @@ public class DefaultBuildTargetDependency implements BuildTargetDependency { private static final long serialVersionUID = 1L; - private String projectPath; + private String projectDir; private String sourceSetName; - public DefaultBuildTargetDependency(String projectPath, String sourceSetName) { - this.projectPath = projectPath; + public DefaultBuildTargetDependency(String projectDir, String sourceSetName) { + this.projectDir = projectDir; this.sourceSetName = sourceSetName; } public DefaultBuildTargetDependency(GradleSourceSet sourceSet) { - this(sourceSet.getProjectPath(), sourceSet.getSourceSetName()); + this(sourceSet.getProjectDir().getAbsolutePath(), sourceSet.getSourceSetName()); } - /** * Copy constructor. * * @param buildTargetDependency the other instance to copy from. */ public DefaultBuildTargetDependency(BuildTargetDependency buildTargetDependency) { - this.projectPath = buildTargetDependency.getProjectPath(); + this.projectDir = buildTargetDependency.getProjectDir(); this.sourceSetName = buildTargetDependency.getSourceSetName(); } - public String getProjectPath() { - return projectPath; + @Override + public String getProjectDir() { + return projectDir; } - public void setProjectPath(String projectPath) { - this.projectPath = projectPath; + public void setProjectDir(String projectDir) { + this.projectDir = projectDir; } + @Override public String getSourceSetName() { return sourceSetName; } @@ -56,7 +57,7 @@ public void setSourceSetName(String sourceSetName) { @Override public int hashCode() { - return Objects.hash(projectPath, sourceSetName); + return Objects.hash(projectDir, sourceSetName); } @Override @@ -71,7 +72,7 @@ public boolean equals(Object obj) { return false; } DefaultBuildTargetDependency other = (DefaultBuildTargetDependency) obj; - return Objects.equals(projectPath, other.projectPath) + return Objects.equals(projectDir, other.projectDir) && Objects.equals(sourceSetName, other.sourceSetName); } } diff --git a/plugin/src/main/java/com/microsoft/java/bs/gradle/plugin/SourceSetsModelBuilder.java b/plugin/src/main/java/com/microsoft/java/bs/gradle/plugin/SourceSetsModelBuilder.java index bf458e16..fa42a295 100644 --- a/plugin/src/main/java/com/microsoft/java/bs/gradle/plugin/SourceSetsModelBuilder.java +++ b/plugin/src/main/java/com/microsoft/java/bs/gradle/plugin/SourceSetsModelBuilder.java @@ -80,7 +80,7 @@ public Object buildAll(String modelName, Project rootProject) { gradleSourceSet.setCleanTaskName(cleanTaskName); Set taskNames = new HashSet<>(); gradleSourceSet.setTaskNames(taskNames); - String projectName = stripPathPrefix(gradleSourceSet.getProjectPath()); + String projectName = stripPathPrefix(projectPath); if (projectName == null || projectName.length() == 0) { projectName = gradleSourceSet.getProjectName(); } diff --git a/server/src/main/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManager.java b/server/src/main/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManager.java index be029fdb..91ae70dc 100644 --- a/server/src/main/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManager.java +++ b/server/src/main/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManager.java @@ -82,10 +82,10 @@ public List store(GradleSourceSets gradleSourceSets) { changedTargets.add(btId); } newCache.put(btId, buildTarget); - // Store the relationship between the project path and the build target id. + // Store the relationship between the project dir and the build target id. // 'test' and other source sets are ignored. if ("main".equals(sourceSet.getSourceSetName())) { - projectPathToBuildTargetId.put(sourceSet.getProjectPath(), btId); + projectPathToBuildTargetId.put(sourceSet.getProjectDir().getAbsolutePath(), btId); } } updateBuildTargetDependencies(newCache.values(), projectPathToBuildTargetId); @@ -181,7 +181,7 @@ private void updateBuildTargetDependencies( if (buildTargetDependencies != null) { List btDependencies = buildTargetDependencies.stream() .map(btDependency -> { - String path = btDependency.getProjectPath(); + String path = btDependency.getProjectDir(); return projectPathToBuildTargetId.get(path); }) .filter(Objects::nonNull) diff --git a/server/src/test/java/com/microsoft/java/bs/core/internal/gradle/GradleApiConnectorTest.java b/server/src/test/java/com/microsoft/java/bs/core/internal/gradle/GradleApiConnectorTest.java index 760bcc56..2ee6f41e 100644 --- a/server/src/test/java/com/microsoft/java/bs/core/internal/gradle/GradleApiConnectorTest.java +++ b/server/src/test/java/com/microsoft/java/bs/core/internal/gradle/GradleApiConnectorTest.java @@ -172,11 +172,11 @@ void testCompositeBuild2() { private void assertHasBuildTargetDependency(GradleSourceSet sourceSet, GradleSourceSet dependency) { boolean exists = sourceSet.getBuildTargetDependencies().stream() - .anyMatch(dep -> dep.getProjectPath().equals(dependency.getProjectPath()) + .anyMatch(dep -> dep.getProjectDir().equals(dependency.getProjectDir().getAbsolutePath()) && dep.getSourceSetName().equals(dependency.getSourceSetName())); assertTrue(exists, () -> { String availableDependencies = sourceSet.getBuildTargetDependencies().stream() - .map(ss -> ss.getProjectPath() + ' ' + ss.getSourceSetName()) + .map(ss -> ss.getProjectDir() + ' ' + ss.getSourceSetName()) .collect(Collectors.joining(", ")); return "Dependency not found " + dependency.getProjectPath() + ' ' + dependency.getSourceSetName() + ". Available: " + availableDependencies; diff --git a/server/src/test/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManagerTest.java b/server/src/test/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManagerTest.java index b242c3cd..77a856c6 100644 --- a/server/src/test/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManagerTest.java +++ b/server/src/test/java/com/microsoft/java/bs/core/internal/managers/BuildTargetManagerTest.java @@ -96,7 +96,7 @@ void testBuildTargetDependency() { BuildTargetDependency buildTargetDependency = mock(BuildTargetDependency.class); - when(buildTargetDependency.getProjectPath()).thenReturn(":foo"); + when(buildTargetDependency.getProjectDir()).thenReturn(new File("foo").getAbsolutePath()); Set dependencies = new HashSet<>(); dependencies.add(buildTargetDependency); GradleSourceSet gradleSourceSetBar = getMockedTestGradleSourceSet();