diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleConfigurable.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleConfigurable.java index 35034e6af7e1..65d496e0648b 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleConfigurable.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleConfigurable.java @@ -441,7 +441,7 @@ public class GradleConfigurable implements SearchableConfigurable, Configurable. return; } - GradleSettings settings = GradleSettings.getInstance(myProject); + GradleSettings settings = myHelper.getSettings(myProject); String linkedProjectPath = myLinkedGradleProjectPathField.getText(); final String gradleHomePath = getPathToUse(myGradleHomeModifiedByUser, settings.getGradleHome(), myGradleHomePathField.getText()); @@ -456,11 +456,11 @@ public class GradleConfigurable implements SearchableConfigurable, Configurable. else { preferLocalToWrapper = myUseLocalDistributionButton.isSelected(); } - GradleSettings.applySettings(linkedProjectPath, gradleHomePath, preferLocalToWrapper, serviceDirPath, myProject); + myHelper.applySettings(linkedProjectPath, gradleHomePath, preferLocalToWrapper, serviceDirPath, myProject); - Project defaultProject = ProjectManager.getInstance().getDefaultProject(); + Project defaultProject = myHelper.getDefaultProject(); if (myProject != defaultProject) { - GradleSettings.applyPreferLocalInstallationToWrapper(preferLocalToWrapper, defaultProject); + myHelper.applyPreferLocalInstallationToWrapper(preferLocalToWrapper, defaultProject); } if (isValidGradleHome(gradleHomePath)) { @@ -476,7 +476,7 @@ public class GradleConfigurable implements SearchableConfigurable, Configurable. myGradleHomeSettingType = GradleHomeSettingType.DEDUCED; } } - else { + else if (preferLocalToWrapper) { if (StringUtil.isEmpty(gradleHomePath)) { myGradleHomeSettingType = GradleHomeSettingType.UNKNOWN; } @@ -696,9 +696,20 @@ public class GradleConfigurable implements SearchableConfigurable, Configurable. @Nullable File getGradleHome(@Nullable Project project); + @NotNull + Project getDefaultProject(); + @NotNull GradleSettings getSettings(@NotNull Project project); + void applySettings(@Nullable String linkedProjectPath, + @Nullable String gradleHomePath, + boolean preferLocalInstallationToWrapper, + @Nullable String serviceDirectoryPath, + @NotNull Project project); + + void applyPreferLocalInstallationToWrapper(boolean preferLocalToWrapper, @NotNull Project project); + boolean isGradleWrapperDefined(@Nullable String linkedProjectPath); void showBalloon(@NotNull MessageType messageType, @NotNull GradleHomeSettingType settingType, long delayMillis); @@ -722,13 +733,34 @@ public class GradleConfigurable implements SearchableConfigurable, Configurable. public File getGradleHome(@Nullable Project project) { return myInstallationManager.getGradleHome(project); } - + + @NotNull + @Override + public Project getDefaultProject() { + return ProjectManager.getInstance().getDefaultProject(); + } + @NotNull @Override public GradleSettings getSettings(@NotNull Project project) { return GradleSettings.getInstance(project); } + @Override + public void applySettings(@Nullable String linkedProjectPath, + @Nullable String gradleHomePath, + boolean preferLocalInstallationToWrapper, + @Nullable String serviceDirectoryPath, + @NotNull Project project) + { + GradleSettings.applySettings(linkedProjectPath, gradleHomePath, preferLocalInstallationToWrapper, serviceDirectoryPath, project); + } + + @Override + public void applyPreferLocalInstallationToWrapper(boolean preferLocalToWrapper, @NotNull Project project) { + GradleSettings.applyPreferLocalInstallationToWrapper(preferLocalToWrapper, project); + } + @Override public boolean isGradleWrapperDefined(@Nullable String linkedProjectPath) { return GradleUtil.isGradleWrapperDefined(linkedProjectPath); diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/config/GradleConfigurableTest.groovy b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/config/GradleConfigurableTest.groovy index 94027e3544e7..230182e849ec 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/config/GradleConfigurableTest.groovy +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/config/GradleConfigurableTest.groovy @@ -20,6 +20,7 @@ public class GradleConfigurableTest { def GradleConfigurable configurable def projectImpl + Project defaultProject = {} as Project Project project def helper Map settings = [:].withDefault { new GradleSettings() } @@ -28,7 +29,10 @@ public class GradleConfigurableTest { void setUp() { helper = [ getSettings : { settings[it] }, - getGradleHome : { new File(VALID_GRADLE_HOME) }, + applySettings: {linkedProjectPath, gradleHomePath, preferLocalInstallationToWrapper, serviceDirectoryPath, project -> }, + applyPreferLocalInstallationToWrapper: { preferLocalInstallationToWrapper, project -> }, + getGradleHome: { new File(VALID_GRADLE_HOME) }, + getDefaultProject: { defaultProject }, isGradleSdkHome: { it == VALID_GRADLE_HOME }, isGradleWrapperDefined: { it == VALID_LINKED_PATH_WITH_WRAPPER } ] @@ -76,7 +80,7 @@ public class GradleConfigurableTest { @SuppressWarnings("GroovyAssignabilityCheck") @Test - void "invalid gradle home is not reported if home control inactive"() { + void "invalid gradle home is not reported if home control is inactive"() { projectImpl.isDefault = { false } settings[project].linkedProjectPath = VALID_LINKED_PATH_WITH_WRAPPER settings[project].preferLocalInstallationToWrapper = false @@ -98,4 +102,15 @@ public class GradleConfigurableTest { fail() } } + + @Test + void "do not show 'invalid gradle path' balloon if 'use wrapper' is selected"() { + settings[project].linkedProjectPath = VALID_LINKED_PATH_WITH_WRAPPER + settings[project].preferLocalInstallationToWrapper = false + configurable.useWrapperButton.selected = false + configurable.gradleHomePathField.text = INVALID_GRADLE_HOME + configurable.useWrapperButton.selected = true + helper.showBalloon = { messageType, settingType, long delay -> fail() } + configurable.apply() + } }