IDEA-113403 Gradle: disable wrapper verification by default and add check for default wrapper files

This commit is contained in:
Vladislav.Soroka
2013-09-10 16:47:56 +04:00
parent 7434b38921
commit 911bea96a6
7 changed files with 117 additions and 37 deletions
@@ -1,8 +1,10 @@
gradle.name=Gradle
gradle.settings.text.use.wrapper=Use gradle wrapper (recommended)
gradle.settings.text.use.wrapper.disabled=Use gradle wrapper (not configured for the current project)
gradle.settings..text.use.local.distribution=Use local gradle distribution
gradle.settings.text.use.default_wrapper.configured=Use default gradle wrapper (recommended)
gradle.settings.text.use.default_wrapper.not_configured=Use default gradle wrapper (not configured for the current project)
gradle.settings.text.use.wrapper.with_verification=Use gradle wrapper with verification
gradle.settings.text.wrapper.verification.compatibility=Gradle wrapper verification works with Gradle 1.7 or later
gradle.settings.text.use.local.distribution=Use local gradle distribution
gradle.settings.text.use.bundled.distribution=Use bundled gradle distribution: ({0})
gradle.settings.text.home.path=Gradle home:
@@ -167,7 +167,15 @@ implements ExternalSystemConfigurableAware, ExternalSystemUiAware, ExternalSyste
}
GradleProjectSettings projectLevelSettings = settings.getLinkedProjectSettings(pair.second);
DistributionType distributionType = projectLevelSettings == null ? DistributionType.LOCAL : projectLevelSettings.getDistributionType();
final DistributionType distributionType;
if (projectLevelSettings == null) {
distributionType =
GradleUtil.isGradleDefaultWrapperFilesExist(pair.second) ? DistributionType.DEFAULT_WRAPPED : DistributionType.LOCAL;
}
else {
distributionType = projectLevelSettings.getDistributionType() == null ? DistributionType.LOCAL : projectLevelSettings.getDistributionType();
}
GradleExecutionSettings result = new GradleExecutionSettings(localGradlePath,
settings.getServiceDirectoryPath(),
distributionType,
@@ -34,6 +34,7 @@ import org.gradle.tooling.model.idea.BasicIdeaProject;
import org.gradle.tooling.model.idea.IdeaProject;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.settings.DistributionType;
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings;
import java.io.File;
@@ -133,15 +134,17 @@ public class GradleExecutionHelper {
public <T> T execute(@NotNull String projectPath, @Nullable GradleExecutionSettings settings, @NotNull Function<ProjectConnection, T> f) {
// This is a workaround to get right base dir in case of 'PROJECT' setting used in case custom wrapper property file location
// see org.gradle.wrapper.PathAssembler#getBaseDir for details
String userDir = null;
try {
// This is a workaround to get right base dir in case of 'PROJECT' setting used
// see org.gradle.wrapper.PathAssembler#getBaseDir for details
userDir = System.getProperty("user.dir");
System.setProperty("user.dir", projectPath);
}
catch (Exception e) {
// ignore
if(settings != null && settings.getDistributionType() == DistributionType.WRAPPED) {
try {
userDir = System.getProperty("user.dir");
System.setProperty("user.dir", projectPath);
}
catch (Exception e) {
// ignore
}
}
ProjectConnection connection = getConnection(projectPath, settings);
try {
@@ -30,6 +30,7 @@ import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBRadioButton;
import com.intellij.util.Alarm;
import com.intellij.util.Consumer;
import com.intellij.util.ui.UIUtil;
import org.gradle.util.GradleVersion;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -69,6 +70,8 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
private JLabel myGradleHomeLabel;
private TextFieldWithBrowseButton myGradleHomePathField;
private JBRadioButton myUseWrapperButton;
private JBRadioButton myUseWrapperWithVerificationButton;
private JBLabel myUseWrapperVerificationLabel;
private JBRadioButton myUseLocalDistributionButton;
private JBRadioButton myUseBundledDistributionButton;
@@ -111,7 +114,11 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
initControls();
content.add(myUseWrapperButton, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
content.add(myUseBundledDistributionButton, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
content.add(myUseWrapperWithVerificationButton, ExternalSystemUiUtil.getLabelConstraints(indentLevel));
content.add(myUseWrapperVerificationLabel, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
//content.add(Box.createGlue(), ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
// Hide bundled distribution option for a while
// content.add(myUseBundledDistributionButton, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
content.add(myUseLocalDistributionButton, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
content.add(myGradleHomeLabel, ExternalSystemUiUtil.getLabelConstraints(indentLevel));
@@ -122,7 +129,7 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean localDistributionEnabled = e.getSource() == myUseLocalDistributionButton;
boolean localDistributionEnabled = myUseLocalDistributionButton.isSelected();
myGradleHomePathField.setEnabled(localDistributionEnabled);
if (localDistributionEnabled) {
if(myGradleHomePathField.getText().isEmpty()){
@@ -142,9 +149,16 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
}
}
};
myUseWrapperButton = new JBRadioButton(GradleBundle.message("gradle.settings.text.use.wrapper"));
myUseWrapperButton = new JBRadioButton(GradleBundle.message("gradle.settings.text.use.default_wrapper.configured"));
myUseWrapperButton.addActionListener(listener);
myUseLocalDistributionButton = new JBRadioButton(GradleBundle.message("gradle.settings..text.use.local.distribution"));
myUseWrapperWithVerificationButton = new JBRadioButton(GradleBundle.message("gradle.settings.text.use.wrapper.with_verification"));
myUseWrapperWithVerificationButton.addActionListener(listener);
myUseWrapperVerificationLabel = new JBLabel(GradleBundle.message("gradle.settings.text.wrapper.verification.compatibility"));
myUseWrapperVerificationLabel.setFont(UIUtil.getLabelFont(UIUtil.FontSize.MINI));
myUseWrapperVerificationLabel.setIcon(UIUtil.getBalloonInformationIcon());
myUseLocalDistributionButton = new JBRadioButton(GradleBundle.message("gradle.settings.text.use.local.distribution"));
myUseLocalDistributionButton.addActionListener(listener);
myUseBundledDistributionButton = new JBRadioButton(
@@ -154,6 +168,7 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(myUseWrapperButton);
buttonGroup.add(myUseWrapperWithVerificationButton);
buttonGroup.add(myUseBundledDistributionButton);
buttonGroup.add(myUseLocalDistributionButton);
}
@@ -217,9 +232,11 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
return GradleBundle.message("gradle.home.setting.type.explicit.incorrect", gradleHomePath);
}
settings.setDistributionType(DistributionType.LOCAL);
} else if (myUseWrapperButton.isSelected()) {
} else if(myUseWrapperButton.isSelected()) {
settings.setDistributionType(DistributionType.DEFAULT_WRAPPED);
} else if(myUseWrapperWithVerificationButton.isSelected()) {
settings.setDistributionType(DistributionType.WRAPPED);
} else {
} else if (myUseBundledDistributionButton.isSelected()) {
settings.setDistributionType(DistributionType.BUNDLED);
}
@@ -228,18 +245,20 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
@Override
protected boolean isExtraSettingModified() {
if (myUseBundledDistributionButton.isSelected() &&
getInitialSettings().getDistributionType() != DistributionType.BUNDLED) {
DistributionType distributionType = getInitialSettings().getDistributionType();
if (myUseBundledDistributionButton.isSelected() && distributionType != DistributionType.BUNDLED) {
return true;
}
if (myUseWrapperButton.isSelected() &&
getInitialSettings().getDistributionType() != DistributionType.WRAPPED) {
return true;
if (myUseWrapperButton.isSelected() && distributionType != DistributionType.DEFAULT_WRAPPED) {
return true;
}
if (myUseLocalDistributionButton.isSelected() &&
getInitialSettings().getDistributionType() != DistributionType.LOCAL) {
if (myUseWrapperWithVerificationButton.isSelected() && distributionType != DistributionType.WRAPPED) {
return true;
}
if (myUseLocalDistributionButton.isSelected() && distributionType != DistributionType.LOCAL) {
return true;
}
@@ -260,7 +279,7 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
myGradleHomePathField.getTextField().setForeground(LocationSettingType.EXPLICIT_CORRECT.getColor());
updateWrapperControls(getInitialSettings().getExternalProjectPath());
if (myUseWrapperButton.isSelected()) {
if (!myUseLocalDistributionButton.isSelected()) {
myGradleHomePathField.setEnabled(false);
return;
}
@@ -282,15 +301,42 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting
}
public void updateWrapperControls(@Nullable String linkedProjectPath) {
myUseWrapperButton.setText(GradleBundle.message("gradle.settings.text.use.wrapper"));
if(StringUtil.isEmpty(linkedProjectPath)) {
myUseLocalDistributionButton.setSelected(true);
myGradleHomePathField.setEnabled(true);
return;
}
final boolean isGradleDefaultWrapperFilesExist = GradleUtil.isGradleDefaultWrapperFilesExist(linkedProjectPath);
if (isGradleDefaultWrapperFilesExist) {
myUseWrapperButton.setEnabled(true);
myUseWrapperButton.setSelected(true);
myGradleHomePathField.setEnabled(false);
myUseWrapperButton.setText(GradleBundle.message("gradle.settings.text.use.default_wrapper.configured"));
} else {
myUseWrapperButton.setEnabled(false);
myUseLocalDistributionButton.setSelected(true);
myGradleHomePathField.setEnabled(true);
myUseWrapperButton.setText(GradleBundle.message("gradle.settings.text.use.default_wrapper.not_configured"));
}
if(getInitialSettings().getDistributionType() == null) {
return;
}
switch (getInitialSettings().getDistributionType()) {
case LOCAL:
myGradleHomePathField.setEnabled(true);
myUseLocalDistributionButton.setSelected(true);
break;
case WRAPPED:
case DEFAULT_WRAPPED:
myGradleHomePathField.setEnabled(false);
myUseWrapperButton.setSelected(true);
myUseWrapperButton.setEnabled(true);
break;
case WRAPPED:
myGradleHomePathField.setEnabled(false);
myUseWrapperWithVerificationButton.setSelected(true);
break;
case BUNDLED:
myGradleHomePathField.setEnabled(false);
@@ -20,5 +20,30 @@ package org.jetbrains.plugins.gradle.settings;
* @since 8/23/13
*/
public enum DistributionType {
BUNDLED, WRAPPED, LOCAL
/**
* Gradle version packaged with IDE used
*/
BUNDLED,
/**
* The default configuration of the wrapper task assumed based on manually wrapper generated files:
* <p/>
* Build layout with default wrapper task:
* <pre>
* project_dir/
* gradlew
* gradlew.bat
* gradle/wrapper/
* gradle-wrapper.jar
* <b>gradle-wrapper.properties</b>
* </pre>
*/
DEFAULT_WRAPPED,
/**
* Wrapper task configuration based on build.gradle script to be used.
*/
WRAPPED,
/**
* Locally installed gradle to be used
*/
LOCAL
}
@@ -26,11 +26,7 @@ import org.jetbrains.annotations.Nullable;
public class GradleProjectSettings extends ExternalProjectSettings {
@Nullable private String myGradleHome;
@NotNull private DistributionType distributionType;
public GradleProjectSettings() {
this.distributionType = DistributionType.LOCAL;
}
@Nullable private DistributionType distributionType;
@Nullable
public String getGradleHome() {
@@ -41,12 +37,12 @@ public class GradleProjectSettings extends ExternalProjectSettings {
myGradleHome = gradleHome;
}
@NotNull
@Nullable
public DistributionType getDistributionType() {
return distributionType;
}
public void setDistributionType(@NotNull DistributionType distributionType) {
public void setDistributionType(@Nullable DistributionType distributionType) {
this.distributionType = distributionType;
}
@@ -53,7 +53,7 @@ public class GradleUtil {
}
@SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
public static boolean isGradleWrapperDefined(@Nullable String gradleProjectPath) {
public static boolean isGradleDefaultWrapperFilesExist(@Nullable String gradleProjectPath) {
return !StringUtil.isEmpty(getWrapperDistribution(gradleProjectPath));
}