Commit Graph
24 Commits
Author SHA1 Message Date
Nikita Eshkeevandintellij-monorepo-bot ce7dae26b1 [codeInsight] IDEA-240288 Inspection for StringBuilder.toString().substring()
This patch replaces the excessive extraction of a qualifier via `ExpressionUtils.getEffectiveQualifier` with a simple `call.getMethodExpression().getQualifierExpression`

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: 4a4f1c6b218c63691fa2bd4610e9901874d3c712
2020-05-15 12:15:31 +00:00
Nikita Eshkeevandintellij-monorepo-bot 0218cec2c9 [codeInsight] IDEA-240288 Inspection for StringBuilder.toString().substring()
This patch removes the detection of redundant calls to `StringBuilder#toString` from the `RedundantStringOperationInspection` since there is a more general inspection called `UnnecessaryToStringCallInspection` which handles all the redundant `Object#toString` calls. All the related tests were moved to the test data of `UnnecessaryToStringCallInspectionTest`

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: 1fe7723fa4369b797120c5bbc6a6b24947c84a94
2020-05-14 22:04:54 +00:00
Nikita Eshkeevandintellij-monorepo-bot ae75412782 [codeInsight] IDEA-240288 Inspection for StringBuilder.toString().substring()
This patch fixes the syntax error in testData

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: 90aae74914c4143dcb1ebff9e7d0c585f373718b
2020-05-14 15:42:52 +00:00
Nikita Eshkeevandintellij-monorepo-bot 06fbc3bdd2 [codeInsight] IDEA-240288 Inspection for StringBuilder.toString().substring()
This patch simplifies the `RedundantStringOperationInspection#isOperandOfStringType` method by checking if the type of the passed operand is java.lang.String. The check is the same for any passed operand since they are of the `PsiExpression` type and hence poses the `PsiExpression#getType` method.

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: bcd489d41d1272877a1bbf6032ef837a228a18e1
2020-05-13 00:55:37 +00:00
Nikita Eshkeevandintellij-monorepo-bot cb47b00f60 [codeInsight] IDEA-240288 Inspection for StringBuilder.toString().substring()
This patch alters the `getRedundantStringBuilderToStringProblem` method with more sophisticated algorithm to detect unnecessary freestanding `StringBuilder#toString` calls. If the call is a part of a polyadic expression it checks if there is at least one string operand (either a constant literal or a local variable or a constant variable or a method call) and based on that information it detects redundant `StringBuilder#toString` calls.

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: e09ea8b8829ad9e28e8ff1bcfad34cf6b191aa6b
2020-05-12 00:59:21 +00:00
Nikita Eshkeevandintellij-monorepo-bot 597a92c0b2 [codeInsight] IDEA-240288 Inspection for StringBuilder.toString().substring()
This patch enhances RedundantStringOperationInspection with detecting either unnecessary naked calls StringBuilder.toString or redundant toString in StringBuilder.toString.substring.

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: 3cd7e964c0acc73fb1ac38061ef31264035f82dc
2020-05-09 05:25:10 +00:00
Nikita Eshkeevandintellij-monorepo-bot 565443bca4 [codeInsight] IDEA-219640 Inspection to detect some pointless String.substring
This patch fixes the notes from the review, it contains:

1. fixing the javadoc for ExpressionUtils#isConversionToStringNecessary
2. properly handling JavaTokenType.MINUS in ExpressionUtils#isDifference
3. properly handling complex PsiPolyadicExpression values in ExpressionUtils#isDifference
4. changing ProblemHighlightType to GENERIC_ERROR_OR_WARNING for
inspecitons like these
5. fixing the comments duplication problem when replacing the old string
with a new one for inspections like stringValue.substring(0, 1).equals("_")

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: 907524c9026e2d1d7cd6f0bd7b988e478e73298d
2020-04-20 20:10:15 +00:00
Nikita Eshkeevandintellij-monorepo-bot 0aa2e160b0 [codeInsight] IDEA-219640 Inspection to detect some pointless String.substring
This patch fixes the notes from the review, it includes:

- restoring annotation.naming.convention.display.name
- using com.intellij.openapi.util.Pair instead of custom private objects
- using EquivalenceChecker.expressionsMatch in order to extract
difference between two PsiBinaryExpression
- using BoolUtils.findNegation to properly deduce the sign of the equals
clause
- restoring comments while replacing substring with charAt
- properly handling special characters (e.g. '\\', '\n', '\"', etc.) in
equals clause when it is converted to charAt + "=="
- eliminating the imperative form of a message for the inspection of
substring + equals

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: be1dfd53a6af10979485cd172af39653faafb744
2020-04-17 22:57:24 +00:00
Nikita Eshkeevandintellij-monorepo-bot 7b6e636c13 [codeInsight] IDEA-219640 Inspection to detect some pointless String.substring
IDEA didn't use to report pointless String.substring invocations for
cases when only one character in the string is extracted. In such cases
it makes more sense to use the String#charAt method because it is
allocation free.

