boolean (PsiExpression element) { if (ExpressionUtils.isStringConcatenationOperand(element)) return true; final PsiElement parent = PsiUtil.skipParenthesizedExprUp(element.getParent()); if (parent instanceof PsiAssignmentExpression parentExpression) { final IElementType tokenType = parentExpression.getOperationTokenType(); if (!JavaTokenType.PLUSEQ.equals(tokenType)) { return false; } final PsiType parentType = parentExpression.getType(); if (parentType == null) { return false; } final String parentTypeText = parentType.getCanonicalText(); return JAVA_LANG_STRING.equals(parentTypeText); } if (parent instanceof PsiExpressionList) { final PsiElement grandParent = parent.getParent(); if (!(grandParent instanceof PsiMethodCallExpression methodCall)) { return false; } final PsiReferenceExpression methodExpression = methodCall.getMethodExpression(); final PsiExpression qualifierExpression = methodExpression.getQualifierExpression(); final PsiType type; if (qualifierExpression == null) { // to use the intention inside the source of // String and StringBuffer type = methodExpression.getType(); } else { type = qualifierExpression.getType(); } if (type == null) { return false; } final String className = type.getCanonicalText(); if (CommonClassNames.JAVA_LANG_STRING_BUFFER.equals(className) || CommonClassNames.JAVA_LANG_STRING_BUILDER.equals(className)) { @NonNls final String methodName = methodExpression.getReferenceName(); if (!"append".equals(methodName) && !"insert".equals(methodName)) { return false; } final PsiElement method = methodExpression.resolve(); return method != null; } else if (JAVA_LANG_STRING.equals(className)) { @NonNls final String methodName = methodExpression.getReferenceName(); if (!"indexOf".equals(methodName) && !"lastIndexOf".equals(methodName) && !"replace".equals(methodName)) { return false; } final PsiElement method = methodExpression.resolve(); return method != null; } } return false; }