From 9ef7a5df226bc4eb0603c755d6c46de099cf284f Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 20 Nov 2015 15:58:56 +0300 Subject: [PATCH] Added settings for 'Collection without initial capacity' and 'Collection.addAll can be replaced with parametrized constructor' inspections (IDEA-148262) --- ...anBeReplacedWithConstructorInspection.java | 47 ++++++-- .../afterAddAllWithReferences.java | 2 +- .../afterSimple.java | 2 +- .../afterSplitDeclarationAndAssignment.java | 2 +- .../beforeAddAllWithReferences.java | 2 +- .../beforeAddAllWithReferencesNotShown.java | 2 +- .../beforeSimple.java | 2 +- .../beforeSplitDeclarationAndAssignment.java | 2 +- .../com/intellij/ui/CollectionListModel.java | 2 +- .../performance/CollectionsListSettings.java | 113 ++++++++++++++++++ ...ionsMustHaveInitialCapacityInspection.java | 52 ++++---- .../CollectionsMustHaveInitialCapacity.html | 14 +-- ...ionAddAllCanBeReplacedWithConstructor.html | 2 +- .../src/messages/QuickFixBundle.properties | 4 +- 14 files changed, 195 insertions(+), 53 deletions(-) create mode 100644 plugins/InspectionGadgets/src/com/siyeh/ig/performance/CollectionsListSettings.java rename plugins/InspectionGadgets/{InspectionGadgetsAnalysis => }/src/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspection.java (64%) diff --git a/java/java-impl/src/com/intellij/codeInspection/CollectionAddAllCanBeReplacedWithConstructorInspection.java b/java/java-impl/src/com/intellij/codeInspection/CollectionAddAllCanBeReplacedWithConstructorInspection.java index 35662249825f..31af775d703d 100644 --- a/java/java-impl/src/com/intellij/codeInspection/CollectionAddAllCanBeReplacedWithConstructorInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/CollectionAddAllCanBeReplacedWithConstructorInspection.java @@ -20,16 +20,21 @@ import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.*; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.NullableFunction; import com.intellij.util.containers.ContainerUtil; +import com.siyeh.ig.performance.CollectionsListSettings; +import org.jdom.Element; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -40,6 +45,29 @@ import java.util.List; public class CollectionAddAllCanBeReplacedWithConstructorInspection extends BaseJavaBatchLocalInspectionTool { private final static Logger LOG = Logger.getInstance(CollectionAddAllCanBeReplacedWithConstructorInspection.class); + private final CollectionsListSettings mySettings = new CollectionsListSettings() { + @Override + protected Collection createDefaultSettings() { + return DEFAULT_COLLECTION_LIST; + } + }; + + @Override + public void writeSettings(@NotNull Element node) throws WriteExternalException { + mySettings.writeSettings(node); + } + + @Nullable + @Override + public JComponent createOptionsPanel() { + return mySettings.createOptionsPanel(); + } + + @Override + public void readSettings(@NotNull Element node) throws InvalidDataException { + mySettings.readSettings(node); + } + @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, @@ -49,7 +77,7 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Base @Override public void visitMethodCallExpression(PsiMethodCallExpression expression) { final String methodName = expression.getMethodExpression().getReferenceName(); - if ("addAll".equals(methodName)) { + if ("addAll".equals(methodName) || "putAll".equals(methodName)) { if (expression.getArgumentList().getExpressions().length != 1) { return; } @@ -67,7 +95,7 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Base return; } final PsiClass variableClass = ((PsiClassType)variableType).resolve(); - if (variableClass == null || !InheritanceUtil.isInheritor(variableClass, CommonClassNames.JAVA_UTIL_COLLECTION)) { + if (variableClass == null) { return; } PsiNewExpression assignmentExpression; @@ -90,7 +118,7 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Base final PsiMethod method = expression.resolveMethod(); if (method != null) { //noinspection DialogTitleCapitalization - holder.registerProblem(expression, QuickFixBundle.message("collection.addall.can.be.replaced.with.constructor.fix.description"), + holder.registerProblem(expression, QuickFixBundle.message("collection.addall.can.be.replaced.with.constructor.fix.description", methodName), new ReplaceAddAllWithConstructorFix(assignmentExpression, expression)); } } @@ -98,7 +126,7 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Base }; } - private static boolean checkLocalVariableAssignmentOrInitializer(PsiExpression initializer) { + private boolean checkLocalVariableAssignmentOrInitializer(PsiExpression initializer) { if (!(initializer instanceof PsiNewExpression)) { return false; } @@ -108,14 +136,16 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Base return false; } final PsiClass initializerClass = (PsiClass)classReference.resolve(); - if (initializerClass == null || !hasProperConstructor(initializerClass)) { + if (initializerClass == null || + !mySettings.getCollectionClassesRequiringCapacity().contains(initializerClass.getQualifiedName()) || + !hasProperConstructor(initializerClass)) { return false; } final PsiExpressionList argumentList = newExpression.getArgumentList(); return argumentList != null && argumentList.getExpressions().length == 0; } - private static boolean hasProperConstructor(PsiClass psiClass) { + private boolean hasProperConstructor(PsiClass psiClass) { for (PsiMethod psiMethod : psiClass.getConstructors()) { PsiParameterList parameterList = psiMethod.getParameterList(); if(parameterList.getParametersCount() == 1) { @@ -123,7 +153,8 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Base PsiTypeElement typeElement = parameter.getTypeElement(); if (typeElement != null) { PsiType type = typeElement.getType(); - if (InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_COLLECTION)) { + if (InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_COLLECTION) || + InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_UTIL_MAP)) { return true; } } @@ -132,7 +163,7 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Base return false; } - private static Pair isProperAssignmentStatementFound(PsiLocalVariable localVariable, PsiMethodCallExpression addAllExpression) { + private Pair isProperAssignmentStatementFound(PsiLocalVariable localVariable, PsiMethodCallExpression addAllExpression) { PsiStatement currentStatement = PsiTreeUtil.getParentOfType(addAllExpression, PsiStatement.class); final PsiStatement localVariableDefinitionStatement = PsiTreeUtil.getParentOfType(localVariable, PsiStatement.class); while (currentStatement != null) { diff --git a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterAddAllWithReferences.java b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterAddAllWithReferences.java index 9b83f0250de5..3f55ef093c49 100644 --- a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterAddAllWithReferences.java +++ b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterAddAllWithReferences.java @@ -1,4 +1,4 @@ -// "Replace 'addAll()' method with parametrized constructor call" "true" +// "Replace 'addAll/putAll' method with parametrized constructor call" "true" import java.lang.String; import java.util.ArrayList; import java.util.List; diff --git a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSimple.java b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSimple.java index 826f5e2017a8..209e0bb9e564 100644 --- a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSimple.java +++ b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSimple.java @@ -1,4 +1,4 @@ -// "Replace 'addAll()' method with parametrized constructor call" "true" +// "Replace 'addAll/putAll' method with parametrized constructor call" "true" import java.lang.String; import java.util.ArrayList; import java.util.List; diff --git a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSplitDeclarationAndAssignment.java b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSplitDeclarationAndAssignment.java index 609faa4d1e1a..22e7435b4330 100644 --- a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSplitDeclarationAndAssignment.java +++ b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/afterSplitDeclarationAndAssignment.java @@ -1,4 +1,4 @@ -// "Replace 'addAll()' method with parametrized constructor call" "true" +// "Replace 'addAll/putAll' method with parametrized constructor call" "true" import java.lang.String; import java.util.ArrayList; import java.util.List; diff --git a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferences.java b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferences.java index a1c3c003f0ae..7f018bdf1bce 100644 --- a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferences.java +++ b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferences.java @@ -1,4 +1,4 @@ -// "Replace 'addAll()' method with parametrized constructor call" "true" +// "Replace 'addAll/putAll' method with parametrized constructor call" "true" import java.lang.String; import java.util.ArrayList; import java.util.List; diff --git a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferencesNotShown.java b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferencesNotShown.java index f8b94c91e2f3..fe0e66cda21e 100644 --- a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferencesNotShown.java +++ b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeAddAllWithReferencesNotShown.java @@ -1,4 +1,4 @@ -// "Replace 'addAll()' method with parametrized constructor call" "false" +// "Replace 'addAll/putAll' method with parametrized constructor call" "false" import java.lang.String; import java.util.ArrayList; import java.util.List; diff --git a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSimple.java b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSimple.java index 1766c44975ed..4ee892c25563 100644 --- a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSimple.java +++ b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSimple.java @@ -1,4 +1,4 @@ -// "Replace 'addAll()' method with parametrized constructor call" "true" +// "Replace 'addAll/putAll' method with parametrized constructor call" "true" import java.lang.String; import java.util.ArrayList; import java.util.List; diff --git a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSplitDeclarationAndAssignment.java b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSplitDeclarationAndAssignment.java index bde244689076..76b9fc2efa64 100644 --- a/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSplitDeclarationAndAssignment.java +++ b/java/java-tests/testData/inspection/collectionAddAllCanBeReplacedWithConstructor/beforeSplitDeclarationAndAssignment.java @@ -1,4 +1,4 @@ -// "Replace 'addAll()' method with parametrized constructor call" "true" +// "Replace 'addAll/putAll' method with parametrized constructor call" "true" import java.lang.String; import java.util.ArrayList; import java.util.List; diff --git a/platform/platform-api/src/com/intellij/ui/CollectionListModel.java b/platform/platform-api/src/com/intellij/ui/CollectionListModel.java index aa51ac5ff9c1..945a2243d23a 100644 --- a/platform/platform-api/src/com/intellij/ui/CollectionListModel.java +++ b/platform/platform-api/src/com/intellij/ui/CollectionListModel.java @@ -36,7 +36,7 @@ public class CollectionListModel extends AbstractListModel implements Editabl } @SuppressWarnings("UnusedParameters") - protected CollectionListModel(@NotNull List items, boolean useListAsIs) { + public CollectionListModel(@NotNull List items, boolean useListAsIs) { myItems = items; } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CollectionsListSettings.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CollectionsListSettings.java new file mode 100644 index 000000000000..6d2c7710321a --- /dev/null +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CollectionsListSettings.java @@ -0,0 +1,113 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.performance; + +import com.intellij.codeInsight.daemon.QuickFixBundle; +import com.intellij.codeInspection.ui.ListTable; +import com.intellij.codeInspection.ui.ListWrappingTableModel; +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.InvalidDataException; +import com.intellij.openapi.util.WriteExternalException; +import com.intellij.psi.CommonClassNames; +import com.intellij.ui.AnActionButton; +import com.intellij.ui.AnActionButtonRunnable; +import com.intellij.ui.CollectionListModel; +import com.intellij.ui.ToolbarDecorator; +import com.intellij.ui.components.JBList; +import com.intellij.util.SmartList; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.SortedList; +import com.intellij.util.ui.EditableModel; +import com.siyeh.ig.ui.UiUtils; +import org.jdom.Element; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.util.*; + +/** + * @author Dmitry Batkovich + */ +public abstract class CollectionsListSettings { + @NonNls + public static final SortedSet DEFAULT_COLLECTION_LIST = new TreeSet(); + + static { + DEFAULT_COLLECTION_LIST.add("java.util.concurrent.ConcurrentHashMap"); + DEFAULT_COLLECTION_LIST.add("java.util.concurrent.PriorityBlockingQueue"); + DEFAULT_COLLECTION_LIST.add("java.util.ArrayDeque"); + DEFAULT_COLLECTION_LIST.add("java.util.ArrayList"); + DEFAULT_COLLECTION_LIST.add("java.util.HashMap"); + DEFAULT_COLLECTION_LIST.add("java.util.Hashtable"); + DEFAULT_COLLECTION_LIST.add("java.util.HashSet"); + DEFAULT_COLLECTION_LIST.add("java.util.IdentityHashMap"); + DEFAULT_COLLECTION_LIST.add("java.util.LinkedHashMap"); + DEFAULT_COLLECTION_LIST.add("java.util.LinkedHashSet"); + DEFAULT_COLLECTION_LIST.add("java.util.PriorityQueue"); + DEFAULT_COLLECTION_LIST.add("java.util.Vector"); + DEFAULT_COLLECTION_LIST.add("java.util.WeakHashMap"); + } + + private final List myCollectionClassesRequiringCapacity; + + public CollectionsListSettings() { + myCollectionClassesRequiringCapacity = new SmartList(createDefaultSettings()); + } + + public void readSettings(@NotNull Element node) throws InvalidDataException { + myCollectionClassesRequiringCapacity.clear(); + myCollectionClassesRequiringCapacity.addAll(createDefaultSettings()); + for (Element classElement : node.getChildren("cls")) { + final String className = classElement.getText(); + if (classElement.getAttributeValue("remove", Boolean.FALSE.toString()).equals(Boolean.TRUE.toString())) { + myCollectionClassesRequiringCapacity.remove(className); + } + else { + myCollectionClassesRequiringCapacity.add(className); + } + } + } + + public void writeSettings(@NotNull Element node) throws WriteExternalException { + final Collection defaultToRemoveSettings = createDefaultSettings(); + defaultToRemoveSettings.removeAll(myCollectionClassesRequiringCapacity); + + final Set toAdd = new HashSet(myCollectionClassesRequiringCapacity); + toAdd.removeAll(createDefaultSettings()); + + for (String className : defaultToRemoveSettings) { + node.addContent(new Element("cls").setText(className).setAttribute("remove", Boolean.TRUE.toString())); + } + for (String className : toAdd) { + node.addContent(new Element("cls").setText(className)); + } + } + + protected abstract Collection createDefaultSettings(); + + public Collection getCollectionClassesRequiringCapacity() { + return myCollectionClassesRequiringCapacity; + } + + public JComponent createOptionsPanel() { + final String title = QuickFixBundle.message("collection.addall.can.be.replaced.with.constructor.fix.options.title"); + final ListTable table = new ListTable(new ListWrappingTableModel(myCollectionClassesRequiringCapacity, title)); + return UiUtils.createAddRemoveTreeClassChooserPanel(table, title, CommonClassNames.JAVA_LANG_OBJECT); + } +} diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspection.java similarity index 64% rename from plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspection.java rename to plugins/InspectionGadgets/src/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspection.java index 5a0362616977..f7fc2208394f 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/CollectionsMustHaveInitialCapacityInspection.java @@ -15,37 +15,47 @@ */ package com.siyeh.ig.performance; +import com.intellij.openapi.util.InvalidDataException; +import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.*; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; -import org.jetbrains.annotations.NonNls; +import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.util.HashSet; import java.util.Set; +import java.util.TreeSet; public class CollectionsMustHaveInitialCapacityInspection extends BaseInspection { - @NonNls - private static final Set collectionClassesRequiringCapacity = new HashSet(); - static { - collectionClassesRequiringCapacity.add("java.util.concurrent.ConcurrentHashMap"); - collectionClassesRequiringCapacity.add("java.util.concurrent.PriorityBlockingQueue"); - collectionClassesRequiringCapacity.add("java.util.ArrayDeque"); - collectionClassesRequiringCapacity.add("java.util.ArrayList"); - collectionClassesRequiringCapacity.add("java.util.BitSet"); - collectionClassesRequiringCapacity.add("java.util.HashMap"); - collectionClassesRequiringCapacity.add("java.util.Hashtable"); - collectionClassesRequiringCapacity.add("java.util.HashSet"); - collectionClassesRequiringCapacity.add("java.util.IdentityHashMap"); - collectionClassesRequiringCapacity.add("java.util.LinkedHashMap"); - collectionClassesRequiringCapacity.add("java.util.LinkedHashSet"); - collectionClassesRequiringCapacity.add("java.util.PriorityQueue"); - collectionClassesRequiringCapacity.add("java.util.Vector"); - collectionClassesRequiringCapacity.add("java.util.WeakHashMap"); + private final CollectionsListSettings mySettings = new CollectionsListSettings() { + @Override + protected Set createDefaultSettings() { + final Set classes = new TreeSet(DEFAULT_COLLECTION_LIST); + classes.add("java.util.BitSet"); + return classes; + } + }; + + @Override + public void readSettings(@NotNull Element node) throws InvalidDataException { + mySettings.readSettings(node); + } + + @Override + public void writeSettings(@NotNull Element node) throws WriteExternalException { + mySettings.writeSettings(node); + } + + @Nullable + @Override + public JComponent createOptionsPanel() { + return mySettings.createOptionsPanel(); } @Override @@ -73,7 +83,7 @@ public class CollectionsMustHaveInitialCapacityInspection return new CollectionInitialCapacityVisitor(); } - private static class CollectionInitialCapacityVisitor + private class CollectionInitialCapacityVisitor extends BaseInspectionVisitor { @Override @@ -90,7 +100,7 @@ public class CollectionsMustHaveInitialCapacityInspection registerNewExpressionError(expression); } - public static boolean isCollectionWithInitialCapacity(@Nullable PsiType type) { + private boolean isCollectionWithInitialCapacity(@Nullable PsiType type) { if (!(type instanceof PsiClassType)) { return false; } @@ -100,7 +110,7 @@ public class CollectionsMustHaveInitialCapacityInspection return false; } final String className = resolved.getQualifiedName(); - return collectionClassesRequiringCapacity.contains(className); + return mySettings.getCollectionClassesRequiringCapacity().contains(className); } } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/CollectionsMustHaveInitialCapacity.html b/plugins/InspectionGadgets/src/inspectionDescriptions/CollectionsMustHaveInitialCapacity.html index 109633ba2a76..6a6b5dc84493 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/CollectionsMustHaveInitialCapacity.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/CollectionsMustHaveInitialCapacity.html @@ -3,18 +3,6 @@ Reports any attempt to instantiate a new Collection object without specifying an initial capacity. If no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing to specify initial capacities for collections may result in performance issues, if space needs to be reallocated and -memory copied when capacity is exceeded. This inspection checks allocations of the following classes: -
    -
  • java.util.ArrayList -
  • java.util.BitSet -
  • java.util.HashMap -
  • java.util.HashSet -
  • java.util.Hashtable -
  • java.util.Vector -
  • java.util.WeakHashMap -
- -

- +memory copied when capacity is exceeded. This inspection checks allocations of the classes which are listed in inspection settings. \ No newline at end of file diff --git a/resources-en/src/inspectionDescriptions/CollectionAddAllCanBeReplacedWithConstructor.html b/resources-en/src/inspectionDescriptions/CollectionAddAllCanBeReplacedWithConstructor.html index 47efe4b81f23..25c8551cb7d5 100644 --- a/resources-en/src/inspectionDescriptions/CollectionAddAllCanBeReplacedWithConstructor.html +++ b/resources-en/src/inspectionDescriptions/CollectionAddAllCanBeReplacedWithConstructor.html @@ -1,5 +1,5 @@ -Inspection reports usages of Collection.addAll() method after instantiation of object using parameter-less constructor. +Inspection reports usages of Collection.addAll() and Map.putAll() methods after instantiation of object using parameter-less constructor. \ No newline at end of file diff --git a/resources-en/src/messages/QuickFixBundle.properties b/resources-en/src/messages/QuickFixBundle.properties index 11532f4d3d79..b3775aa3095a 100644 --- a/resources-en/src/messages/QuickFixBundle.properties +++ b/resources-en/src/messages/QuickFixBundle.properties @@ -269,8 +269,8 @@ add.missing.annotation.single.parameter.fix=Add missing annotation parameter ''{ add.method.qualifier.fix.text=Add qualifier {0} to method collection.addall.can.be.replaced.with.constructor.fix.options.title=Classes to check -collection.addall.can.be.replaced.with.constructor.fix.description='addAll()' method can be replaced with parametrized constructor -collection.addall.can.be.replaced.with.constructor.fix.title=Replace 'addAll()' method with parametrized constructor call +collection.addall.can.be.replaced.with.constructor.fix.description=''{0}()'' method can be replaced with parametrized constructor +collection.addall.can.be.replaced.with.constructor.fix.title=Replace 'addAll/putAll' method with parametrized constructor call wrap.long.with.math.to.int.text=Wrap using 'Math.toIntExact()' wrap.long.with.math.to.int.parameter.single.text=Wrap parameter using 'Math.toIntExact()'