IDEA didn't use to suggest to refactor for the code when String.substring
selects a single character and is followed by the equals method(e.g.
args[0].substring(0, 1).equals("_")) to more readable version e.g.
args[0].charAt(0) == '_'.

This patch adds such refactorings to both of the cases. It also adds
the possiblity to handle expressions like "i+1" and "i+2" to
com.siyeh.ig.psiutils.ExpressionUtils#isDifference.

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: 6d179c7c9c605f08b4d4468712f8468fd68045a1
2020-04-15 21:31:10 +00:00
Tagir Valeevandintellij-monorepo-bot 98792cbf73 Revert substring(x).indexOf(y) -> indexOf(y, x) (IDEA-219640, case#3); was incorrect replacement
GitOrigin-RevId: f62ccdd76bd6353fe1bce95fe17ab4b3ca507dce
2019-11-25 09:31:23 +00:00
Tagir Valeevandintellij-monorepo-bot 25dc0f385c s.substring(s.length()-fooLen).equals(foo) -> s.endsWith(foo)
GitOrigin-RevId: 5dbd78e6359770f9680ef25dcf699297b5a28e46
2019-11-24 02:05:56 +00:00
Tagir Valeevandintellij-monorepo-bot 476b3ff5bb substring(x, x+y.length()).equals(y) -> startsWith(y, x) (IDEA-226148, case#1)
GitOrigin-RevId: 04fe1be3e9f48783ad8d95897497ea55109453f5
2019-11-22 06:36:34 +00:00
Tagir Valeevandintellij-monorepo-bot 7f8d9a2372 substring(x).indexOf(y) -> indexOf(y, x) (IDEA-219640, case#3)
GitOrigin-RevId: aab34215f1dc50e33af12cc56954dc17b9104318
2019-11-22 06:36:34 +00:00
Tagir Valeevandintellij-monorepo-bot 50b74c2848 IDEA-225861 Detect a case related to String transformation where result can be predicted before transformation
GitOrigin-RevId: 3448b86219bebc4914cccae89e7e46db67d81128
2019-11-07 02:40:58 +00:00
Tagir Valeev 11e73d577f RedundantStringOperation: id changed, merger updated (IDEA-CR-34351) 2018-11-04 10:54:34 +07:00
Tagir Valeev e616b88fa7 IDEA-194396 Merge StringConstructorInspection into RedundantStringOperationInspection 2018-07-02 17:50:00 +07:00
Tagir Valeev 4861c7cc17 RedundantStringOperation: refactored to CallMapper; indexOf/startsWith/lastIndexOf scenarios
Fixes IDEA-191536 More redundant string operations with indexOf lastIndexOf startsWith
2018-05-10 12:01:59 +07:00
Tagir Valeev f6c45995d3 IDEA-187224: test fixed (beforeStringSubstringLength.java was not added mistakenly) 2018-02-28 14:15:23 +07:00
Tagir Valeev 5feb5cb75a IDEA-187224 Add inspection for substring with String#length as second param 2018-02-27 13:05:45 +07:00
Tagir Valeev 2f547ca38f RedundantStringOperationInspection: warn about append(s.substring(x, y))
Replaceable with append(s, x, y)
Fixes IDEA-185652 Improve StringBulder.append(s.substring(1,2)) intention
Also optimization of new expression resolution
2018-01-29 13:34:55 +07:00
Tagir Valeev 30b3d4a558 IDEA-184825 "Redundant String operation" inspection - rename 'Delete element' to 'Delete argument' 2018-01-12 11:44:40 +07:00
Tagir Valeev e4efb836cd RedundantStringOperationInspection: fixes after review IDEA-CR-25339
1. messages cleanup
2. new StringBuilder(""). PrintStream.println("") are warned
2017-10-17 10:58:07 +07:00
Tagir Valeev 31b328cdca RedundantStringOperation: append("") (IDEA-180178), intern()
ConstantStringInternInspection removed
2017-10-11 14:35:28 +07:00
Tagir Valeev 454efb3280 RedundantStringOperationInspection: SubstringZero and StringToString merged 2017-10-11 14:35:27 +07:00