diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java b/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java index 2dda3d70feb4..3b4ff49e6eff 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/JavaDebuggerSupport.java @@ -33,6 +33,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Key; +import com.intellij.util.containers.ContainerUtil; import com.intellij.xdebugger.AbstractDebuggerSession; import com.intellij.xdebugger.breakpoints.ui.BreakpointItem; import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroupingRule; @@ -50,7 +51,6 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; /** * @author nik @@ -187,7 +187,7 @@ public class JavaDebuggerSupport extends DebuggerSupport { } private static class JavaBreakpointPanelProvider extends BreakpointPanelProvider { - private List myListeners = new CopyOnWriteArrayList(); + private List myListeners = ContainerUtil.createEmptyCOWList(); @NotNull public Collection> getBreakpointPanels(@NotNull final Project project, @NotNull final DialogWrapper parentDialog) { diff --git a/java/openapi/src/com/intellij/patterns/PsiMethodPattern.java b/java/openapi/src/com/intellij/patterns/PsiMethodPattern.java index 87247577c30f..d4f60967aff4 100644 --- a/java/openapi/src/com/intellij/patterns/PsiMethodPattern.java +++ b/java/openapi/src/com/intellij/patterns/PsiMethodPattern.java @@ -22,6 +22,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.MethodSignatureBackedByPsiMethod; import com.intellij.psi.util.TypeConversionUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.PairProcessor; import com.intellij.util.ProcessingContext; import com.intellij.util.Processor; @@ -38,6 +39,7 @@ public class PsiMethodPattern extends PsiMemberPattern("withParameterCount") { + @Override public boolean accepts(@NotNull final PsiMethod method, final ProcessingContext context) { return method.getParameterList().getParametersCount() == paramCount; } @@ -46,12 +48,14 @@ public class PsiMethodPattern extends PsiMemberPattern
  • "?" - means any type
  • ".." - instructs pattern to accept the rest of the arguments
  • * @return */ - public PsiMethodPattern withParameters(@NonNls final String... types) { + public PsiMethodPattern withParameters(@NonNls final String... inputTypes) { + final String[] types = inputTypes.length == 0 ? ArrayUtil.EMPTY_STRING_ARRAY : inputTypes; return with(new PatternCondition("withParameters") { + @Override public boolean accepts(@NotNull final PsiMethod psiMethod, final ProcessingContext context) { final PsiParameterList parameterList = psiMethod.getParameterList(); int dotsIndex = -1; @@ -91,7 +95,7 @@ public class PsiMethodPattern extends PsiMemberPattern result = Ref.create(Boolean.TRUE); SuperMethodsSearch.search(t, null, true, false).forEach(new Processor() { + @Override public boolean process(final MethodSignatureBackedByPsiMethod signature) { if (!processor.process(signature.getMethod().getContainingClass(), context)) { result.set(Boolean.FALSE); @@ -118,6 +123,7 @@ public class PsiMethodPattern extends PsiMemberPattern("constructor") { + @Override public boolean accepts(@NotNull final PsiMethod method, final ProcessingContext context) { return method.isConstructor() == isConstructor; } @@ -127,6 +133,7 @@ public class PsiMethodPattern extends PsiMemberPattern pattern) { return with(new PatternCondition("withThrowsList") { + @Override public boolean accepts(@NotNull final PsiMethod method, final ProcessingContext context) { return pattern.accepts(method.getThrowsList()); } diff --git a/platform/lang-api/src/com/intellij/find/FindModel.java b/platform/lang-api/src/com/intellij/find/FindModel.java index 07ad7422fd96..0af15cb80990 100644 --- a/platform/lang-api/src/com/intellij/find/FindModel.java +++ b/platform/lang-api/src/com/intellij/find/FindModel.java @@ -19,11 +19,12 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.search.SearchScope; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.List; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -49,7 +50,7 @@ public class FindModel extends UserDataHolderBase implements Cloneable { void findModelChanged(FindModel findModel); } - private final CopyOnWriteArrayList myObservers = new CopyOnWriteArrayList(); + private final List myObservers = ContainerUtil.createEmptyCOWList(); public void addObserver(FindModelObserver observer) { myObservers.add(observer); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/Advertiser.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/Advertiser.java index 43b01646d15a..760f07ac614f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/Advertiser.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/Advertiser.java @@ -18,6 +18,7 @@ package com.intellij.codeInsight.lookup.impl; import com.google.common.collect.ImmutableMap; import com.intellij.openapi.application.ApplicationManager; import com.intellij.ui.ClickListener; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.GridBag; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -34,7 +35,7 @@ import java.util.concurrent.CopyOnWriteArrayList; * @author peter */ public class Advertiser { - private final List myTexts = new CopyOnWriteArrayList(); + private final List myTexts = ContainerUtil.createEmptyCOWList(); private volatile Dimension myCachedPrefSize; private final JPanel myComponent = new JPanel(new GridBagLayout()) { private JLabel mySample = createLabel(); diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java index 58ba805b5f96..f3b498d36e61 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java @@ -87,6 +87,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, // separate method needed for tests public final void initializeConfigurationTypes(@NotNull final ConfigurationType[] factories) { Arrays.sort(factories, new Comparator() { + @Override public int compare(final ConfigurationType o1, final ConfigurationType o2) { return o1.getDisplayName().compareTo(o2.getDisplayName()); } @@ -109,15 +110,19 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, initializeConfigurationTypes(configurationTypes); } + @Override public void disposeComponent() { } + @Override public void initComponent() { } + @Override public void projectOpened() { } + @Override @NotNull public RunnerAndConfigurationSettings createConfiguration(final String name, final ConfigurationFactory factory) { return createConfiguration(doCreateConfiguration(name, factory, true), factory); @@ -134,6 +139,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, } } + @Override @NotNull public RunnerAndConfigurationSettings createConfiguration(final RunConfiguration runConfiguration, final ConfigurationFactory factory) { @@ -145,14 +151,17 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return settings; } + @Override public void projectClosed() { myTemplateConfigurationsMap.clear(); } + @Override public RunManagerConfig getConfig() { return myConfig; } + @Override @NotNull public ConfigurationType[] getConfigurationFactories() { return myTypes.clone(); @@ -177,6 +186,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, /** * Template configuration is not included */ + @Override @NotNull public RunConfiguration[] getConfigurations(@NotNull final ConfigurationType type) { @@ -191,6 +201,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return array.toArray(new RunConfiguration[array.size()]); } + @Override @NotNull public RunConfiguration[] getAllConfigurations() { RunConfiguration[] result = new RunConfiguration[myConfigurations.size()]; @@ -215,6 +226,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, /** * Template configuration is not included */ + @Override @NotNull public RunnerAndConfigurationSettings[] getConfigurationSettings(@NotNull final ConfigurationType type) { @@ -240,6 +252,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return template; } + @Override public void addConfiguration(RunnerAndConfigurationSettings settings, boolean shared, List tasks, boolean addEnabledTemplateTasksIfAbsent) { @@ -336,6 +349,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, } } + @Override @Nullable public RunnerAndConfigurationSettings getSelectedConfiguration() { if (mySelectedConfigurationId == null && myLoadedSelectedConfigurationUniqueName != null) { @@ -344,6 +358,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return mySelectedConfigurationId == null ? null : myConfigurations.get(mySelectedConfigurationId); } + @Override public void setSelectedConfiguration(@Nullable RunnerAndConfigurationSettings settings) { setSelectedConfigurationId(settings == null ? null : settings.getConfiguration().getUniqueID()); if (settings != null) { @@ -420,6 +435,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return true; } + @Override public void writeExternal(@NotNull final Element parentNode) throws WriteExternalException { writeContext(parentNode); for (final RunnerAndConfigurationSettings runnerAndConfigurationSettings : myTemplateConfigurationsMap.values()) { @@ -529,10 +545,12 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, } + @Override public void readExternal(final Element parentNode) throws InvalidDataException { clear(); final Comparator comparator = new Comparator() { + @Override public int compare(Element a, Element b) { final boolean aDefault = Boolean.valueOf(a.getAttributeValue("default", "false")); final boolean bDefault = Boolean.valueOf(b.getAttributeValue("default", "false")); @@ -716,11 +734,13 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return null; } + @Override @NotNull public String getComponentName() { return "RunManager"; } + @Override public void setTemporaryConfiguration(@Nullable final RunnerAndConfigurationSettings tempConfiguration) { if (tempConfiguration == null) return; @@ -748,18 +768,22 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return result.values(); } + @Override public boolean isTemporary(@NotNull final RunConfiguration configuration) { return Arrays.asList(getTempConfigurations()).contains(configuration); } + @Override public boolean isTemporary(@NotNull RunnerAndConfigurationSettings settings) { return settings.isTemporary(); } + @Override @NotNull public RunConfiguration[] getTempConfigurations() { List configurations = ContainerUtil.mapNotNull(myConfigurations.values(), new NullableFunction() { + @Override public RunConfiguration fun(RunnerAndConfigurationSettings settings) { return settings.isTemporary() ? settings.getConfiguration() : null; } @@ -767,6 +791,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return configurations.toArray(new RunConfiguration[configurations.size()]); } + @Override public void makeStable(@NotNull RunConfiguration configuration) { RunnerAndConfigurationSettings settings = getSettings(configuration); if (settings != null) { @@ -780,11 +805,13 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, } } + @Override @NotNull public RunnerAndConfigurationSettings createRunConfiguration(String name, ConfigurationFactory type) { return createConfiguration(name, type); } + @Override public boolean isConfigurationShared(final RunnerAndConfigurationSettings settings) { Boolean shared = mySharedConfigurations.get(settings.getConfiguration().getUniqueID()); if (shared == null) { @@ -794,6 +821,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return shared != null && shared.booleanValue(); } + @Override @NotNull public List getBeforeRunTasks(Key taskProviderID) { final List tasks = new ArrayList(); @@ -822,10 +850,12 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return tasks; } + @Override public void invalidateConfigurationIcon(@NotNull final RunnerAndConfigurationSettings settings) { myIdToIcon.remove(settings.getConfiguration().getUniqueID()); } + @Override public Icon getConfigurationIcon(@NotNull final RunnerAndConfigurationSettings settings) { final int uniqueID = settings.getConfiguration().getUniqueID(); Icon icon = myIdToIcon.get(uniqueID); @@ -881,6 +911,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, return result; } + @Override @NotNull public List getBeforeRunTasks(final RunConfiguration settings) { final List tasks = myConfigurationToBeforeTasksMap.get(settings); @@ -920,7 +951,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, result.add(task.clone()); } } - return result; + return result.isEmpty() ? Collections.emptyList() : result; } public void shareConfiguration(final RunConfiguration runConfiguration, final boolean shareConfiguration) { @@ -933,6 +964,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, if (shouldFire) fireRunConfigurationChanged(settings); } + @Override public final void setBeforeRunTasks(final RunConfiguration runConfiguration, @NotNull List tasks, boolean addEnabledTemplateTasksIfAbsent) { List result = new ArrayList(tasks); if (addEnabledTemplateTasksIfAbsent) { @@ -949,7 +981,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, } } } - myConfigurationToBeforeTasksMap.put(runConfiguration, result); + myConfigurationToBeforeTasksMap.put(runConfiguration, result.isEmpty() ? Collections.emptyList() : result); fireBeforeRunTasksUpdated(); } @@ -958,6 +990,7 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, fireBeforeRunTasksUpdated(); } + @Override public void addConfiguration(final RunnerAndConfigurationSettings settings, final boolean isShared) { addConfiguration(settings, isShared, getTemplateBeforeRunTasks(settings.getConfiguration()), false); } diff --git a/platform/lvcs-impl/src/com/intellij/history/core/changes/ChangeSet.java b/platform/lvcs-impl/src/com/intellij/history/core/changes/ChangeSet.java index 527a48760745..210205d50029 100644 --- a/platform/lvcs-impl/src/com/intellij/history/core/changes/ChangeSet.java +++ b/platform/lvcs-impl/src/com/intellij/history/core/changes/ChangeSet.java @@ -31,7 +31,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; public class ChangeSet { private final long myId; @@ -44,7 +43,7 @@ public class ChangeSet { public ChangeSet(long id, long timestamp) { myId = id; myTimestamp = timestamp; - myChanges = new CopyOnWriteArrayList(); + myChanges = ContainerUtil.createEmptyCOWList(); } public ChangeSet(DataInput in) throws IOException { diff --git a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java index 20c3a1753343..04ac15d65fd4 100644 --- a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java +++ b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java @@ -38,6 +38,7 @@ import com.intellij.ui.tabs.impl.singleRow.SingleRowLayout; import com.intellij.ui.tabs.impl.singleRow.SingleRowPassInfo; import com.intellij.ui.tabs.impl.table.TableLayout; import com.intellij.ui.tabs.impl.table.TablePassInfo; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.Animator; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.TimedDeadzone; @@ -80,8 +81,8 @@ public class JBTabsImpl extends JComponent private Insets myInnerInsets = JBInsets.NONE; - private final List myTabMouseListeners = new CopyOnWriteArrayList(); - private final List myTabListeners = new CopyOnWriteArrayList(); + private final List myTabMouseListeners = ContainerUtil.createEmptyCOWList(); + private final List myTabListeners = ContainerUtil.createEmptyCOWList(); private boolean myFocused; private Getter myPopupGroup; diff --git a/platform/platform-impl/src/com/intellij/notification/EventLog.java b/platform/platform-impl/src/com/intellij/notification/EventLog.java index a0233b7afbee..e03f6db7de40 100644 --- a/platform/platform-impl/src/com/intellij/notification/EventLog.java +++ b/platform/platform-impl/src/com/intellij/notification/EventLog.java @@ -47,6 +47,7 @@ import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentFactory; import com.intellij.util.containers.CollectionFactory; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.hash.LinkedHashMap; import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NonNls; @@ -344,7 +345,7 @@ public class EventLog implements Notifications { public static class ProjectTracker extends AbstractProjectComponent { private volatile EventLogConsole myConsole; - private final List myInitial = new CopyOnWriteArrayList(); + private final List myInitial = ContainerUtil.createEmptyCOWList(); private final LogModel myProjectModel; public ProjectTracker(@NotNull final Project project) { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/AltStateManager.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/AltStateManager.java index 3f11e60200d5..34a4025c51cf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/AltStateManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/AltStateManager.java @@ -16,12 +16,12 @@ package com.intellij.openapi.wm.impl; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.util.containers.ContainerUtil; import java.awt.*; import java.awt.event.AWTEventListener; import java.awt.event.KeyEvent; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; /** * @author pegov @@ -37,7 +37,7 @@ public class AltStateManager implements AWTEventListener { } } - private final List myListeners = new CopyOnWriteArrayList(); + private final List myListeners = ContainerUtil.createEmptyCOWList(); public interface AltListener { void altPressed(); diff --git a/platform/platform-impl/src/com/intellij/ui/ColorPicker.java b/platform/platform-impl/src/com/intellij/ui/ColorPicker.java index d51711bac17a..5a4a57c1868c 100644 --- a/platform/platform-impl/src/com/intellij/ui/ColorPicker.java +++ b/platform/platform-impl/src/com/intellij/ui/ColorPicker.java @@ -26,6 +26,7 @@ import com.intellij.openapi.util.text.StringUtilRt; import com.intellij.openapi.wm.WindowManager; import com.intellij.util.Alarm; import com.intellij.util.Consumer; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -440,7 +441,7 @@ public class ColorPicker extends JPanel implements ColorListener, DocumentListen private Color myColor; - private CopyOnWriteArrayList myListeners = new CopyOnWriteArrayList(); + private CopyOnWriteArrayList myListeners = ContainerUtil.createEmptyCOWList(); private int myOpacity; private ColorWheel() { diff --git a/platform/platform-impl/src/com/intellij/ui/SlideComponent.java b/platform/platform-impl/src/com/intellij/ui/SlideComponent.java index 3be566722165..b331220ffd54 100644 --- a/platform/platform-impl/src/com/intellij/ui/SlideComponent.java +++ b/platform/platform-impl/src/com/intellij/ui/SlideComponent.java @@ -19,12 +19,13 @@ import com.intellij.codeInsight.hint.HintUtil; import com.intellij.openapi.ui.popup.Balloon; import com.intellij.ui.awt.RelativePoint; import com.intellij.util.Consumer; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import javax.swing.*; import java.awt.*; import java.awt.event.*; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.List; /** * @author Alexey Pegov @@ -37,9 +38,9 @@ class SlideComponent extends JComponent { private final boolean myVertical; private final String myTitle; - private CopyOnWriteArrayList> myListeners = new CopyOnWriteArrayList>(); + private final List> myListeners = ContainerUtil.createEmptyCOWList(); private LightweightHint myTooltipHint; - private JLabel myLabel = new JLabel(); + private final JLabel myLabel = new JLabel(); SlideComponent(String title, boolean vertical) { myTitle = title; diff --git a/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java b/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java index 076e298aa218..6f93e6e5cf0b 100644 --- a/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java +++ b/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.java @@ -17,10 +17,11 @@ package com.intellij.openapi.util.registry; import com.intellij.openapi.Disposable; import com.intellij.openapi.util.Disposer; +import com.intellij.util.containers.ContainerUtil; import java.awt.*; +import java.util.List; import java.util.MissingResourceException; -import java.util.concurrent.CopyOnWriteArraySet; /** * @author Kirill Kalishev @@ -31,7 +32,7 @@ public class RegistryValue { private final Registry myRegistry; private final String myKey; - private final CopyOnWriteArraySet myListeners = new CopyOnWriteArraySet(); + private final List myListeners = ContainerUtil.createEmptyCOWList(); private boolean myChangedSinceStart; diff --git a/platform/util/src/com/intellij/util/ReflectionCache.java b/platform/util/src/com/intellij/util/ReflectionCache.java index 4c65b45c29ed..9e310236e196 100644 --- a/platform/util/src/com/intellij/util/ReflectionCache.java +++ b/platform/util/src/com/intellij/util/ReflectionCache.java @@ -29,42 +29,52 @@ import java.lang.reflect.TypeVariable; @SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"}) public class ReflectionCache { private static final ConcurrentFactoryMap ourSuperClasses = new ConcurrentFactoryMap() { + @Override protected Class create(final Class key) { return key.getSuperclass(); } }; private static final ConcurrentFactoryMap ourInterfaces = new ConcurrentFactoryMap() { + @Override @NotNull protected Class[] create(final Class key) { - return key.getInterfaces(); + Class[] classes = key.getInterfaces(); + return classes.length == 0 ? ArrayUtil.EMPTY_CLASS_ARRAY : classes; } }; + private static final Method[] EMPTY_METHODS = new Method[0]; private static final ConcurrentFactoryMap ourMethods = new ConcurrentFactoryMap() { + @Override @NotNull protected Method[] create(final Class key) { - return key.getMethods(); + Method[] methods = key.getMethods(); + return methods.length == 0 ? EMPTY_METHODS : methods; } }; private static final ConcurrentFactoryMap ourIsInterfaces = new ConcurrentFactoryMap() { + @Override @NotNull protected Boolean create(final Class key) { return key.isInterface(); } }; private static final ConcurrentFactoryMap ourTypeParameters = new ConcurrentFactoryMap() { + @Override @NotNull protected TypeVariable[] create(final Class key) { return key.getTypeParameters(); } }; private static final ConcurrentFactoryMap ourGenericInterfaces = new ConcurrentFactoryMap() { + @Override @NotNull protected Type[] create(final Class key) { return key.getGenericInterfaces(); } }; private static final ConcurrentFactoryMap ourActualTypeArguments = new ConcurrentFactoryMap() { + @Override @NotNull protected Type[] create(final ParameterizedType key) { return key.getActualTypeArguments(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java index 02ca25d275f0..877871da0451 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java @@ -24,6 +24,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.containers.ContainerUtil; import com.intellij.xdebugger.XDebuggerManager; import com.intellij.xdebugger.XDebuggerUtil; import com.intellij.xdebugger.breakpoints.*; @@ -40,14 +41,13 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; /** * @author nik */ public class XBreakpointPanelProvider extends BreakpointPanelProvider { - private List myListeners = new CopyOnWriteArrayList(); + private final List myListeners = ContainerUtil.createEmptyCOWList(); @Override public void createBreakpointsGroupingRules(Collection rules) { @@ -173,7 +173,7 @@ public class XBreakpointPanelProvider extends BreakpointPanelProvider myType; + private final XBreakpointType myType; public AddXBreakpointAction(XBreakpointType type) { myType = type; diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/ui/ExternalizableStringSet.java b/plugins/InspectionGadgets/src/com/siyeh/ig/ui/ExternalizableStringSet.java index 828311aae432..63d69e367aac 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/ui/ExternalizableStringSet.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/ui/ExternalizableStringSet.java @@ -19,6 +19,7 @@ import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizable; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.containers.OrderedSet; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -48,7 +49,7 @@ public class ExternalizableStringSet extends OrderedSet * note: reference to defaultValues is retained by this set! */ public ExternalizableStringSet(@NonNls String... defaultValues) { - this.defaultValues = defaultValues; + this.defaultValues = defaultValues.length == 0 ? ArrayUtil.EMPTY_STRING_ARRAY : defaultValues; for (String defaultValue : defaultValues) { add(defaultValue); } diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/engine/BaseSpellChecker.java b/plugins/spellchecker/src/com/intellij/spellchecker/engine/BaseSpellChecker.java index ac3b703bb513..091237bb2b9a 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/engine/BaseSpellChecker.java +++ b/plugins/spellchecker/src/com/intellij/spellchecker/engine/BaseSpellChecker.java @@ -33,6 +33,7 @@ import com.intellij.spellchecker.dictionary.EditableDictionary; import com.intellij.spellchecker.dictionary.EditableDictionaryLoader; import com.intellij.spellchecker.dictionary.Loader; import com.intellij.util.Consumer; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; @@ -49,11 +50,11 @@ public class BaseSpellChecker implements SpellCheckerEngine { private final Transformation transform = new Transformation(); private final Set dictionaries = new THashSet(); - private final List bundledDictionaries = new CopyOnWriteArrayList(); + private final List bundledDictionaries = ContainerUtil.createEmptyCOWList(); private final Metrics metrics = new LevenshteinDistance(); private AtomicBoolean myLoadingDictionaries = new AtomicBoolean(false); - private List>> myDictionariesToLoad = new CopyOnWriteArrayList>>(); + private List>> myDictionariesToLoad = ContainerUtil.createEmptyCOWList(); private Project myProject; public BaseSpellChecker(final Project project) {