From 50878401dabb7a948c2203b8db06ce80489ecfcd Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 31 Aug 2012 12:01:50 +0400 Subject: [PATCH] more synchronisation --- .../codeStyle/CodeStyleSettingsManager.java | 49 +++++++++---------- .../source/codeStyle/CodeStyleSchemeImpl.java | 2 +- .../PersistableCodeStyleSchemes.java | 10 ++-- .../options/AbstractSchemesManager.java | 32 ++++++------ 4 files changed, 44 insertions(+), 49 deletions(-) diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsManager.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsManager.java index d6fe531c685f..268e500e0011 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsManager.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsManager.java @@ -28,21 +28,24 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class CodeStyleSettingsManager implements PersistentStateComponent { - private static final Logger LOG = Logger.getInstance("#" + CodeStyleSettingsManager.class.getName()); - public CodeStyleSettings PER_PROJECT_SETTINGS = null; - public boolean USE_PER_PROJECT_SETTINGS = false; - private CodeStyleSettings myTemporarySettings; - private boolean myIsLoaded = false; + public volatile CodeStyleSettings PER_PROJECT_SETTINGS = null; + public volatile boolean USE_PER_PROJECT_SETTINGS = false; + private volatile CodeStyleSettings myTemporarySettings; + private volatile boolean myIsLoaded = false; - public static CodeStyleSettingsManager getInstance(Project project) { + public static CodeStyleSettingsManager getInstance(@NotNull Project project) { ProjectCodeStyleSettingsManager projectSettingsManager = ServiceManager.getService(project, ProjectCodeStyleSettingsManager.class); if (!projectSettingsManager.isLoaded()) { - LegacyCodeStyleSettingsManager legacySettingsManager = ServiceManager.getService(project, LegacyCodeStyleSettingsManager.class); - if (legacySettingsManager != null && legacySettingsManager.getState() != null) { - projectSettingsManager.loadState(legacySettingsManager.getState()); - LOG.info("Imported old project code style settings."); + synchronized (projectSettingsManager) { + if (!projectSettingsManager.isLoaded()) { + LegacyCodeStyleSettingsManager legacySettingsManager = ServiceManager.getService(project, LegacyCodeStyleSettingsManager.class); + if (legacySettingsManager != null && legacySettingsManager.getState() != null) { + projectSettingsManager.loadState(legacySettingsManager.getState()); + LOG.info("Imported old project code style settings."); + } + } } } return projectSettingsManager; @@ -58,26 +61,29 @@ public class CodeStyleSettingsManager implements PersistentStateComponent(this, new CodeStyleSettingsManager())); } + @Override public Element getState() { Element result = new Element("state"); try { @@ -89,6 +95,7 @@ public class CodeStyleSettingsManager implements PersistentStateComponent, NamedComponent { - - public final static String CODE_STYLE_SCHEMES_FILE = "code.style.schemes.xml"; + @NonNls static final String CODE_STYLE_SCHEMES_FILE = "code.style.schemes.xml"; private boolean isLoaded; @@ -64,7 +64,7 @@ public class PersistableCodeStyleSchemes extends CodeStyleSchemesImpl implements public void loadState(Element state) { init(); XmlSerializer.deserializeInto(this, state); - this.isLoaded = true; + isLoaded = true; updateCurrentScheme(); } @@ -76,7 +76,7 @@ public class PersistableCodeStyleSchemes extends CodeStyleSchemesImpl implements @Override public boolean isLoaded() { - return this.isLoaded; + return isLoaded; } @Override @@ -86,7 +86,7 @@ public class PersistableCodeStyleSchemes extends CodeStyleSchemesImpl implements if (legacySettings != null) { CURRENT_SCHEME_NAME = legacySettings.CURRENT_SCHEME_NAME; } - this.isLoaded = true; + isLoaded = true; updateCurrentScheme(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/AbstractSchemesManager.java b/platform/platform-impl/src/com/intellij/openapi/options/AbstractSchemesManager.java index f21c7f34cf8f..ae54be75a567 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/AbstractSchemesManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/AbstractSchemesManager.java @@ -32,9 +32,10 @@ public abstract class AbstractSchemesManager mySchemes = new ArrayList(); - private T myCurrentScheme; + private volatile T myCurrentScheme; private String myCurrentSchemeName; + @Override public void addNewScheme(@NotNull final T scheme, final boolean replaceExisting) { int toReplace = -1; boolean newSchemeIsShared = isShared(scheme); @@ -80,17 +81,20 @@ public abstract class AbstractSchemesManager getAllSchemes() { return Collections.unmodifiableList(new ArrayList(mySchemes)); } + @Override @Nullable public T findSchemeByName(final String schemeName) { for (T scheme : mySchemes) { @@ -102,34 +106,26 @@ public abstract class AbstractSchemesManager getAllSchemeNames() { return getAllSchemeNames(mySchemes); @@ -175,6 +172,7 @@ public abstract class AbstractSchemesManager> loadSharedSchemes() { return loadSharedSchemes(getAllSchemes());