boolean (PsiElement element) { if (element instanceof PsiWhiteSpace) { element = element.getPrevSibling(); } if (!(element instanceof PsiJavaToken token)) { return false; } final IElementType tokenType = token.getTokenType(); if (!tokenType.equals(JavaTokenType.PLUS)) { return false; } final PsiElement parent = element.getParent(); if (!(parent instanceof PsiPolyadicExpression polyadicExpression)) { return false; } final PsiType type = polyadicExpression.getType(); if (type == null || !type.equalsToText(CommonClassNames.JAVA_LANG_STRING)) { return false; } final PsiExpression[] operands = polyadicExpression.getOperands(); PsiExpression previous = null; boolean stringTypeSeen = false; for (int i = 0, length = operands.length; i < length; i++) { final PsiExpression operand = operands[i]; final PsiType operandType = operand.getType(); final PsiJavaToken currentToken = polyadicExpression.getTokenBeforeOperand(operand); if (token == currentToken) { if (!(previous instanceof PsiLiteralExpression) || ((PsiLiteralExpression)previous).getValue() == null || !(operand instanceof PsiLiteralExpression) || ((PsiLiteralExpression)operand).getValue() == null) { return false; } return stringTypeSeen || (i == 1 && operandType != null && operandType.equalsToText(CommonClassNames.JAVA_LANG_STRING)); } previous = operand; if (!stringTypeSeen) { stringTypeSeen = operandType != null && operandType.equalsToText(CommonClassNames.JAVA_LANG_STRING); } } return false; }