Skip to content

Commit 3e18a8a

Browse files
committed
Added ruleset logic to the DepthSolver. Added DepthSolver to Custom Expressions
1 parent ee12ea5 commit 3e18a8a

File tree

14 files changed

+300
-181
lines changed

14 files changed

+300
-181
lines changed

ObjectExporter.Core/ExportGenerator.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public ExportGenerator(IEnumerable<ExpressionWithSource> expressionsWithSources,
3131
_expressionsWithSources = expressionsWithSources;
3232
_maxDepth = exportParamaters.MaxDepth;
3333

34-
3534
List<IRuleSet> ruleSets = new List<IRuleSet>();
3635
if (exportParamaters.ExcludePropertiesNotInClass)
3736
{

ObjectExporter.Core/Models/ObjectDepthFinder.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Threading;
66
using System.Threading.Tasks;
77
using EnvDTE;
8+
using ObjectExporter.Core.Models.RuleSets;
89
using ObjectExporter.Core.Templates;
910

1011
namespace ObjectExporter.Core.Models
@@ -13,10 +14,12 @@ public class ObjectDepthFinder
1314
{
1415
private int _maxDepth = 0;
1516

17+
private readonly RuleSetValidator _ruleSetValidator;
1618
private readonly uint _cutoff;
1719

18-
public ObjectDepthFinder(uint cutoff = 100)
20+
public ObjectDepthFinder(RuleSetValidator ruleSetValidator, uint cutoff = 100)
1921
{
22+
_ruleSetValidator = ruleSetValidator;
2023
_cutoff = cutoff;
2124
}
2225

@@ -29,12 +32,25 @@ public int GetMaximumObjectDepth(Expression expression)
2932
public Task<int> GetMaximumObjectDepthAsync(Expression expression, CancellationToken token)
3033
{
3134
_maxDepth = 0;
35+
3236
return Task.Run(() => GetMaxObjectDepth(expression, 0), token);
3337
}
3438

3539
private int GetMaxObjectDepth(Expression expression, int currentDepth)
3640
{
37-
string expressionType = GeneratorHelper.StripObjectReference(expression.Type);
41+
string expressionType;
42+
43+
if (currentDepth == 0) //if is root element
44+
{
45+
//Frameworks can add theType { dynamicType} - strip out the {dynamic type}
46+
expressionType = GeneratorHelper.StripChildReference(expression.Type);
47+
}
48+
else
49+
{
50+
//members of objects have a type of: object { theType } - strip out object { }
51+
expressionType = GeneratorHelper.StripObjectReference(expression.Type);
52+
}
53+
3854

3955
//No members and can't be resolved to a single type (equivalent of having no members)
4056
if (expression.DataMembers.Count > 0 && GeneratorHelper.IsSerializable(expression.Name) &&
@@ -60,7 +76,12 @@ private int GetMaxObjectDepth(Expression expression, int currentDepth)
6076
_maxDepth = currentDepth;
6177
}
6278

63-
GetMaxObjectDepth(currentMember, currentDepth + 1);
79+
bool isValid = _ruleSetValidator.ValidateAllSubRules(expressionType, currentMember.Name);
80+
81+
if (isValid)
82+
{
83+
GetMaxObjectDepth(currentMember, currentDepth + 1);
84+
}
6485
}
6586
}
6687
}

ObjectExporter.Core/Templates/CSharpGenerator.cs

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,13 @@ public virtual string TransformText()
6767

6868
bool isFirstElement = true;
6969

70-
public void ExportMembers(Expression expression, int recursionLevel, bool isLast)
70+
public void ExportMembers(Expression expression, int currentDepth, bool isLast)
7171
{
7272
//resolved reserved keywords such as class, this becomes @class.
7373
string expressionName = GeneratorHelper.ResolveReservedNames(expression.Name);
7474

7575
string expressionType;
76-
if(isFirstElement)
76+
if(isFirstElement) //TODO: can probably replace isFirstElement with currentDepth = 0
7777
{
7878
//Frameworks can add theType { dynamicType} - strip out the {dynamic type}
7979
expressionType = GeneratorHelper.StripChildReference(expression.Type);
@@ -84,8 +84,6 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
8484
expressionType = GeneratorHelper.StripObjectReference(expression.Type);
8585
}
8686

87-
88-
8987
if(!GeneratorHelper.IsSerializable(expressionName))
9088
{
9189
return;
@@ -101,14 +99,14 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
10199
#line default
102100
#line hidden
103101

104-
#line 52 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
102+
#line 50 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
105103
this.Write(this.ToStringHelper.ToStringWithCulture(GetSingleTypeValue(expression) + GeneratorHelper.WriteCommaIfNotLast(isLast)));
106104

107105

108106
#line default
109107
#line hidden
110108

111-
#line 52 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
109+
#line 50 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
112110

113111
}
114112
else
@@ -118,28 +116,28 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
118116
#line default
119117
#line hidden
120118

121-
#line 56 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
119+
#line 54 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
122120
this.Write(this.ToStringHelper.ToStringWithCulture(expressionName));
123121

124122

125123
#line default
126124
#line hidden
127125

128-
#line 56 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
126+
#line 54 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
129127
this.Write(" = ");
130128

131129

132130
#line default
133131
#line hidden
134132

135-
#line 56 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
133+
#line 54 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
136134
this.Write(this.ToStringHelper.ToStringWithCulture(GetSingleTypeValue(expression) + GeneratorHelper.WriteCommaIfNotLast(isLast)));
137135

138136

139137
#line default
140138
#line hidden
141139

142-
#line 56 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
140+
#line 54 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
143141

144142
}
145143
}
@@ -153,14 +151,14 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
153151
#line default
154152
#line hidden
155153

