private static @Nullable HashCodeModel getHashCodeModel(PsiTypeCastExpression cast) {
    if (cast == null) return null;
    if (!PsiTypes.intType().equals(cast.getType())) return null;
    PsiExpression operand = PsiUtil.skipParenthesizedExprDown(cast.getOperand());
    if (!(operand instanceof PsiBinaryExpression binaryExpression)) return null;

    PsiJavaToken operationSign = binaryExpression.getOperationSign();
    if (operationSign.getTokenType() != JavaTokenType.XOR) return null;

    PsiExpression leftOperand = PsiUtil.skipParenthesizedExprDown(binaryExpression.getLOperand());
    PsiExpression rightOperand = PsiUtil.skipParenthesizedExprDown(binaryExpression.getROperand());

    if (leftOperand == null || rightOperand == null) return null;
    if (!PsiTypes.longType().equals(PsiPrimitiveType.getOptionallyUnboxedType(leftOperand.getType()))) return null;

    if (isXorShift(leftOperand, rightOperand)) return new HashCodeModel(cast, leftOperand, null, null, "Long").tryReplaceDouble();
    if (isXorShift(rightOperand, leftOperand)) return new HashCodeModel(cast, rightOperand, null, null, "Long").tryReplaceDouble();
    return null;
  }
private static @Nullable HashCodeModel getHashCodeModel(PsiTypeCastExpression cast)