Maven: reinit embedder on settings changes, e.g. offline mode settings (IDEA-17589)

This commit is contained in:
Anton Makeev
2010-11-11 12:01:13 +03:00
parent 514cdd1fd4
commit bf85c140b2
8 changed files with 65 additions and 41 deletions
@@ -255,11 +255,11 @@ public class MavenFacadeManager extends RemoteObjectWrapper<MavenFacade> {
}
public MavenEmbedderWrapper createEmbedder(final Project project) {
final MavenFacadeSettings settings = convertSettings(MavenProjectsManager.getInstance(project).getGeneralSettings());
return new MavenEmbedderWrapper(this) {
@NotNull
@Override
protected MavenFacadeEmbedder create() throws RemoteException {
final MavenFacadeSettings settings = convertSettings(MavenProjectsManager.getInstance(project).getGeneralSettings());
return MavenFacadeManager.this.getOrCreateWrappee().createEmbedder(settings);
}
};
@@ -133,6 +133,8 @@ public abstract class MavenGeneralConfigurable implements SearchableConfigurable
}
private void setData(MavenGeneralSettings data) {
data.beginUpdate();
data.setWorkOffline(checkboxWorkOffline.isSelected());
mavenPathsForm.setData(data);
@@ -145,6 +147,8 @@ public abstract class MavenGeneralConfigurable implements SearchableConfigurable
data.setFailureBehavior((MavenExecutionOptions.FailureMode)ComboBoxUtil.getSelectedValue(failPolicyComboModel));
data.setPluginUpdatePolicy((MavenExecutionOptions.PluginUpdatePolicy)ComboBoxUtil.getSelectedValue(pluginUpdatePolicyComboModel));
data.setSnapshotUpdatePolicy((MavenExecutionOptions.SnapshotUpdatePolicy)ComboBoxUtil.getSelectedValue(snapshotUpdatePolicyComboModel));
data.endUpdate();
}
private void getData(MavenGeneralSettings data) {
@@ -32,35 +32,54 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@SuppressWarnings({"UnusedDeclaration"})
public class MavenGeneralSettings implements Cloneable {
private boolean workOffline = false;
private String mavenHome = "";
private String mavenSettingsFile = "";
private String overridenLocalRepository = "";
private String overriddenLocalRepository = "";
private boolean printErrorStackTraces = false;
private boolean usePluginRegistry = false;
private boolean nonRecursive = false;
private MavenExecutionOptions.LoggingLevel outputLevel = MavenExecutionOptions.LoggingLevel.INFO;
private MavenExecutionOptions.ChecksumPolicy checksumPolicy = MavenExecutionOptions.ChecksumPolicy.FAIL;
private MavenExecutionOptions.FailureMode failureBehavior = MavenExecutionOptions.FailureMode.FAST;
private MavenExecutionOptions.SnapshotUpdatePolicy snapshotUpdatePolicy = MavenExecutionOptions.SnapshotUpdatePolicy.ALWAYS_UPDATE;
private MavenExecutionOptions.PluginUpdatePolicy pluginUpdatePolicy = MavenExecutionOptions.PluginUpdatePolicy.DO_NOT_UPDATE;
private volatile File myEffectiveLocalRepositoryCache;
private volatile Set<String> myDefaultPluginsCache;
private File myEffectiveLocalRepositoryCache;
private Set<String> myDefaultPluginsCache;
private int myBulkUpdateLevel = 0;
private List<Listener> myListeners = ContainerUtil.createEmptyCOWList();
public
public void beginUpdate() {
myBulkUpdateLevel++;
}
public void endUpdate() {
if (--myBulkUpdateLevel == 0) {
changed();
}
}
public void changed() {
if (myBulkUpdateLevel > 0) return;
myEffectiveLocalRepositoryCache = null;
myDefaultPluginsCache = null;
fireChanged();
}
@NotNull
MavenExecutionOptions.PluginUpdatePolicy getPluginUpdatePolicy() {
public MavenExecutionOptions.PluginUpdatePolicy getPluginUpdatePolicy() {
return pluginUpdatePolicy;
}
public void setPluginUpdatePolicy(MavenExecutionOptions.PluginUpdatePolicy value) {
if (value == null) return; // null may come from deserializator
this.pluginUpdatePolicy = value;
changed();
}
@NotNull
@@ -71,6 +90,7 @@ public class MavenGeneralSettings implements Cloneable {
public void setChecksumPolicy(MavenExecutionOptions.ChecksumPolicy value) {
if (value == null) return; // null may come from deserializator
this.checksumPolicy = value;
changed();
}
@NotNull
@@ -81,6 +101,7 @@ public class MavenGeneralSettings implements Cloneable {
public void setFailureBehavior(MavenExecutionOptions.FailureMode value) {
if (value == null) return; // null may come from deserializator
this.failureBehavior = value;
changed();
}
public
@@ -92,6 +113,7 @@ public class MavenGeneralSettings implements Cloneable {
public void setOutputLevel(MavenExecutionOptions.LoggingLevel value) {
if (value == null) return; // null may come from deserializator
this.outputLevel = value;
changed();
}
public
@@ -103,6 +125,7 @@ public class MavenGeneralSettings implements Cloneable {
public void setSnapshotUpdatePolicy(MavenExecutionOptions.SnapshotUpdatePolicy value) {
if (value == null) return; // null may come from deserializator
this.snapshotUpdatePolicy = value;
changed();
}
public boolean isWorkOffline() {
@@ -111,29 +134,30 @@ public class MavenGeneralSettings implements Cloneable {
public void setWorkOffline(boolean workOffline) {
this.workOffline = workOffline;
changed();
}
@NotNull
public String getOverridenLocalRepository() {
return overridenLocalRepository;
public String getOverriddenLocalRepository() {
return overriddenLocalRepository;
}
public File getEffectiveLocalRepository() {
File result = myEffectiveLocalRepositoryCache;
if (result != null) return result;
result = MavenUtil.resolveLocalRepository(overridenLocalRepository, mavenHome, mavenSettingsFile);
result = MavenUtil.resolveLocalRepository(overriddenLocalRepository, mavenHome, mavenSettingsFile);
myEffectiveLocalRepositoryCache = result;
return result;
}
public void setOverridenLocalRepository(final @Nullable String overridenLocalRepository) {
if (overridenLocalRepository != null) {
if (!Comparing.equal(this.overridenLocalRepository, overridenLocalRepository)) {
this.overridenLocalRepository = overridenLocalRepository;
public void setOverriddenLocalRepository(final @Nullable String overridenLocalRepository) {
if (overridenLocalRepository == null) return;
localRepositoryChanged();
}
if (!Comparing.equal(this.overriddenLocalRepository, overridenLocalRepository)) {
this.overriddenLocalRepository = overridenLocalRepository;
changed();
}
}
@@ -147,7 +171,7 @@ public class MavenGeneralSettings implements Cloneable {
this.mavenHome = mavenHome;
myDefaultPluginsCache = null;
pathsChanged();
changed();
}
}
@@ -162,23 +186,14 @@ public class MavenGeneralSettings implements Cloneable {
}
public void setMavenSettingsFile(@Nullable String mavenSettingsFile) {
if (mavenSettingsFile != null) {
if (!Comparing.equal(this.mavenSettingsFile, mavenSettingsFile)) {
this.mavenSettingsFile = mavenSettingsFile;
pathsChanged();
}
if (mavenSettingsFile == null) return;
if (!Comparing.equal(this.mavenSettingsFile, mavenSettingsFile)) {
this.mavenSettingsFile = mavenSettingsFile;
changed();
}
}
public void localRepositoryChanged() {
pathsChanged();
}
private void pathsChanged() {
myEffectiveLocalRepositoryCache = null;
fidePathsChanged();
}
@Nullable
public File getEffectiveUserSettingsIoFile() {
return MavenUtil.resolveUserSettingsFile(getMavenSettingsFile());
@@ -242,6 +257,7 @@ public class MavenGeneralSettings implements Cloneable {
public void setPrintErrorStackTraces(boolean value) {
printErrorStackTraces = value;
changed();
}
public boolean isUsePluginRegistry() {
@@ -250,6 +266,7 @@ public class MavenGeneralSettings implements Cloneable {
public void setUsePluginRegistry(final boolean usePluginRegistry) {
this.usePluginRegistry = usePluginRegistry;
changed();
}
public boolean isNonRecursive() {
@@ -258,6 +275,7 @@ public class MavenGeneralSettings implements Cloneable {
public void setNonRecursive(final boolean nonRecursive) {
this.nonRecursive = nonRecursive;
changed();
}
public boolean equals(final Object o) {
@@ -275,7 +293,7 @@ public class MavenGeneralSettings implements Cloneable {
if (workOffline != that.workOffline) return false;
if (!checksumPolicy.equals(that.checksumPolicy)) return false;
if (!failureBehavior.equals(that.failureBehavior)) return false;
if (!overridenLocalRepository.equals(that.overridenLocalRepository)) return false;
if (!overriddenLocalRepository.equals(that.overriddenLocalRepository)) return false;
if (!mavenHome.equals(that.mavenHome)) return false;
if (!mavenSettingsFile.equals(that.mavenSettingsFile)) return false;
@@ -287,7 +305,7 @@ public class MavenGeneralSettings implements Cloneable {
result = (workOffline ? 1 : 0);
result = 31 * result + mavenHome.hashCode();
result = 31 * result + mavenSettingsFile.hashCode();
result = 31 * result + overridenLocalRepository.hashCode();
result = 31 * result + overriddenLocalRepository.hashCode();
result = 31 * result + (printErrorStackTraces ? 1 : 0);
result = 31 * result + (usePluginRegistry ? 1 : 0);
result = 31 * result + (nonRecursive ? 1 : 0);
@@ -304,6 +322,7 @@ public class MavenGeneralSettings implements Cloneable {
try {
MavenGeneralSettings result = (MavenGeneralSettings)super.clone();
result.myListeners = ContainerUtil.createEmptyCOWList();
result.myBulkUpdateLevel = 0;
return result;
}
catch (CloneNotSupportedException e) {
@@ -319,13 +338,13 @@ public class MavenGeneralSettings implements Cloneable {
myListeners.remove(l);
}
private void fidePathsChanged() {
private void fireChanged() {
for (Listener each : myListeners) {
each.pathsChanged();
each.changed();
}
}
public interface Listener {
void pathsChanged();
void changed();
}
}
@@ -142,7 +142,7 @@ public class MavenProjectsManagerWatcher {
EditorFactory.getInstance().getEventMulticaster().addDocumentListener(myDocumentListener, myBusConnection);
final MavenGeneralSettings.Listener mySettingsPathsChangesListener = new MavenGeneralSettings.Listener() {
public void pathsChanged() {
public void changed() {
updateSettingsFilePointers();
onSettingsChange();
}
@@ -256,7 +256,7 @@ public class MavenProjectsManagerWatcher {
}
private void onSettingsXmlChange() {
myGeneralSettings.localRepositoryChanged();
myGeneralSettings.changed();
// onSettingsChange() will be called indirectly by pathsChanged listener on GeneralSettings object
}
@@ -251,7 +251,7 @@ public abstract class MavenTestCase extends UsefulTestCase {
}
protected void setRepositoryPath(String path) {
getMavenGeneralSettings().setOverridenLocalRepository(path);
getMavenGeneralSettings().setOverriddenLocalRepository(path);
}
protected String getProjectPath() {
@@ -50,7 +50,8 @@ public class MavenIndicesTestFixture {
addToRepository(each);
}
MavenProjectsManager.getInstance(myProject).getGeneralSettings().setOverridenLocalRepository(myRepositoryHelper.getTestDataPath(myLocalRepoDir));
MavenProjectsManager.getInstance(myProject).getGeneralSettings().setOverriddenLocalRepository(
myRepositoryHelper.getTestDataPath(myLocalRepoDir));
getIndicesManager().setTestIndexDir(new File(myDir, "MavenIndices"));
myIndicesManager = MavenProjectIndicesManager.getInstance(myProject);
@@ -26,7 +26,7 @@ public class MavenSettingsTest extends MavenTestCase {
MavenGeneralSettings s = new MavenGeneralSettings();
s.addListener(new MavenGeneralSettings.Listener() {
@Override
public void pathsChanged() {
public void changed() {
log[0] += "changed ";
}
});