156-
#line 64 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
154+
#line 62 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
157155
this.Write(this.ToStringHelper.ToStringWithCulture(expression.Value + GeneratorHelper.WriteCommaIfNotLast(isLast)));
158156

159157

160158
#line default
161159
#line hidden
162160

163-
#line 64 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
161+
#line 62 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
164162

165163
}
166164
else
@@ -170,32 +168,32 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
170168
#line default
171169
#line hidden
172170

173-
#line 68 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
171+
#line 66 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
174172
this.Write(this.ToStringHelper.ToStringWithCulture(expressionName));
175173

176174

177175
#line default
178176
#line hidden
179177

180-
#line 68 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
178+
#line 66 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
181179
this.Write(" = ");
182180

183181

184182
#line default
185183
#line hidden
186184

187-
#line 68 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
185+
#line 66 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
188186
this.Write(this.ToStringHelper.ToStringWithCulture(expression.Value + GeneratorHelper.WriteCommaIfNotLast(isLast)));
189187

190188

191189
#line default
192190
#line hidden
193191

194-
#line 68 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
192+
#line 66 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
195193

196194
}
197195
}
198-
else if (expression.DataMembers.Count > 0 && recursionLevel <= maxDepth)
196+
else if (expression.DataMembers.Count > 0 && currentDepth <= maxDepth)
199197
{
200198
//used for the very first object (top most) to be completed as var objName = new objType, without a space in between.
201199
if(isFirstElement)
@@ -214,42 +212,42 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
214212
#line default
215213
#line hidden
216214

217-
#line 85 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
215+
#line 83 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
218216
this.Write(this.ToStringHelper.ToStringWithCulture(expressionName));
219217

220218

221219
#line default
222220
#line hidden
223221

224-
#line 85 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
222+
#line 83 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
225223
this.Write(" = new ");
226224

227225

228226
#line default
229227
#line hidden
230228

231-
#line 85 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
229+
#line 83 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
232230
this.Write(this.ToStringHelper.ToStringWithCulture(expressionType));
233231

234232

235233
#line default
236234
#line hidden
237235

238-
#line 85 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
236+
#line 83 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
239237

240238
WriteLine("");
241239

242240
#line default
243241
#line hidden
244242

245-
#line 86 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
243+
#line 84 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
246244
this.Write("{");
247245

248246

249247
#line default
250248
#line hidden
251249

252-
#line 86 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
250+
#line 84 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
253251

254252
}
255253
else
@@ -259,35 +257,35 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
259257
#line default
260258
#line hidden
261259

