@Nullable
  private ReturnValue findValueInExpression(LighterASTNode expression, LighterASTNode target) {
    if (expression == null) return null;
    IElementType type = expression.getTokenType();
    if (type == ASSIGNMENT_EXPRESSION) {
      List<LighterASTNode> children = getExpressionChildren(tree, expression);
      if (children.size() == 2 && isReferenceToLocal(children.get(0), target)) {
        if (firstChildOfType(tree, expression, JavaTokenType.EQ) == null) {
          // compound assignment always produces non-null
          return ReturnValue.NOT_NULL;
        }
        return getExpressionValue(children.get(1));
      }
    }
    if (isAssignedInside(expression, target)) {
      return ReturnValue.UNKNOWN;
    }
    if (isDereferencedInside(expression, target)) {
      return ReturnValue.NOT_NULL;
    }
    return null;
  }
@Nullable
  private ReturnValue findValueInExpression(LighterASTNode expression, LighterASTNode target)