Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 2380135

Browse files
committed
Go back to using autoprops. Remove unused code in SimpleJson.
1 parent a64321f commit 2380135

File tree

4 files changed

+62
-1584
lines changed

4 files changed

+62
-1584
lines changed

src/GitHub.Exports/Models/UsageModel.cs

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,43 @@
1-
using System;
2-
using System.Reflection;
3-
4-
namespace GitHub.Models
1+
namespace GitHub.Models
52
{
63
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Justification = "It'll use reflection by default and we're fine with that")]
74
public struct UsageModel
85
{
9-
public bool IsGitHubUser;
10-
public bool IsEnterpriseUser;
11-
public string AppVersion;
12-
public string VSVersion;
13-
public string Lang;
14-
public int NumberOfStartups;
15-
public int NumberOfStartupsWeek;
16-
public int NumberOfStartupsMonth;
17-
public int NumberOfUpstreamPullRequests;
18-
public int NumberOfClones;
19-
public int NumberOfReposCreated;
20-
public int NumberOfReposPublished;
21-
public int NumberOfGists;
22-
public int NumberOfOpenInGitHub;
23-
public int NumberOfLinkToGitHub;
24-
public int NumberOfLogins;
25-
public int NumberOfOAuthLogins;
26-
public int NumberOfTokenLogins;
27-
public int NumberOfPullRequestsOpened;
28-
public int NumberOfLocalPullRequestsCheckedOut;
29-
public int NumberOfLocalPullRequestPulls;
30-
public int NumberOfLocalPullRequestPushes;
31-
public int NumberOfForkPullRequestsCheckedOut;
32-
public int NumberOfForkPullRequestPulls;
33-
public int NumberOfForkPullRequestPushes;
34-
public int NumberOfWelcomeDocsClicks;
35-
public int NumberOfWelcomeTrainingClicks;
36-
public int NumberOfGitHubPaneHelpClicks;
37-
public int NumberOfPRDetailsViewChanges;
38-
public int NumberOfPRDetailsViewFile;
39-
public int NumberOfPRDetailsCompareWithSolution;
40-
public int NumberOfPRDetailsOpenFileInSolution;
41-
public int NumberOfPRDetailsNavigateToEditor;
42-
public int NumberOfPRReviewDiffViewInlineCommentOpen;
43-
public int NumberOfPRReviewDiffViewInlineCommentPost;
6+
public bool IsGitHubUser { get; set; }
7+
public bool IsEnterpriseUser { get; set; }
8+
public string AppVersion { get; set; }
9+
public string VSVersion { get; set; }
10+
public string Lang { get; set; }
11+
public int NumberOfStartups { get; set; }
12+
public int NumberOfStartupsWeek { get; set; }
13+
public int NumberOfStartupsMonth { get; set; }
14+
public int NumberOfUpstreamPullRequests { get; set; }
15+
public int NumberOfClones { get; set; }
16+
public int NumberOfReposCreated { get; set; }
17+
public int NumberOfReposPublished { get; set; }
18+
public int NumberOfGists { get; set; }
19+
public int NumberOfOpenInGitHub { get; set; }
20+
public int NumberOfLinkToGitHub { get; set; }
21+
public int NumberOfLogins { get; set; }
22+
public int NumberOfOAuthLogins { get; set; }
23+
public int NumberOfTokenLogins { get; set; }
24+
public int NumberOfPullRequestsOpened { get; set; }
25+
public int NumberOfLocalPullRequestsCheckedOut { get; set; }
26+
public int NumberOfLocalPullRequestPulls { get; set; }
27+
public int NumberOfLocalPullRequestPushes { get; set; }
28+
public int NumberOfForkPullRequestsCheckedOut { get; set; }
29+
public int NumberOfForkPullRequestPulls { get; set; }
30+
public int NumberOfForkPullRequestPushes { get; set; }
31+
public int NumberOfWelcomeDocsClicks { get; set; }
32+
public int NumberOfWelcomeTrainingClicks { get; set; }
33+
public int NumberOfGitHubPaneHelpClicks { get; set; }
34+
public int NumberOfPRDetailsViewChanges { get; set; }
35+
public int NumberOfPRDetailsViewFile { get; set; }
36+
public int NumberOfPRDetailsCompareWithSolution { get; set; }
37+
public int NumberOfPRDetailsOpenFileInSolution { get; set; }
38+
public int NumberOfPRDetailsNavigateToEditor { get; set; }
39+
public int NumberOfPRReviewDiffViewInlineCommentOpen { get; set; }
40+
public int NumberOfPRReviewDiffViewInlineCommentPost { get; set; }
4441

4542
public UsageModel Clone(bool includeWeekly, bool includeMonthly)
4643
{

src/GitHub.VisualStudio/Services/UsageTracker.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ public async Task IncrementCounter(Expression<Func<UsageModel, int>> counter)
4646
var usage = await LoadUsage();
4747
// because Model is a struct, it needs to be boxed in order for reflection to work
4848
object model = usage.Model;
49-
var field = (MemberExpression)counter.Body;
50-
var fieldInfo = (FieldInfo)field.Member;
51-
var value = (int)fieldInfo.GetValue(model);
52-
fieldInfo.SetValue(model, value + 1);
49+
var property = (MemberExpression)counter.Body;
50+
var propertyInfo = (PropertyInfo)property.Member;
51+
var value = (int)propertyInfo.GetValue(model);
52+
propertyInfo.SetValue(model, value + 1);
5353
usage.Model = (UsageModel)model;
5454
await service.WriteLocalData(usage);
5555
}

test/UnitTests/GitHub.VisualStudio/Services/UsageTrackerTests.cs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using System.Linq;
1212
using System.Globalization;
1313
using GitHub.Reflection;
14+
using GitHub;
1415

1516
namespace MetricsTests
1617
{
@@ -230,10 +231,10 @@ public async Task UsageServiceWritesAllTheDataCorrectly()
230231
expected.NumberOfStartupsWeek++;
231232
expected.NumberOfStartupsMonth++;
232233

233-
UsageData result = usageService.ReceivedCalls().First(x => x.GetMethodInfo().Name == "WriteLocalData").GetArguments()[0] as UsageData;
234+
var result = (usageService.ReceivedCalls().First(x => x.GetMethodInfo().Name == "WriteLocalData").GetArguments()[0] as UsageData).Model;
234235
CollectionAssert.AreEquivalent(
235-
ReflectionUtils.GetFields(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
236-
ReflectionUtils.GetFields(result.Model.GetType()).Select(x => new { x.Name, Value = x.GetValue(result.Model) }));
236+
ReflectionUtils.GetProperties(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
237+
ReflectionUtils.GetProperties(result.GetType()).Select(x => new { x.Name, Value = x.GetValue(result) }));
237238
}
238239

239240
[Test]
@@ -258,8 +259,8 @@ public async Task MetricserviceSendsDailyData()
258259
expected.NumberOfStartups++;
259260

260261
CollectionAssert.AreEquivalent(
261-
ReflectionUtils.GetFields(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
262-
ReflectionUtils.GetFields(result.GetType()).Select(x => new { x.Name, Value = x.GetValue(result) }));
262+
ReflectionUtils.GetProperties(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
263+
ReflectionUtils.GetProperties(result.GetType()).Select(x => new { x.Name, Value = x.GetValue(result) }));
263264
}
264265

265266
[Test]
@@ -285,8 +286,8 @@ public async Task MetricserviceSendsWeeklyData()
285286
expected.NumberOfStartupsWeek++;
286287

287288
CollectionAssert.AreEquivalent(
288-
ReflectionUtils.GetFields(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
289-
ReflectionUtils.GetFields(result.GetType()).Select(x => new { x.Name, Value = x.GetValue(result) }));
289+
ReflectionUtils.GetProperties(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
290+
ReflectionUtils.GetProperties(result.GetType()).Select(x => new { x.Name, Value = x.GetValue(result) }));
290291
}
291292

292293
[Test]
@@ -313,34 +314,34 @@ public async Task MetricserviceSendsMonthlyData()
313314
expected.NumberOfStartupsMonth++;
314315

315316
CollectionAssert.AreEquivalent(
316-
ReflectionUtils.GetFields(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
317-
ReflectionUtils.GetFields(result.GetType()).Select(x => new { x.Name, Value = x.GetValue(result) }));
317+
ReflectionUtils.GetProperties(expected.GetType()).Select(x => new { x.Name, Value = x.GetValue(expected) }),
318+
ReflectionUtils.GetProperties(result.GetType()).Select(x => new { x.Name, Value = x.GetValue(result) }));
318319
}
319320

320321
private static UsageModel CreateUsageModel()
321322
{
322323
var count = 1;
323324
// UsageModel is a struct so we have to force box it to be able to set values on it
324325
object model = new UsageModel();
325-
var fields = model.GetType().GetRuntimeFields();
326-
foreach (var field in fields)
326+
var props = ReflectionUtils.GetProperties(model.GetType());
327+
foreach (var prop in props)
327328
{
328-
if (field.FieldType == typeof(int))
329+
if (prop.PropertyType == typeof(int))
329330
{
330-
field.SetValue(model, count++);
331+
prop.SetValue(model, count++);
331332
}
332-
else if (field.FieldType == typeof(string))
333+
else if (prop.PropertyType == typeof(string))
333334
{
334-
if (field.Name == "Lang")
335-
field.SetValue(model, CultureInfo.InstalledUICulture.IetfLanguageTag);
336-
else if (field.Name == "AppVersion")
337-
field.SetValue(model, AssemblyVersionInformation.Version);
335+
if (prop.Name == "Lang")
336+
prop.SetValue(model, CultureInfo.InstalledUICulture.IetfLanguageTag);
337+
else if (prop.Name == "AppVersion")
338+
prop.SetValue(model, AssemblyVersionInformation.Version);
338339
else
339-
field.SetValue(model, $"string {count++}");
340+
prop.SetValue(model, $"string {count++}");
340341
}
341-
else if (field.FieldType == typeof(bool))
342+
else if (prop.PropertyType == typeof(bool))
342343
{
343-
field.SetValue(model, true);
344+
prop.SetValue(model, true);
344345
}
345346
else
346347
Assert.Fail("Unknown field type in UsageModel. Fix this test to support it");

0 commit comments

Comments
 (0)