262-
#line 90 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
260+
#line 88 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
263261
this.Write("new ");
264262

265263

266264
#line default
267265
#line hidden
268266

269-
#line 90 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
267+
#line 88 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
270268
this.Write(this.ToStringHelper.ToStringWithCulture(expressionType));
271269

272270

273271
#line default
274272
#line hidden
275273

276-
#line 90 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
274+
#line 88 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
277275

278276
WriteLine("");
279277

280278
#line default
281279
#line hidden
282280

283-
#line 91 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
281+
#line 89 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
284282
this.Write("{");
285283

286284

287285
#line default
288286
#line hidden
289287

290-
#line 91 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
288+
#line 89 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
291289

292290
}
293291

@@ -297,7 +295,7 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
297295
{
298296
PushIndent("\t");
299297
bool isLastItem = cleanedExpressionMembers.IsLast(exp);
300-
ExportMembers(exp, recursionLevel + 1, isLastItem);
298+
ExportMembers(exp, currentDepth + 1, isLastItem);
301299
PopIndent();
302300
}
303301

@@ -307,28 +305,28 @@ public void ExportMembers(Expression expression, int recursionLevel, bool isLast
307305
#line default
308306
#line hidden
309307

310-
#line 105 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
308+
#line 103 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
311309
this.Write("}");
312310

313311

314312
#line default
315313
#line hidden
316314

317-
#line 105 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
315+
#line 103 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
318316

319317

320318

321319
#line default
322320
#line hidden
323321

324-
#line 106 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
322+
#line 104 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
325323
this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorHelper.WriteCommaIfNotLast(isLast)));
326324

327325

328326
#line default
329327
#line hidden
330328

331-
#line 106 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
329+
#line 104 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\CSharpGenerator.tt"
332330

333331
}
334332
}

ObjectExporter.Core/Templates/CSharpGenerator.tt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
<#+
2121
bool isFirstElement = true;
2222

23-
public void ExportMembers(Expression expression, int recursionLevel, bool isLast)
23+
public void ExportMembers(Expression expression, int currentDepth, bool isLast)
2424
{
2525
//resolved reserved keywords such as class, this becomes @class.
2626
string expressionName = GeneratorHelper.ResolveReservedNames(expression.Name);
2727

2828
string expressionType;
29-
if(isFirstElement)
29+
if(isFirstElement) //TODO: can probably replace isFirstElement with currentDepth = 0
3030
{
3131
//Frameworks can add theType { dynamicType} - strip out the {dynamic type}
3232
expressionType = GeneratorHelper.StripChildReference(expression.Type);
@@ -37,8 +37,6 @@
3737
expressionType = GeneratorHelper.StripObjectReference(expression.Type);
3838
}
3939

40-
41-
4240
if(!GeneratorHelper.IsSerializable(expressionName))
4341
{
4442
return;
@@ -68,7 +66,7 @@
6866
#><#= expressionName #> = <#= expression.Value + GeneratorHelper.WriteCommaIfNotLast(isLast) #><#+
6967
}
7068
}
71-
else if (expression.DataMembers.Count > 0 && recursionLevel <= maxDepth)
69+
else if (expression.DataMembers.Count > 0 && currentDepth <= maxDepth)
7270
{
7371
//used for the very first object (top most) to be completed as var objName = new objType, without a space in between.
7472
if(isFirstElement)
@@ -97,7 +95,7 @@
9795
{
9896
PushIndent("\t");
9997
bool isLastItem = cleanedExpressionMembers.IsLast(exp);
100-
ExportMembers(exp, recursionLevel + 1, isLastItem);
98+
ExportMembers(exp, currentDepth + 1, isLastItem);
10199
PopIndent();
102100
}
103101

ObjectExporter.Core/Templates/GeneratorHelper.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ public static List<Expression> SanitizeExpressions(Expression expression, RuleSe
169169
{
170170
cleanedExpressionMembers.Add(currentExpression);
171171
}
172-
173172
}
174173
}
175174

0 commit comments

Comments
 (0)