Skip to content

Commit 06d4110

Browse files
authored
added symbol check when checking for identifier (#728)
* added symbol check * added test case for preference * simplified code for type prioritization
1 parent 0b23f3b commit 06d4110

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/System.Linq.Dynamic.Core/Parser/ExpressionParser.cs

+13-3
Original file line numberDiff line numberDiff line change
@@ -931,10 +931,20 @@ private Expression ParseIdentifier()
931931

932932
var isValidKeyWord = _keywordsHelper.TryGetValue(_textParser.CurrentToken.Text, out var value);
933933

934-
var extraCondition = !_parsingConfig.PrioritizePropertyOrFieldOverTheType ||
935-
(_parsingConfig.PrioritizePropertyOrFieldOverTheType && !(value is Type && _it != null && FindPropertyOrField(_it.Type, _textParser.CurrentToken.Text, false) != null));
934+
935+
bool shouldPrioritizeType = true;
936+
937+
if (_parsingConfig.PrioritizePropertyOrFieldOverTheType && value is Type)
938+
{
939+
bool isPropertyOrField = _it != null && FindPropertyOrField(_it.Type, _textParser.CurrentToken.Text, false) != null;
940+
bool hasSymbol = _symbols.ContainsKey(_textParser.CurrentToken.Text);
941+
if (isPropertyOrField || hasSymbol)
942+
{
943+
shouldPrioritizeType = false;
944+
}
945+
}
936946

937-
if (isValidKeyWord && extraCondition)
947+
if (isValidKeyWord && shouldPrioritizeType)
938948
{
939949
if (value is Type typeValue)
940950
{

test/System.Linq.Dynamic.Core.Tests/Parser/ExpressionParserTests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -331,12 +331,14 @@ public void Parse_NullableShouldReturnNullable(string expression, object resultT
331331
[InlineData("Company.Equals(null, null)", "Equals(null, null)")]
332332
[InlineData("MainCompany.Name", "company.MainCompany.Name")]
333333
[InlineData("Name", "company.Name")]
334+
[InlineData("company.Name","company.Name")]
334335
[InlineData("DateTime", "company.DateTime")]
335336
public void Parse_When_PrioritizePropertyOrFieldOverTheType_IsTrue(string expression, string result)
336337
{
337338
// Arrange
338339
var config = new ParsingConfig
339340
{
341+
IsCaseSensitive = true,
340342
CustomTypeProvider = _dynamicTypeProviderMock.Object
341343
};
342344
ParameterExpression[] parameters = { ParameterExpressionHelper.CreateParameterExpression(typeof(Company), "company") };

0 commit comments

Comments
 (0)