From ebfb2043c2a62adde2976e97fac8c3c3ba9e4403 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 20 Jul 2018 11:39:40 +0200 Subject: [PATCH] =?UTF-8?q?PathMacrosImpl=20=E2=80=94=20implement=20Modifi?= =?UTF-8?q?cationTracker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/options/PathMacrosImpl.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/platform/projectModel-impl/src/com/intellij/application/options/PathMacrosImpl.java b/platform/projectModel-impl/src/com/intellij/application/options/PathMacrosImpl.java index 15fc38a1a4fd..2adaf3254e1b 100644 --- a/platform/projectModel-impl/src/com/intellij/application/options/PathMacrosImpl.java +++ b/platform/projectModel-impl/src/com/intellij/application/options/PathMacrosImpl.java @@ -4,6 +4,7 @@ package com.intellij.application.options; import com.intellij.openapi.application.PathMacros; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.hash.LinkedHashMap; @@ -23,12 +24,12 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; name = "PathMacrosImpl", storages = @Storage(value = "path.macros.xml", roamingType = RoamingType.PER_OS) ) -public class PathMacrosImpl extends PathMacros implements PersistentStateComponent { +public class PathMacrosImpl extends PathMacros implements PersistentStateComponent, ModificationTracker { private static final Logger LOG = Logger.getInstance(PathMacrosImpl.class); private final Map myLegacyMacros = new THashMap<>(); private final Map myMacros = new LinkedHashMap<>(); - private int myModificationStamp = 0; + private long myModificationStamp = 0; private final ReentrantReadWriteLock myLock = new ReentrantReadWriteLock(); private final List myIgnoredMacros = ContainerUtil.createLockFreeCopyOnWriteList(); @@ -86,8 +87,15 @@ public class PathMacrosImpl extends PathMacros implements PersistentStateCompone @Override public void setIgnoredMacroNames(@NotNull final Collection names) { - myIgnoredMacros.clear(); - myIgnoredMacros.addAll(names); + try { + myLock.writeLock().lock(); + myIgnoredMacros.clear(); + myIgnoredMacros.addAll(names); + } + finally { + myModificationStamp++; + myLock.writeLock().unlock(); + } } @Override @@ -95,7 +103,7 @@ public class PathMacrosImpl extends PathMacros implements PersistentStateCompone if (!myIgnoredMacros.contains(name)) myIgnoredMacros.add(name); } - public int getModificationStamp() { + public long getModificationCount() { myLock.readLock().lock(); try { return myModificationStamp; @@ -197,7 +205,7 @@ public class PathMacrosImpl extends PathMacros implements PersistentStateCompone public Element getState() { try { Element element = new Element("state"); - myLock.writeLock().lock(); + myLock.readLock().lock(); for (Map.Entry entry : myMacros.entrySet()) { String value = entry.getValue(); @@ -217,7 +225,7 @@ public class PathMacrosImpl extends PathMacros implements PersistentStateCompone return element; } finally { - myLock.writeLock().unlock(); + myLock.readLock().unlock(); } } @@ -257,7 +265,7 @@ public class PathMacrosImpl extends PathMacros implements PersistentStateCompone } } - public void addMacroReplacements(ReplacePathToMacroMap result) { + public void addMacroReplacements(@NotNull ReplacePathToMacroMap result) { for (String name : getUserMacroNames()) { String value = getValue(name); if (!StringUtil.isEmptyOrSpaces(value)) { @@ -266,7 +274,7 @@ public class PathMacrosImpl extends PathMacros implements PersistentStateCompone } } - public void addMacroExpands(ExpandMacroToPathMap result) { + public void addMacroExpands(@NotNull ExpandMacroToPathMap result) { for (String name : getUserMacroNames()) { String value = getValue(name); if (!StringUtil.isEmptyOrSpaces(value)) {