IDEA-161217 (False positive 'Unnecessary call to String.valueOf()')

This commit is contained in:
Bas Leijdekkers
2016-09-14 17:47:02 +02:00
parent 78bdb3b59a
commit c20dca02cf
2 changed files with 26 additions and 14 deletions
@@ -120,7 +120,7 @@ public class UnnecessaryCallToStringValueOfInspection extends BaseInspection imp
if (arguments.length != 1) {
return;
}
final PsiExpression argument = arguments[0];
final PsiExpression argument = ParenthesesUtils.stripParentheses(arguments[0]);
final PsiType argumentType = argument.getType();
if (argumentType instanceof PsiArrayType) {
final PsiArrayType arrayType = (PsiArrayType)argumentType;
@@ -129,23 +129,27 @@ public class UnnecessaryCallToStringValueOfInspection extends BaseInspection imp
return;
}
}
else if (!TypeUtils.isJavaLangString(argumentType)) {
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
final String qualifiedName = aClass.getQualifiedName();
if (!CommonClassNames.JAVA_LANG_STRING.equals(qualifiedName)) {
return;
}
if (!TypeUtils.isJavaLangString(argumentType)) {
final boolean throwable = TypeUtils.expressionHasTypeOrSubtype(argument, "java.lang.Throwable");
if (ExpressionUtils.isConversionToStringNecessary(expression, throwable)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
final String qualifiedName = aClass.getQualifiedName();
if (!CommonClassNames.JAVA_LANG_STRING.equals(qualifiedName)) {
return;
}
}
if (argument instanceof PsiReferenceExpression || argument instanceof PsiMethodCallExpression){
// don't warn because unwrapping when null would change semantics
return;
}
registerError(expression, calculateReplacementText(argument));
}
@@ -50,4 +50,12 @@ public class UnnecessaryCallToStringValueOf {
':' +
<warning descr="'String.valueOf(1)' can be simplified to '1'">String.valueOf(1)</warning>;
}
void regression() {
String s = "" + Integer.valueOf("asdf") + String.valueOf((nothing()));
}
Object nothing() {
return null;
}
}