ReturnValue (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; }