Skip to content

Commit d5d2f53

Browse files
committed
Code that determines which expression object type can have only a single ExpressionType
1 parent f8f6c6c commit d5d2f53

3 files changed

Lines changed: 60 additions & 15 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Linq.Expressions;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using ExpressionToString.Util;
8+
9+
namespace Tests.DataGenerator {
10+
public class NodeTypeExpressionTypeMapper : ExpressionVisitor {
11+
public static HashSet<(Type, ExpressionType)> maps = new HashSet<(Type, ExpressionType)>();
12+
public override Expression Visit(Expression node) {
13+
if (node != null) {
14+
maps.Add((node.GetType().BaseTypes(false, true).First(x => x.IsPublic && !x.IsInterface), node.NodeType));
15+
}
16+
return base.Visit(node);
17+
}
18+
19+
public object VisitExt(object node) {
20+
switch (node) {
21+
case Expression expr:
22+
return Visit(expr);
23+
case MemberBinding mbind:
24+
return VisitMemberBinding(mbind);
25+
case ElementInit init:
26+
return VisitElementInit(init);
27+
case SwitchCase switchCase:
28+
return VisitSwitchCase(switchCase);
29+
case CatchBlock catchBlock:
30+
return VisitCatchBlock(catchBlock);
31+
case LabelTarget labelTarget:
32+
return VisitLabelTarget(labelTarget);
33+
default:
34+
throw new NotImplementedException();
35+
}
36+
}
37+
}
38+
}

Tests.DataGenerator/Program.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ static void Main(string[] args) {
3434
""
3535
});
3636

37+
//var toHide = NodeTypeExpressionTypeMapper.maps
38+
// .Where(x => !x.Item1.IsGenericType)
39+
// .GroupBy(x => x.Item1, (key, grp) =>(key, grp.Count()))
40+
// .Where(x => x.Item2 == 1)
41+
// .ToList();
42+
3743
File.WriteAllLines("generated test data.txt", Runner.lines);
3844
}
3945
}

Tests.DataGenerator/Runner.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,41 +11,42 @@
1111
namespace Tests.DataGenerator {
1212
public static class Runner {
1313
public static int total = 0;
14-
private static int counter = 0;
14+
private static string formatter = ObjectNotation;
15+
private static string language = VisualBasic;
1516
public static readonly List<string> lines = new List<string>();
17+
//public static NodeTypeExpressionTypeMapper visitor = new NodeTypeExpressionTypeMapper();
1618
public static void WriteData(object o, string testData) {
1719
string toWrite;
1820
switch (o) {
1921
case Expression expr:
20-
toWrite = expr.ToString(FactoryMethods);
22+
toWrite = expr.ToString(formatter, language);
2123
break;
2224
case MemberBinding mbind:
23-
toWrite = mbind.ToString(FactoryMethods);
25+
toWrite = mbind.ToString(formatter, language);
2426
break;
2527
case ElementInit init:
26-
toWrite = init.ToString(FactoryMethods);
28+
toWrite = init.ToString(formatter, language);
2729
break;
2830
case SwitchCase switchCase:
29-
toWrite = switchCase.ToString(FactoryMethods);
31+
toWrite = switchCase.ToString(formatter, language);
3032
break;
3133
case CatchBlock catchBlock:
32-
toWrite = catchBlock.ToString(FactoryMethods);
34+
toWrite = catchBlock.ToString(formatter, language);
3335
break;
3436
case LabelTarget labelTarget:
35-
toWrite = labelTarget.ToString(FactoryMethods);
37+
toWrite = labelTarget.ToString(formatter, language);
3638
break;
3739
default:
3840
throw new NotImplementedException();
3941
}
4042

41-
if (testData.IsNullOrWhitespace()) {
42-
counter += 1;
43-
lines.AddRange(new[] {
44-
"\"" + toWrite.Replace("\"", "\"\"") + "\"",
45-
$"{TestMethodName()}",
46-
""
47-
});
48-
}
43+
lines.AddRange(new[] {
44+
"\"" + toWrite.Replace("\"", "\"\"") + "\"",
45+
$"{TestMethodName()}",
46+
""
47+
});
48+
49+
//visitor.VisitExt(o);
4950

5051
string TestMethodName() {
5152
var mi = new StackTrace().GetFrames().Select(x => x.GetMethod()).FirstOrDefault(x => x.DeclaringType.BaseType == typeof(TestsBase));

0 commit comments

Comments
 (0)