-
-
Save controlflow/70af3a10a3265dffea0dfb3fa53d82ec to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
return literal.ConstantValue.Value is string value && names.Contains(value); | |
} | |
var literalExpression = element as ICSharpLiteralExpression; | |
if (literalExpression != null) | |
{ | |
if (!IsStringLiteralExpression(literalExpression)) return false; | |
var outerArgument = CSharpArgumentNavigator.GetByValue(GetContainingConcatenationExpression(literalExpression)); | |
var attribute = AttributeNavigator.GetByArgument(outerArgument); | |
if (attribute == null) return false; | |
return literalExpression.ConstantValue.Value is string value && names.HasAnyNameIn(value); | |
} | |
var assignmentExpression = element as IAssignmentExpression; | |
if (assignmentExpression != null) | |
{ | |
var literal = assignmentExpression.Source as ICSharpLiteralExpression; | |
if (literal == null) return false; | |
if (!IsStringLiteralExpression(literal)) return false; | |
return literal.ConstantValue.Value is string value && names.Contains(value); | |
} | |
return false; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public bool HasReference(ITreeNode element, IReferenceNameContainer names) | |
{ | |
switch (element) | |
{ | |
case ICSharpArgument argument: | |
{ | |
var literal = argument.Value.GetOperandThroughParenthesis() as ICSharpLiteralExpression; | |
if (literal == null) return false; | |
if (!IsStringLiteralExpression(literal)) return false; | |
return literal.ConstantValue.Value is string value && names.Contains(value); | |
} | |
case ICSharpLiteralExpression literalExpression when !IsStringLiteralExpression(literalExpression): | |
return false; | |
case ICSharpLiteralExpression literalExpression: | |
{ | |
var outerArgument = CSharpArgumentNavigator.GetByValue(GetContainingConcatenationExpression(literalExpression)); | |
var attribute = AttributeNavigator.GetByArgument(outerArgument); | |
if (attribute == null) return false; | |
return literalExpression.ConstantValue.Value is string value && names.HasAnyNameIn(value); | |
} | |
case IAssignmentExpression assignmentExpression: | |
{ | |
var literal = assignmentExpression.Source as ICSharpLiteralExpression; | |
if (literal == null) return false; | |
if (!IsStringLiteralExpression(literal)) return false; | |
return literal.ConstantValue.Value is string value && names.Contains(value); | |
} | |
default: | |
return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment