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;
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));
}