Skip to content

Instantly share code, notes, and snippets.

View controlflow's full-sized avatar

Alexander Shvedov controlflow

View GitHub Profile
private static bool CheckHasValidRefOperands(
[NotNull] IConditionalTernaryExpression expression,
[NotNull] ICSharpExpression thenResult,
[NotNull] ICSharpExpression elseResult,
[NotNull] IHighlightingConsumer consumer)
{
var thenRefExpression = thenResult as IRefExpression;
var elseRefExpression = elseResult as IRefExpression;
if (elseRefExpression != null && thenRefExpression == null)
[CanBeNull]
private static ITreeNode GetHighlightingNodeFromExpressionStatement([NotNull] IExpressionStatement statement)
{
var expression = statement.Expression;
while (expression != null)
{
var reference = expression as IReferenceExpression;
if (reference != null)
{
private void CheckRefConditionalIssues(
[NotNull] IConditionalTernaryExpression expression,
[NotNull] ICSharpExpression thenResult,
[NotNull] ICSharpExpression elseResult,
[NotNull] IHighlightingConsumer consumer)
{
var thenRefExpression = thenResult as IRefExpression;
var elseRefExpression = elseResult as IRefExpression;
var condition = expression.ConditionOperand;
if (condition == null) return;
var thenResult = expression.ThenResult;
if (thenResult == null) return;
var elseResult = expression.ElseResult;
if (elseResult == null) return;
// ...
[NotNull, Pure]
public static string Present(this TypeKind kind) {
switch (kind) {
case TypeKind.StaticClass: return "S";
case TypeKind.AbstractClass: return "A";
case TypeKind.Interface: return "I";
case TypeKind.Enumeration: return "E";
case TypeKind.ValueType: return "V";
default: return "C";
}
public RangeKind RangeKind
{
get
{
var hasStartIndex = LeftOperand != null;
var hasEndIndex = RightOperand != null;
if (hasStartIndex)
{
return hasEndIndex ? RangeKind.FromStartToEnd : RangeKind.FromStart;
public bool HasReference(ITreeNode element, IReferenceNameContainer names)
{
var argument = element as ICSharpArgument;
if (argument != null)
{
var literal = argument.Value.GetOperandThroughParenthesis() as ICSharpLiteralExpression;
if (literal == null) return false;
if (!IsStringLiteralExpression(literal)) return false;
switch (presentation[index])
{
case '\\':
case '\n':
return false;
case '\"':
if (inCharacterLiteral)
{
valueBuilder.Append(presentation[index]);
var unaryExpression = selector.Body as UnaryExpression;
var binaryExpression = unaryExpression == null ? null : unaryExpression.Operand as BinaryExpression;
// vs.
var unaryExpression = selector.Body as UnaryExpression;
var binaryExpression = unaryExpression?.Operand as BinaryExpression;
// vs.
private static BodyKind InspectStatement([CanBeNull] ICSharpStatement statement) {
var ifStatement = statement as IIfStatement;
if (ifStatement != null) {
var thenResult = InspectStatement(ifStatement.Then);
if (thenResult == BodyKind.HasBreakOrGotoCase) return thenResult;
var elseResult = InspectStatement(ifStatement.Else);
if (elseResult == BodyKind.HasBreakOrGotoCase) return elseResult;
if (thenResult == BodyKind.ReturnAtEnd && elseResult == BodyKind.ReturnAtEnd)