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

Commit 7b1a37f

Browse files
committed
Use reflection to clone UsageModel.
1 parent 1ef04a4 commit 7b1a37f

File tree

1 file changed

+20
-34
lines changed

1 file changed

+20
-34
lines changed
Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Reflection;
23

34
namespace GitHub.Models
45
{
@@ -39,41 +40,26 @@ public class UsageModel
3940

4041
public UsageModel Clone(bool includeWeekly, bool includeMonthly)
4142
{
42-
return new UsageModel
43+
var result = new UsageModel();
44+
var properties = result.GetType().GetRuntimeProperties();
45+
46+
foreach (var property in properties)
4347
{
44-
IsGitHubUser = IsGitHubUser,
45-
IsEnterpriseUser = IsEnterpriseUser,
46-
AppVersion = AppVersion,
47-
VSVersion = VSVersion,
48-
Lang = Lang,
49-
NumberOfStartups = NumberOfStartups,
50-
NumberOfStartupsWeek = includeWeekly ? NumberOfStartupsWeek : 0,
51-
NumberOfStartupsMonth = includeMonthly ? NumberOfStartupsMonth : 0,
52-
NumberOfUpstreamPullRequests = NumberOfUpstreamPullRequests,
53-
NumberOfClones = NumberOfClones,
54-
NumberOfReposCreated = NumberOfReposCreated,
55-
NumberOfReposPublished = NumberOfReposPublished,
56-
NumberOfGists = NumberOfGists,
57-
NumberOfOpenInGitHub = NumberOfOpenInGitHub,
58-
NumberOfLinkToGitHub = NumberOfLinkToGitHub,
59-
NumberOfLogins = NumberOfLogins,
60-
NumberOfPullRequestsOpened = NumberOfPullRequestsOpened,
61-
NumberOfLocalPullRequestsCheckedOut = NumberOfLocalPullRequestsCheckedOut,
62-
NumberOfLocalPullRequestPulls = NumberOfLocalPullRequestPulls,
63-
NumberOfLocalPullRequestPushes = NumberOfLocalPullRequestPushes,
64-
NumberOfForkPullRequestsCheckedOut = NumberOfForkPullRequestsCheckedOut,
65-
NumberOfForkPullRequestPulls = NumberOfForkPullRequestPulls,
66-
NumberOfForkPullRequestPushes = NumberOfForkPullRequestPushes,
67-
NumberOfWelcomeDocsClicks = NumberOfWelcomeDocsClicks,
68-
NumberOfWelcomeTrainingClicks = NumberOfWelcomeTrainingClicks,
69-
NumberOfGitHubPaneHelpClicks = NumberOfGitHubPaneHelpClicks,
70-
NumberOfPRDetailsViewChanges = NumberOfPRDetailsViewChanges,
71-
NumberOfPRDetailsViewFile = NumberOfPRDetailsViewFile,
72-
NumberOfPRDetailsCompareWithSolution = NumberOfPRDetailsCompareWithSolution,
73-
NumberOfPRDetailsOpenFileInSolution = NumberOfPRDetailsOpenFileInSolution,
74-
NumberOfPRReviewDiffViewInlineCommentOpen = NumberOfPRReviewDiffViewInlineCommentOpen,
75-
NumberOfPRReviewDiffViewInlineCommentPost = NumberOfPRReviewDiffViewInlineCommentPost,
76-
};
48+
var cloneValue = property.PropertyType == typeof(int);
49+
50+
if (property.Name == nameof(result.NumberOfStartupsWeek))
51+
cloneValue = includeWeekly;
52+
else if (property.Name == nameof(result.NumberOfStartupsMonth))
53+
cloneValue = includeMonthly;
54+
55+
if (cloneValue)
56+
{
57+
var value = property.GetValue(this);
58+
property.SetValue(result, value);
59+
}
60+
}
61+
62+
return result;
7763
}
7864
}
7965
}

0 commit comments

Comments
 (0)