diff --git a/build/dependencies/gradle.properties b/build/dependencies/gradle.properties index f8830f0f0496..6a1a14ad4ef2 100644 --- a/build/dependencies/gradle.properties +++ b/build/dependencies/gradle.properties @@ -1,4 +1,4 @@ # The file might be automatically updated. Comments and empty lines will be removed. kotlinPluginBuild=1.1.2-release-IJ2017.2-1 jetSignBuild=42.30 -jdkBuild=u152b855.1 +jdkBuild=u152b867.1 diff --git a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java index a72617b9b2da..555a21af01e7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java @@ -44,6 +44,7 @@ import com.intellij.psi.impl.source.tree.JavaDocElementType; import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.javadoc.*; import com.intellij.psi.search.EverythingGlobalScope; +import com.intellij.psi.util.PropertyUtil; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.psi.util.PsiFormatUtilBase; import com.intellij.psi.util.PsiTreeUtil; @@ -1343,6 +1344,26 @@ public class JavaDocInfoGenerator { buffer.append(""); } } + else { + PsiField field = PropertyUtil.getFieldOfGetter(method); + if (field == null) { + field = PropertyUtil.getFieldOfSetter(method); + } + + if (field != null) { + PsiDocComment fieldDocComment = field.getDocComment(); + if (fieldDocComment != null && !isEmptyDescription(fieldDocComment)) { + buffer.append("
"); + buffer.append("
"); + buffer.append(CodeInsightBundle.message("javadoc.description.copied.from.field")); + buffer.append(" "); + generateLink(buffer, field, field.getName(), false); + buffer.append(BR_TAG); + generateValue(buffer, fieldDocComment.getDescriptionElements(), ourEmptyElementsProvider); + buffer.append("
"); + } + } + } } private void generateValue(StringBuilder buffer, PsiElement[] elements, InheritDocProvider provider) { diff --git a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java index 6ba984a386c9..3ec283406529 100644 --- a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java +++ b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java @@ -20,6 +20,7 @@ import com.intellij.find.FindBundle; import com.intellij.ide.util.SuperMethodWarningUtil; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.application.TransactionGuard; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.ui.Messages; @@ -30,6 +31,7 @@ import com.intellij.psi.impl.search.ThrowSearchUtil; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; +import com.intellij.psi.search.searches.FunctionalExpressionSearch; import com.intellij.psi.search.searches.MethodReferencesSearch; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.util.PropertyUtil; @@ -119,6 +121,19 @@ public class JavaFindUsagesHandler extends FindUsagesHandler{ elementsToSearch.add(parameters[idx]); } } + + final PsiClass aClass = ReadAction.compute(method::getContainingClass); + if (aClass != null) { + FunctionalExpressionSearch.search(aClass).forEach(element -> { + if (element instanceof PsiLambdaExpression) { + PsiParameter[] parameters = ((PsiLambdaExpression)element).getParameterList().getParameters(); + if (idx < parameters.length) { + elementsToSearch.add(parameters[idx]); + } + } + }); + } + return PsiUtilCore.toPsiElementArray(elementsToSearch); } @@ -137,6 +152,9 @@ public class JavaFindUsagesHandler extends FindUsagesHandler{ LOG.assertTrue(aClass != null); //Otherwise can not be overriden boolean hasOverridden = OverridingMethodsSearch.search(method).findFirst() != null; + if (!hasOverridden) { + hasOverridden = FunctionalExpressionSearch.search(aClass).findFirst() != null; + } if (hasOverridden && askWhetherShouldSearchForParameterInOverridingMethods(element, parameter)) { return getParameterElementsToSearch(parameter, method); } diff --git a/java/java-tests/testData/codeInsight/javadocIG/documentationForGetterByField.html b/java/java-tests/testData/codeInsight/javadocIG/documentationForGetterByField.html new file mode 100644 index 000000000000..63b380e60a69 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/documentationForGetterByField.html @@ -0,0 +1,3 @@ + FooBar
public String getMyFoo()
Description copied from field: myFoo
+ foo bar baz +
\ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/javadocIG/documentationForGetterByField.java b/java/java-tests/testData/codeInsight/javadocIG/documentationForGetterByField.java new file mode 100644 index 000000000000..33da308ddb13 --- /dev/null +++ b/java/java-tests/testData/codeInsight/javadocIG/documentationForGetterByField.java @@ -0,0 +1,10 @@ +class FooBar { + /** + * foo bar baz + */ + private String myFoo; + + public String getMyFoo() { + return myFoo; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java index a42914a98b47..e58110808220 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/javadoc/JavaDocInfoGeneratorTest.java @@ -405,6 +405,10 @@ public class JavaDocInfoGeneratorTest extends CodeInsightTestCase { doTestAtCaret(); } + public void testDocumentationForGetterByField() throws Exception { + doTestAtCaret(); + } + public void testDumbMode() throws Exception { DumbServiceImpl.getInstance(myProject).setDumb(true); try { diff --git a/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java b/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java index 5ccfac04fb93..ea4bcab1f2e5 100644 --- a/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java +++ b/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -130,7 +130,7 @@ public class PathEnvironmentVariableUtil { return Collections.emptyList(); } List result = new SmartList<>(); - List dirPaths = StringUtil.split(pathEnvVarValue, File.pathSeparator, true, true); + List dirPaths = getPathDirs(pathEnvVarValue); for (String dirPath : dirPaths) { File dir = new File(dirPath); if (dir.isAbsolute() && dir.isDirectory()) { @@ -148,6 +148,11 @@ public class PathEnvironmentVariableUtil { return result; } + @NotNull + public static List getPathDirs(@NotNull String pathEnvVarValue) { + return StringUtil.split(pathEnvVarValue, File.pathSeparator, true, true); + } + /** * Alters the passed in exe path to increase probability of exe file success finding when * spawning an external process. Modifications are performed iff the passed in exe path is diff --git a/platform/platform-api/src/com/intellij/ui/FieldPanel.java b/platform/platform-api/src/com/intellij/ui/FieldPanel.java index 470ae981ef1d..13f6e94759ce 100644 --- a/platform/platform-api/src/com/intellij/ui/FieldPanel.java +++ b/platform/platform-api/src/com/intellij/ui/FieldPanel.java @@ -22,7 +22,7 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.event.ActionListener; -public class FieldPanel extends AbstractFieldPanel { +public class FieldPanel extends AbstractFieldPanel implements TextAccessor { private final JTextField myTextField; public FieldPanel() { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java index a3e31eabf090..7cbc6fc5beee 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java @@ -77,6 +77,7 @@ public class FileSystemTreeImpl implements FileSystemTree { private final Project myProject; private final ArrayList myOkActions = new ArrayList<>(2); private final FileChooserDescriptor myDescriptor; + private final FileTreeModel myFileTreeModel; private final AsyncTreeModel myAsyncTreeModel; private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); @@ -99,10 +100,12 @@ public class FileSystemTreeImpl implements FileSystemTree { myProject = project; if (renderer == null && Registry.is("file.chooser.async.tree.model")) { renderer = new FileRenderer().forTree(); - myAsyncTreeModel = new AsyncTreeModel(new FileTreeModel(descriptor, new FileRefresher(true, 3))); + myFileTreeModel = new FileTreeModel(descriptor, new FileRefresher(true, 3)); + myAsyncTreeModel = new AsyncTreeModel(myFileTreeModel); myTreeStructure = null; } else { + myFileTreeModel = null; myAsyncTreeModel = null; myTreeStructure = new FileTreeStructure(project, descriptor); } @@ -244,7 +247,7 @@ public class FileSystemTreeImpl implements FileSystemTree { public void showHiddens(boolean showHidden) { if (myAsyncTreeModel != null) { myDescriptor.withShowHiddenFiles(showHidden); - //TODO:refresh + if (myFileTreeModel != null) myFileTreeModel.invalidate(); } else { myTreeStructure.showHiddens(showHidden); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileChooser/tree/FileTreeModel.java b/platform/platform-impl/src/com/intellij/openapi/fileChooser/tree/FileTreeModel.java index c3de14d49758..73dd78cab9d5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileChooser/tree/FileTreeModel.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileChooser/tree/FileTreeModel.java @@ -79,6 +79,17 @@ public final class FileTreeModel extends AbstractTreeModel implements Disposable }); } + public void invalidate() { + invoker.invokeLaterIfNeeded(() -> { + if (roots != null) { + for (Root root : roots) { + root.tree.invalidate(); + } + } + treeStructureChanged(state.path, null, null); + }); + } + @Override public void dispose() { } diff --git a/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java b/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java index df4066ed261e..a93e523067c4 100644 --- a/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java +++ b/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java @@ -359,9 +359,7 @@ public final class AsyncTreeModel extends AbstractTreeModel implements Disposabl LOG.debug("ignore updating of changed node: ", object); return; } - boolean isLoadingRequired = entry.isLoadingRequired(); MapBasedTree.UpdateResult update = tree.update(entry, children); - if (isLoadingRequired) return; boolean removed = !update.getRemoved().isEmpty(); boolean inserted = !update.getInserted().isEmpty(); @@ -380,7 +378,11 @@ public final class AsyncTreeModel extends AbstractTreeModel implements Disposabl return; } } - treeStructureChanged(entry, null, null); + if (!listeners.isEmpty()) { + if (removed) listeners.treeNodesRemoved(update.getEvent(AsyncTreeModel.this, entry, update.getRemoved())); + if (inserted) listeners.treeNodesInserted(update.getEvent(AsyncTreeModel.this, entry, update.getInserted())); + if (contained) listeners.treeNodesChanged(update.getEvent(AsyncTreeModel.this, entry, update.getContained())); + } for (Entry entry : update.getContained()) { if (!entry.isLoadingRequired()) { loadChildren(entry, false); diff --git a/platform/platform-impl/src/com/intellij/ui/tree/MapBasedTree.java b/platform/platform-impl/src/com/intellij/ui/tree/MapBasedTree.java index 836f286ac969..891bf2ec5702 100644 --- a/platform/platform-impl/src/com/intellij/ui/tree/MapBasedTree.java +++ b/platform/platform-impl/src/com/intellij/ui/tree/MapBasedTree.java @@ -57,6 +57,11 @@ public final class MapBasedTree { this.path = path; } + public void invalidate() { + if (root != null) root.invalidate(); + map.values().forEach(entry -> entry.invalidate()); + } + public void onRemove(@NotNull Consumer consumer) { Consumer old = nodeRemoved; nodeRemoved = old == null ? consumer : old.andThen(consumer); @@ -146,6 +151,7 @@ public final class MapBasedTree { } parent.leaf = children == null; parent.children = guard(newChildren); + parent.valid = true; List> removed = oldChildren; List> inserted = newChildren; @@ -218,6 +224,7 @@ public final class MapBasedTree { private volatile boolean leaf; private volatile List> children; private volatile N loading; + private volatile boolean valid; private Entry(TreePath path, N parent, N node, Boolean leaf) { super(path, node); @@ -225,6 +232,11 @@ public final class MapBasedTree { this.parent = parent; this.leaf = Boolean.TRUE.equals(leaf); if (this.leaf) children = emptyList(); + invalidate(); + } + + public void invalidate() { + valid = leaf; } public N getNode() { @@ -240,7 +252,7 @@ public final class MapBasedTree { } public boolean isLoadingRequired() { - return children == null; + return !valid || children == null; } public int getChildCount() { @@ -272,6 +284,7 @@ public final class MapBasedTree { if (children != null) LOG.warn("MapBasedTree: rewrite loaded nodes"); this.loading = loading; children = loading == null ? emptyList() : singletonList(new Entry<>(this, node, loading, true)); + valid = true; } } diff --git a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties index 49c67ecbfaa3..29cfc6953ad2 100644 --- a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties +++ b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties @@ -275,6 +275,7 @@ templates.postfix.settings.category.before=The sample code featuring selected te templates.postfix.settings.category.after=Postfix completion invocation result will be shown here. javadoc.description.copied.from.interface=Description copied from interface: javadoc.description.copied.from.class=Description copied from class: +javadoc.description.copied.from.field=Description copied from field: javadoc.deprecated=Deprecated javadoc.since=Since: javadoc.see.also=See Also: diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/FileUrlProvider.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/FileUrlProvider.java index f04e3a79d6cb..e74b15771955 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/FileUrlProvider.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/FileUrlProvider.java @@ -30,7 +30,6 @@ import com.intellij.util.io.URLUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -49,19 +48,29 @@ public class FileUrlProvider implements SMTestLocator, DumbAware { return Collections.emptyList(); } - final String normalizedPath = path.replace(File.separatorChar, '/'); - - final int lineNoSeparatorIndex = normalizedPath.lastIndexOf(':'); - final String filePath; final int lineNumber; - // if line is specified - if (lineNoSeparatorIndex > 3) { // on Windows, paths start with /C: and that colon is not a line number separator - lineNumber = StringUtil.parseInt(normalizedPath.substring(lineNoSeparatorIndex + 1), -1); - filePath = normalizedPath.substring(0, lineNoSeparatorIndex); + final int columnNumber; + + int lastColonIndex = path.lastIndexOf(':'); + if (lastColonIndex > 3) { // on Windows, paths start with /C: and that colon is not a line number separator + int lastValue = StringUtil.parseInt(path.substring(lastColonIndex + 1), -1); + int penultimateColonIndex = path.lastIndexOf(':', lastColonIndex - 1); + if (penultimateColonIndex > 3) { + int penultimateValue = StringUtil.parseInt(path.substring(penultimateColonIndex + 1, lastColonIndex), -1); + filePath = path.substring(0, penultimateColonIndex); + lineNumber = penultimateValue; + columnNumber = lineNumber <= 0 ? -1 : lastValue; + } + else { + filePath = path.substring(0, lastColonIndex); + lineNumber = lastValue; + columnNumber = -1; + } } else { + filePath = path; lineNumber = -1; - filePath = normalizedPath; + columnNumber = -1; } // Now we should search file with most suitable path // here path may be absolute or relative @@ -73,20 +82,27 @@ public class FileUrlProvider implements SMTestLocator, DumbAware { final List locations = new ArrayList<>(2); for (VirtualFile file : virtualFiles) { - locations.add(createLocationFor(project, file, lineNumber)); + locations.add(createLocationFor(project, file, lineNumber, columnNumber)); } return locations; } + @Nullable + public static Location createLocationFor(@NotNull Project project, @NotNull VirtualFile virtualFile, int lineNum) { + return createLocationFor(project, virtualFile, lineNum, -1); + } + /** * @param project Project instance * @param virtualFile VirtualFile instance to locate * @param lineNum one-based line number to locate inside {@code virtualFile}, * a non-positive line number doesn't change text caret position inside the file + * @param columnNum one-based column number to locate inside {@code virtualFile}, + * a non-positive column number doesn't change text caret position inside the file * @return Location instance, or null if not found */ @Nullable - public static Location createLocationFor(@NotNull Project project, @NotNull VirtualFile virtualFile, int lineNum) { + public static Location createLocationFor(@NotNull Project project, @NotNull VirtualFile virtualFile, int lineNum, int columnNum) { final PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile); if (psiFile == null) { return null; @@ -100,19 +116,14 @@ public class FileUrlProvider implements SMTestLocator, DumbAware { return null; } - final int lineCount = doc.getLineCount(); - final int lineStartOffset; - final int endOffset; - if (lineNum <= lineCount) { - lineStartOffset = doc.getLineStartOffset(lineNum - 1); - endOffset = doc.getLineEndOffset(lineNum - 1); - } else { - // unknown line - lineStartOffset = 0; - endOffset = doc.getTextLength(); + if (lineNum > doc.getLineCount()) { + return PsiLocation.fromPsiElement(psiFile); } + + final int lineStartOffset = doc.getLineStartOffset(lineNum - 1); + final int endOffset = doc.getLineEndOffset(lineNum - 1); - int offset = lineStartOffset; + int offset = Math.min(lineStartOffset + Math.max(columnNum - 1, 0), endOffset); PsiElement elementAtLine = null; while (offset <= endOffset) { elementAtLine = psiFile.findElementAt(offset); diff --git a/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/FileUrlLocationTest.java b/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/FileUrlLocationTest.java index 52e1aba1425d..43bc1e454c34 100644 --- a/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/FileUrlLocationTest.java +++ b/platform/smRunner/testSrc/com/intellij/execution/testframework/sm/FileUrlLocationTest.java @@ -31,16 +31,21 @@ public class FileUrlLocationTest extends LightPlatformCodeInsightFixtureTestCase "my_example_spec.xml", "\n" + "\n" + - " \n" + + " \n" + "\n" + "\n").getVirtualFile(); - doTest(1, file.getPath(), 2); - doTest(16, file.getPath(), 3); + doTest(1, file.getPath(), 2, -1); + doTest(16, file.getPath(), 3, -1); + doTest(2, file.getPath(), 2, 5); + doTest(19, file.getPath(), 3, 8); + doTest(0, file.getPath(), 100, -1); + doTest(11, file.getPath(), 2, 100); } - private void doTest(int expectedOffset, String filePath, int lineNum) { - SMTestProxy testProxy = new SMTestProxy("myTest", false, "file://" + filePath + ":" + lineNum); + private void doTest(int expectedOffset, String filePath, int lineNum, int columnNumber) { + SMTestProxy testProxy = new SMTestProxy("myTest", false, "file://" + filePath + ":" + lineNum + + (columnNumber > 0 ? (":" + columnNumber) : "")); testProxy.setLocator(FileUrlProvider.INSTANCE); Location location = testProxy.getLocation(getProject(), GlobalSearchScope.allScope(getProject())); diff --git a/platform/util/src/com/intellij/openapi/util/io/WindowsRegistryUtil.java b/platform/util/src/com/intellij/openapi/util/io/WindowsRegistryUtil.java index ea78c153c106..af8c41e686f9 100644 --- a/platform/util/src/com/intellij/openapi/util/io/WindowsRegistryUtil.java +++ b/platform/util/src/com/intellij/openapi/util/io/WindowsRegistryUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -23,6 +23,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class WindowsRegistryUtil { private WindowsRegistryUtil() { @@ -69,7 +71,7 @@ public class WindowsRegistryUtil { @NotNull public static List readRegistryBranch(@NotNull String location) { List result = new ArrayList(); - StringBuilder output = readRegistry("reg query \"" + location + "\""); + StringBuilder output = doReadBranch(location); if (output != null) { for (int pos = output.indexOf(location); pos != -1; pos = output.indexOf(location, pos + location.length())) { int pos2 = output.indexOf("\r\n", pos + location.length()); @@ -84,6 +86,26 @@ public class WindowsRegistryUtil { } return result; } + + @NotNull + public static List readRegistryBranchValues(@NotNull String location) { + List result = new ArrayList(); + StringBuilder output = doReadBranch(location); + if (output != null) { + // there seem to be no way to get machine-readable list of value names. + // so we are trying to make pattern as precise as possible. + Pattern pattern = Pattern.compile("^\\s{4}(.+)\\s{4}REG_\\w+\\s{4}.+$", Pattern.MULTILINE); + Matcher m = pattern.matcher(output); + while(m.find()) { + result.add(m.group(1)); + } + } + return result; + } + + private static StringBuilder doReadBranch(@NotNull String location) { + return readRegistry("reg query \"" + location + "\""); + } @Nullable public static String readRegistryDefault(@NotNull String location) { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties index e38fa16ac62a..f06a95e2ea3e 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties @@ -71,7 +71,7 @@ statement.with.empty.body.problem.descriptor=#ref statement has emp statement.with.empty.body.include.option=Include statement bodies that are empty code blocks equals.between.inconvertible.types.display.name='equals()' between objects of inconvertible types equals.between.inconvertible.types.problem.descriptor=#ref() between objects of inconvertible types ''{0}'' and ''{1}'' #loc -equals.called.on.suspicious.object.display.name='equals' called on suspicious object +equals.called.on.suspicious.object.display.name='equals()' called on suspicious object equals.called.on.suspicious.object.problem.descriptor=Suspicious call ''equals'' on ''{0}'' object non.final.field.in.equals.display.name=Non-final field referenced in 'equals()' non.final.field.in.equals.problem.descriptor=Non-final field #ref accessed in 'equals()' #loc