From dd30df2d2f294b95d1d9818df3a89568b34df61e Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 9 Oct 2018 15:00:18 +0300 Subject: [PATCH] port listeners lists to ContainerUtil.createLockFreeCopyOnWriteList() to simplify and make consistent --- .../debugger/ui/HotSwapProgressImpl.java | 2 +- .../TextEditorBasedStructureViewModel.java | 3 +- .../codeStyle/CodeStyleSettingsManager.java | 4 +-- .../codeInsight/lookup/impl/LookupImpl.java | 2 +- .../find/impl/livePreview/LivePreview.java | 2 +- .../com/intellij/ide/actions/BigPopupUI.java | 7 ++--- .../ui/table/ThreeStateCheckBoxRenderer.java | 9 +++--- .../impl/impl/RefactoringTransactionImpl.java | 8 +++--- .../src/com/intellij/util/ui/StatusText.java | 6 ++-- .../intellij/ide/plugins/PluginInstaller.java | 28 ++++++++----------- .../diff/impl/util/SyncScrollSupport.java | 5 ++-- .../editor/impl/SoftWrapModelImpl.java | 3 +- .../mapping/SoftWrapApplianceManager.java | 4 +-- .../openapi/wm/impl/IdeGlassPaneImpl.java | 3 +- .../src/com/intellij/ui/BalloonImpl.java | 6 ++-- .../testframework/TestConsoleProperties.java | 9 ++---- .../intellij/vcs/log/ui/AbstractVcsLogUi.java | 6 ++-- .../newProject/PythonProjectGenerator.java | 2 +- .../PyParameterTableModel.java | 7 ----- .../run/PythonRunConfigurationForm.java | 3 +- 20 files changed, 51 insertions(+), 68 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java index 5cf4f23410d7..9e8226cc3c50 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapProgressImpl.java @@ -45,7 +45,7 @@ public class HotSwapProgressImpl extends HotSwapProgress { private String myTitle = DebuggerBundle.message("progress.hot.swap.title"); private final MergingUpdateQueue myUpdateQueue; private WeakReference mySessionRef = null; - private final List myListeners = ContainerUtil.newSmartList(); + private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); public HotSwapProgressImpl(Project project) { super(project); diff --git a/platform/editor-ui-api/src/com/intellij/ide/structureView/TextEditorBasedStructureViewModel.java b/platform/editor-ui-api/src/com/intellij/ide/structureView/TextEditorBasedStructureViewModel.java index 82e807b99bb2..4590e107fa20 100644 --- a/platform/editor-ui-api/src/com/intellij/ide/structureView/TextEditorBasedStructureViewModel.java +++ b/platform/editor-ui-api/src/com/intellij/ide/structureView/TextEditorBasedStructureViewModel.java @@ -18,7 +18,6 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -33,7 +32,7 @@ public abstract class TextEditorBasedStructureViewModel implements StructureView private final Editor myEditor; private final PsiFile myPsiFile; private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); - private final List myModelListeners = new ArrayList<>(2); + private final List myModelListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private final CaretListener myEditorCaretListener; private Disposable myEditorCaretListenerDisposable; 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 2801cc21f7b9..c61668a020cf 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsManager.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsManager.java @@ -26,12 +26,12 @@ import com.intellij.openapi.util.DifferenceFilter; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.PsiFile; +import com.intellij.util.containers.ContainerUtil; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.lang.reflect.Field; -import java.util.ArrayList; import java.util.List; public class CodeStyleSettingsManager implements PersistentStateComponent { @@ -48,7 +48,7 @@ public class CodeStyleSettingsManager implements PersistentStateComponent myListeners = new ArrayList<>(); + private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); public static CodeStyleSettingsManager getInstance(@Nullable Project project) { if (project == null || project.isDefault()) //noinspection deprecation diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index 9fe13dcd72cd..aab189e2f6ac 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -90,7 +90,7 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable, final LookupCellRenderer myCellRenderer; private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); - private final List myPrefixChangeListeners = ContainerUtil.newSmartList(); + private final List myPrefixChangeListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private final LookupPreview myPreview = new LookupPreview(this); // keeping our own copy of editor's font preferences, which can be used in non-EDT threads (to avoid race conditions) private final FontPreferences myFontPreferences = new FontPreferencesImpl(); diff --git a/platform/lang-impl/src/com/intellij/find/impl/livePreview/LivePreview.java b/platform/lang-impl/src/com/intellij/find/impl/livePreview/LivePreview.java index 717a8b40ea68..3b23b6a3a17b 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/livePreview/LivePreview.java +++ b/platform/lang-impl/src/com/intellij/find/impl/livePreview/LivePreview.java @@ -62,7 +62,7 @@ public class LivePreview implements SearchResults.SearchResultsListener, Selecti private final Set myHighlighters = new HashSet<>(); private RangeHighlighter myCursorHighlighter; - private final List myVisibleAreaListenersToRemove = new ArrayList<>(); + private final List myVisibleAreaListenersToRemove = ContainerUtil.createLockFreeCopyOnWriteList(); private Delegate myDelegate; private final SearchResults mySearchResults; private Balloon myReplacementBalloon; diff --git a/platform/lang-impl/src/com/intellij/ide/actions/BigPopupUI.java b/platform/lang-impl/src/com/intellij/ide/actions/BigPopupUI.java index 468cf6fab342..6b263c8b80a6 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/BigPopupUI.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/BigPopupUI.java @@ -13,6 +13,7 @@ import com.intellij.ui.components.JBList; import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.components.JBTextField; import com.intellij.ui.components.fields.ExtendableTextField; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.components.BorderLayoutPanel; @@ -25,7 +26,6 @@ import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import javax.swing.text.JTextComponent; import java.awt.*; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -35,9 +35,8 @@ public abstract class BigPopupUI extends BorderLayoutPanel implements Disposable protected JPanel suggestionsPanel; protected JBList myResultsList; protected JBPopup myHint; - protected Runnable searchFinishedHandler = () -> { - }; - protected final List myViewTypeListeners = new ArrayList<>(); + protected Runnable searchFinishedHandler = () -> { }; + protected final List myViewTypeListeners = ContainerUtil.createLockFreeCopyOnWriteList(); protected ViewType myViewType = ViewType.SHORT; protected JLabel myHintLabel; diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/table/ThreeStateCheckBoxRenderer.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/table/ThreeStateCheckBoxRenderer.java index 36c3f21d4b9c..c28edbd1af9d 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/table/ThreeStateCheckBoxRenderer.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/table/ThreeStateCheckBoxRenderer.java @@ -16,7 +16,7 @@ package com.intellij.profile.codeInspection.ui.table; import com.intellij.profile.codeInspection.ui.inspectionsTree.InspectionsConfigTreeTable; -import com.intellij.util.SmartList; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.ThreeStateCheckBox; import org.jetbrains.annotations.Nullable; @@ -29,7 +29,6 @@ import javax.swing.table.TableCellRenderer; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -import java.util.ArrayList; import java.util.EventObject; import java.util.List; @@ -38,7 +37,7 @@ import java.util.List; */ public class ThreeStateCheckBoxRenderer extends ThreeStateCheckBox implements TableCellRenderer, TableCellEditor { - private final List myListeners = new SmartList<>(); + private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); public ThreeStateCheckBoxRenderer() { setThirdStateEnabled(false); @@ -102,7 +101,7 @@ public class ThreeStateCheckBoxRenderer extends ThreeStateCheckBox implements Ta @Override public boolean stopCellEditing() { final ChangeEvent e = new ChangeEvent(this); - for (final CellEditorListener listener : new ArrayList<>(myListeners)) { + for (final CellEditorListener listener : myListeners) { listener.editingStopped(e); } return true; @@ -111,7 +110,7 @@ public class ThreeStateCheckBoxRenderer extends ThreeStateCheckBox implements Ta @Override public void cancelCellEditing() { final ChangeEvent e = new ChangeEvent(this); - for (final CellEditorListener listener : new ArrayList<>(myListeners)) { + for (final CellEditorListener listener : myListeners) { listener.editingCanceled(e); } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/listeners/impl/impl/RefactoringTransactionImpl.java b/platform/lang-impl/src/com/intellij/refactoring/listeners/impl/impl/RefactoringTransactionImpl.java index 74fc50735e01..e5b858cd0690 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/listeners/impl/impl/RefactoringTransactionImpl.java +++ b/platform/lang-impl/src/com/intellij/refactoring/listeners/impl/impl/RefactoringTransactionImpl.java @@ -42,10 +42,10 @@ public class RefactoringTransactionImpl implements RefactoringTransaction { /** * Actions to be performed at commit. */ - private final ArrayList myRunnables = new ArrayList<>(); + private final List myRunnables = new ArrayList<>(); private final List myListenerProviders; private final Project myProject; - private final Map> myOldElementToListenerListMap = new HashMap<>(); + private final Map> myOldElementToListenerListMap = new HashMap<>(); private final Map myOldElementToTransactionListenerMap = new HashMap<>(); public RefactoringTransactionImpl(Project project, @@ -56,7 +56,7 @@ public class RefactoringTransactionImpl implements RefactoringTransaction { private void addAffectedElement(PsiElement oldElement) { if(myOldElementToListenerListMap.get(oldElement) != null) return; - ArrayList listenerList = new ArrayList<>(); + List listenerList = new ArrayList<>(); for (RefactoringElementListenerProvider provider : myListenerProviders) { try { final RefactoringElementListener listener = provider.getListener(oldElement); @@ -84,7 +84,7 @@ public class RefactoringTransactionImpl implements RefactoringTransaction { } private class MyRefactoringElementListener implements RefactoringElementListener, UndoRefactoringElementListener { - private final ArrayList myListenerList; + private final List myListenerList; private MyRefactoringElementListener(PsiElement oldElement) { addAffectedElement(oldElement); myListenerList = myOldElementToListenerListMap.get(oldElement); diff --git a/platform/platform-api/src/com/intellij/util/ui/StatusText.java b/platform/platform-api/src/com/intellij/util/ui/StatusText.java index 25cc7325d48c..2bb99ed5e10c 100644 --- a/platform/platform-api/src/com/intellij/util/ui/StatusText.java +++ b/platform/platform-api/src/com/intellij/util/ui/StatusText.java @@ -22,13 +22,13 @@ import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.UIBundle; import com.intellij.ui.components.JBViewport; import com.intellij.util.ObjectUtils; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.awt.event.*; -import java.util.ArrayList; import java.util.List; public abstract class StatusText { @@ -47,8 +47,8 @@ public abstract class StatusText { private String myText = ""; @NotNull protected final SimpleColoredComponent myComponent = new SimpleColoredComponent(); @NotNull private final SimpleColoredComponent mySecondaryComponent = new SimpleColoredComponent(); - private final List myClickListeners = new ArrayList<>(); - private final List mySecondaryListeners = new ArrayList<>(); + private final List myClickListeners = ContainerUtil.createLockFreeCopyOnWriteList(); + private final List mySecondaryListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private boolean myHasActiveClickListeners; // calculated field for performance optimization private boolean myShowAboveCenter = true; private boolean myVerticalFlow = true; diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java index 3945e71065d8..d54ba6e87621 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java @@ -309,30 +309,26 @@ public class PluginInstaller { throw new IOException("Corrupted archive (no file entries): " + zip); } - private static List myStateListeners; + private static final List myStateListeners = ContainerUtil.createLockFreeCopyOnWriteList(); public static void addStateListener(@NotNull PluginStateListener listener) { - (myStateListeners != null ? myStateListeners : (myStateListeners = new ArrayList<>())).add(listener); + myStateListeners.add(listener); } public static void removeStateListener(@NotNull PluginStateListener listener) { - if (myStateListeners != null) { - myStateListeners.remove(listener); - } + myStateListeners.remove(listener); } private static void fireState(@NotNull IdeaPluginDescriptor descriptor, boolean install) { - if (myStateListeners != null) { - UIUtil.invokeLaterIfNeeded(() -> { - for (PluginStateListener listener : myStateListeners) { - if (install) { - listener.install(descriptor); - } - else { - listener.uninstall(descriptor); - } + UIUtil.invokeLaterIfNeeded(() -> { + for (PluginStateListener listener : myStateListeners) { + if (install) { + listener.install(descriptor); } - }); - } + else { + listener.uninstall(descriptor); + } + } + }); } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/util/SyncScrollSupport.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/util/SyncScrollSupport.java index beeb9cb54045..d52d5da68fcf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/util/SyncScrollSupport.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/util/SyncScrollSupport.java @@ -12,16 +12,17 @@ import com.intellij.openapi.editor.ScrollingModel; import com.intellij.openapi.editor.event.VisibleAreaEvent; import com.intellij.openapi.editor.event.VisibleAreaListener; import com.intellij.openapi.util.Disposer; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; +import java.util.List; public class SyncScrollSupport implements Disposable { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.diff.impl.util.SyncScrollSupport"); private boolean myDuringVerticalScroll = false; - @NotNull private final ArrayList myScrollers = new ArrayList<>(); + @NotNull private final List myScrollers = ContainerUtil.createLockFreeCopyOnWriteList(); private boolean myEnabled = true; public void install(EditingSides[] sideContainers) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java index e38e67a8259e..a59d75d52b5a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java @@ -18,6 +18,7 @@ import com.intellij.openapi.editor.impl.softwrap.mapping.SoftWrapAwareDocumentPa import com.intellij.openapi.util.Segment; import com.intellij.openapi.util.TextRange; import com.intellij.util.DocumentUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; @@ -48,7 +49,7 @@ public class SoftWrapModelImpl extends InlayModel.SimpleAdapter private static final Logger LOG = Logger.getInstance(SoftWrapModelImpl.class); - private final List mySoftWrapListeners = new ArrayList<>(); + private final List mySoftWrapListeners = ContainerUtil.createLockFreeCopyOnWriteList(); /** * There is a possible case that particular activity performs batch fold regions operations (addition, removal etc). diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java index 63fea7055e62..a54a2e37d20d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java @@ -23,6 +23,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.EditorNotifications; import com.intellij.util.DocumentUtil; +import com.intellij.util.containers.ContainerUtil; import org.intellij.lang.annotations.JdkConstants; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,7 +31,6 @@ import org.jetbrains.annotations.TestOnly; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -67,7 +67,7 @@ public class SoftWrapApplianceManager implements Dumpable { CUSTOM } - private final List myListeners = new ArrayList<>(); + private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private final ProcessingContext myContext = new ProcessingContext(); private final FontTypesStorage myOffset2fontType = new FontTypesStorage(); private final WidthsStorage myOffset2widthInPixels = new WidthsStorage(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java index 1e0cb4eae5c6..9089f6b8d55a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java @@ -20,6 +20,7 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeGlassPane; import com.intellij.openapi.wm.IdeGlassPaneUtil; import com.intellij.ui.BalloonImpl; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FactoryMap; import com.intellij.util.ui.EmptyClipboardOwner; import com.intellij.util.ui.MouseEventAdapter; @@ -42,7 +43,7 @@ public class IdeGlassPaneImpl extends JPanel implements IdeGlassPaneEx, IdeEvent private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.IdeGlassPaneImpl"); private static final String PREPROCESSED_CURSOR_KEY = "SuperCursor"; - private final List myMouseListeners = new ArrayList<>(); + private final List myMouseListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private final Set mySortedMouseListeners = new TreeSet<>((o1, o2) -> { double weight1 = 0; double weight2 = 0; diff --git a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java index 8267b7b37783..56f32ff3cb34 100644 --- a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java @@ -44,10 +44,8 @@ import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.awt.image.ImageFilter; import java.awt.image.RGBImageFilter; -import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; +import java.util.*; import java.util.concurrent.CopyOnWriteArraySet; import static com.intellij.util.ui.UIUtil.useSafely; @@ -216,7 +214,7 @@ public class BalloonImpl implements Balloon, IdeTooltip.Ui { private int myShadowSize = Registry.intValue("ide.balloon.shadow.size"); private ShadowBorderProvider myShadowBorderProvider; - private final CopyOnWriteArraySet myListeners = new CopyOnWriteArraySet<>(); + private final Collection myListeners = new CopyOnWriteArraySet<>(); private boolean myVisible; private PositionTracker myTracker; private final int myAnimationCycle; diff --git a/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java b/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java index af6e1e283f3d..7429b6ad318c 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java @@ -119,10 +119,8 @@ public abstract class TestConsoleProperties extends StoringPropertyContainer imp } public void addListener(@NotNull AbstractProperty property, @NotNull TestFrameworkPropertyListener listener) { - List listeners = myListeners.get(property); - if (listeners == null) { - myListeners.put(property, (listeners = ContainerUtil.newArrayList())); - } + List listeners = + myListeners.computeIfAbsent(property, __ -> ContainerUtil.createLockFreeCopyOnWriteList()); listeners.add(listener); } @@ -155,8 +153,7 @@ public abstract class TestConsoleProperties extends StoringPropertyContainer imp protected void onPropertyChanged(@NotNull AbstractProperty property, T value) { List listeners = myListeners.get(property); if (listeners != null) { - for (Object o : listeners.toArray()) { - @SuppressWarnings("unchecked") TestFrameworkPropertyListener listener = (TestFrameworkPropertyListener)o; + for (TestFrameworkPropertyListener listener : listeners) { listener.onChanged(value); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/AbstractVcsLogUi.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/AbstractVcsLogUi.java index bb4490cee4c9..0f5e4e808109 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/AbstractVcsLogUi.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/AbstractVcsLogUi.java @@ -49,7 +49,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; -import java.util.ArrayList; import java.util.Collection; public abstract class AbstractVcsLogUi implements VcsLogUi, Disposable { @@ -64,7 +63,7 @@ public abstract class AbstractVcsLogUi implements VcsLogUi, Disposable { @NotNull protected final VcsLog myLog; @NotNull protected final VisiblePackRefresher myRefresher; - @NotNull protected final Collection myLogListeners = ContainerUtil.newArrayList(); + @NotNull protected final Collection myLogListeners = ContainerUtil.createLockFreeCopyOnWriteList(); @NotNull protected final VisiblePackChangeListener myVisiblePackChangeListener; @NotNull protected VisiblePack myVisiblePack; @@ -262,9 +261,8 @@ public abstract class AbstractVcsLogUi implements VcsLogUi, Disposable { protected void fireFilterChangeEvent(@NotNull VisiblePack visiblePack, boolean refresh) { ApplicationManager.getApplication().assertIsDispatchThread(); - Collection logListeners = new ArrayList<>(myLogListeners); - for (VcsLogListener listener : logListeners) { + for (VcsLogListener listener : myLogListeners) { listener.onChange(visiblePack, refresh); } } diff --git a/python/src/com/jetbrains/python/newProject/PythonProjectGenerator.java b/python/src/com/jetbrains/python/newProject/PythonProjectGenerator.java index 2c017ab5df35..ae24fab200ee 100644 --- a/python/src/com/jetbrains/python/newProject/PythonProjectGenerator.java +++ b/python/src/com/jetbrains/python/newProject/PythonProjectGenerator.java @@ -87,7 +87,7 @@ public abstract class PythonProjectGenerator ext public static final PyNewProjectSettings NO_SETTINGS = new PyNewProjectSettings(); private static final Logger LOGGER = Logger.getInstance(PythonProjectGenerator.class); - private final List myListeners = ContainerUtil.newArrayList(); + private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private final boolean myAllowRemoteProjectCreation; @Nullable private MouseListener myErrorLabelMouseListener; diff --git a/python/src/com/jetbrains/python/refactoring/changeSignature/PyParameterTableModel.java b/python/src/com/jetbrains/python/refactoring/changeSignature/PyParameterTableModel.java index 1589fab4edcb..7dbb76378b6b 100644 --- a/python/src/com/jetbrains/python/refactoring/changeSignature/PyParameterTableModel.java +++ b/python/src/com/jetbrains/python/refactoring/changeSignature/PyParameterTableModel.java @@ -2,7 +2,6 @@ package com.jetbrains.python.refactoring.changeSignature; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.event.DocumentListener; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; @@ -30,8 +29,6 @@ import javax.swing.table.TableCellRenderer; import java.awt.*; import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; -import java.util.Set; /** * User : ktisha @@ -134,7 +131,6 @@ public class PyParameterTableModel extends ParameterTableModelBase myListeners = new HashSet<>(); MyCodeFragmentTableCellEditor(Project project) { myProject = project; @@ -149,9 +145,6 @@ public class PyParameterTableModel extends ParameterTableModelBase myListeners = Lists.newArrayList(); + private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); MyComboBox() { this.addMouseListener(new MouseAdapter() {