From 1b3c0ed52ffae142bb138175bfa744b7cd5c3616 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Mon, 9 Dec 2019 14:33:43 +0300 Subject: [PATCH] [Gradle] do not import `buildSrc` project if it was included into the main build IDEA-228368 GitOrigin-RevId: e5a8c55d51e7fa8727b11b5b3c715c600f05dfa6 --- .../importing/GradleBuildSrcImportingTest.kt | 17 +++++++++++++++++ .../project/GradleBuildSrcProjectsResolver.java | 5 +++++ .../gradle/tooling/util/VersionMatcher.java | 12 +++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/plugins/gradle/java/testSources/importing/GradleBuildSrcImportingTest.kt b/plugins/gradle/java/testSources/importing/GradleBuildSrcImportingTest.kt index 6fbce0622152..b9ce881960ae 100644 --- a/plugins/gradle/java/testSources/importing/GradleBuildSrcImportingTest.kt +++ b/plugins/gradle/java/testSources/importing/GradleBuildSrcImportingTest.kt @@ -1,6 +1,7 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.plugins.gradle.importing +import org.jetbrains.plugins.gradle.tooling.annotation.TargetVersions import org.junit.Test class GradleBuildSrcImportingTest : GradleImportingTestCase() { @@ -21,4 +22,20 @@ class GradleBuildSrcImportingTest : GradleImportingTestCase() { assertModules("project", "project.main", "project.test", "project.buildSrc", "project.buildSrc.main", "project.buildSrc.test") } + + @TargetVersions("<6.0") // since 6.9 'buildSrc' is a reserved project name, https://docs.gradle.org/current/userguide/upgrading_version_5.html#buildsrc_is_now_reserved_as_a_project_and_subproject_build_name + @Test + fun `test buildSrc project is included into the main build`() { + createProjectSubFile("buildSrc/src/main/java/my/pack/Util.java", + "package my.pack;\npublic class Util {}") + + importProject("apply plugin: 'java'") + assertModules("project", "project.main", "project.test", + "project.buildSrc", "project.buildSrc.main", "project.buildSrc.test") + + createSettingsFile("include 'buildSrc'") + importProject("apply plugin: 'java'") + assertModules("project", "project.main", "project.test", "project.buildSrc") + + } } \ No newline at end of file diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java index 6f1a37beec30..b12f63c1109a 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java @@ -170,6 +170,11 @@ public class GradleBuildSrcProjectsResolver { return; } + if (includedModulesPaths.containsKey(projectPath)) { + // `buildSrc` has been already included into the main build (prohibited since 6.0, https://docs.gradle.org/current/userguide/upgrading_version_5.html#buildsrc_is_now_reserved_as_a_project_and_subproject_build_name) + return; + } + if (ArrayUtil.isEmpty(projectPathFile.list((dir, name) -> !name.equals(".gradle") && !name.equals("build")))) { return; } diff --git a/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/tooling/util/VersionMatcher.java b/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/tooling/util/VersionMatcher.java index a69d51d8bdb6..248a333811bd 100644 --- a/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/tooling/util/VersionMatcher.java +++ b/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/tooling/util/VersionMatcher.java @@ -35,7 +35,7 @@ public class VersionMatcher { } public boolean isVersionMatch(@Nullable TargetVersions targetVersions) { - if (targetVersions == null || targetVersions.value() == null || targetVersions.value().isEmpty()) return true; + if (targetVersions == null || targetVersions.value().isEmpty()) return true; final GradleVersion current = adjust(myGradleVersion, targetVersions.checkBaseVersions()); @@ -43,6 +43,16 @@ public class VersionMatcher { String minVersion = targetVersions.value().substring(0, targetVersions.value().length() - 1); return compare(current, minVersion, targetVersions.checkBaseVersions()) >= 0; } + else if (targetVersions.value().startsWith("<")) { + if (targetVersions.value().startsWith("<=")) { + String maxVersion = targetVersions.value().substring(2); + return compare(current, maxVersion, targetVersions.checkBaseVersions()) <= 0; + } + else { + String maxVersion = targetVersions.value().substring(1); + return compare(current, maxVersion, targetVersions.checkBaseVersions()) < 0; + } + } else { final int rangeIndex = targetVersions.value().indexOf(RANGE_TOKEN); if (rangeIndex != -1) {