diff options
Diffstat (limited to 'Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als')
-rw-r--r-- | Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als b/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als new file mode 100644 index 00000000..dbdb8ba6 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als | |||
@@ -0,0 +1,151 @@ | |||
1 | one sig util'language { | ||
2 | AsDeclaration'pattern'queries'directParent : type'Commit'class->type'Commit'class, | ||
3 | util'root : one type'PullRequest'class + (type'IssueEvent'class + (type'Commit'class + (type'User'class + (type'Project'class + (type'Issue'class + (type'Project'class'DefinedPart + type'Project'class'UndefinedPart)))))), | ||
4 | util'contains : (type'PullRequest'class + (type'IssueEvent'class + (type'Commit'class + (type'User'class + (type'Project'class + (type'Issue'class + (type'Project'class'DefinedPart + type'Project'class'UndefinedPart))))))) lone->set (type'PullRequest'class + (type'IssueEvent'class + (type'Commit'class + (type'User'class + (type'Project'class + (type'Issue'class + (type'Project'class'DefinedPart + type'Project'class'UndefinedPart))))))) | ||
5 | } | ||
6 | abstract sig util'Object { | ||
7 | } | ||
8 | sig type'User'class extends util'Object { | ||
9 | } | ||
10 | abstract sig type'Project'class extends util'Object { | ||
11 | issue'reference'Project : set type'Issue'class, | ||
12 | projectMembers'reference'Project : set type'User'class, | ||
13 | commits'reference'Project : set type'Commit'class | ||
14 | } | ||
15 | sig type'Commit'class extends util'Object { | ||
16 | committer'reference'Commit : one type'User'class, | ||
17 | parents'reference'Commit : set type'Commit'class, | ||
18 | pullrequest'reference'Commit : lone type'PullRequest'class | ||
19 | } | ||
20 | sig type'Issue'class extends util'Object { | ||
21 | pullrequest'reference'Issue : lone type'PullRequest'class, | ||
22 | issueevent'reference'Issue : set type'IssueEvent'class | ||
23 | } | ||
24 | sig type'PullRequest'class extends util'Object { | ||
25 | commit'reference'PullRequest : lone type'Commit'class | ||
26 | } | ||
27 | sig type'IssueEvent'class extends util'Object { | ||
28 | user'reference'IssueEvent : one type'User'class, | ||
29 | action'attribute'IssueEvent : one type'Action'enum | ||
30 | } | ||
31 | abstract sig type'Action'enum extends util'Object { | ||
32 | } | ||
33 | abstract sig type'Project'class'DefinedPart extends type'Project'class { | ||
34 | } | ||
35 | sig type'Project'class'UndefinedPart extends type'Project'class { | ||
36 | } | ||
37 | one sig element'SUBSCRIBED'literal'Action extends type'Action'enum { | ||
38 | } | ||
39 | one sig element'MENTIONED'literal'Action extends type'Action'enum { | ||
40 | } | ||
41 | one sig element'CLOSED'literal'Action extends type'Action'enum { | ||
42 | } | ||
43 | one sig element'REFERENCED'literal'Action extends type'Action'enum { | ||
44 | } | ||
45 | one sig element'ASSIGNED'literal'Action extends type'Action'enum { | ||
46 | } | ||
47 | one sig element'REOPENED'literal'Action extends type'Action'enum { | ||
48 | } | ||
49 | one sig element'UNSUBSCRIBED'literal'Action extends type'Action'enum { | ||
50 | } | ||
51 | one sig element'MERGED'literal'Action extends type'Action'enum { | ||
52 | } | ||
53 | one sig element'HEAD_REF_CLEANED'literal'Action extends type'Action'enum { | ||
54 | } | ||
55 | one sig element'HEAD_REF_DELETED'literal'Action extends type'Action'enum { | ||
56 | } | ||
57 | one sig element'HEAD_REF_RESTORED'literal'Action extends type'Action'enum { | ||
58 | } | ||
59 | one sig element'o'1 extends type'Project'class'DefinedPart { | ||
60 | } | ||
61 | pred pattern'queries'directParent [parameter'a: type'Commit'class, parameter'b: type'Commit'class] { | ||
62 | parameter'b in parameter'a.parents'reference'Commit && parameter'b in type'Commit'class | ||
63 | } | ||
64 | pred pattern'queries'loopInParent [parameter'a: type'Commit'class] { | ||
65 | parameter'a->parameter'a in ^ (util'language.AsDeclaration'pattern'queries'directParent) | ||
66 | } | ||
67 | pred pattern'queries'checkAction [parameter'i: type'Issue'class, parameter'e: type'IssueEvent'class, parameter't: type'Action'enum] { | ||
68 | parameter'e in parameter'i.issueevent'reference'Issue && parameter't in parameter'e.action'attribute'IssueEvent | ||
69 | } | ||
70 | pred pattern'queries'checkUserAction [parameter'i: type'Issue'class, parameter'u: type'User'class, parameter'e: type'IssueEvent'class, parameter't: type'Action'enum] { | ||
71 | parameter'e in parameter'i.issueevent'reference'Issue && (parameter'u in parameter'e.user'reference'IssueEvent && (parameter'u in type'User'class && parameter't in parameter'e.action'attribute'IssueEvent)) | ||
72 | } | ||
73 | pred pattern'queries'isReopen [parameter'i: type'Issue'class, parameter'e: type'IssueEvent'class] { | ||
74 | some variable'a: type'Action'enum { parameter'e in parameter'i.issueevent'reference'Issue && (variable'a in parameter'e.action'attribute'IssueEvent && variable'a = element'REOPENED'literal'Action) } | ||
75 | } | ||
76 | pred pattern'queries'isClose [parameter'i: type'Issue'class, parameter'e: type'IssueEvent'class] { | ||
77 | some variable'a: type'Action'enum { parameter'e in parameter'i.issueevent'reference'Issue && (variable'a in parameter'e.action'attribute'IssueEvent && variable'a = element'CLOSED'literal'Action) } | ||
78 | } | ||
79 | pred pattern'queries'isUnSubscribe [parameter'i: type'Issue'class, parameter'u: type'User'class, parameter'e: type'IssueEvent'class] { | ||
80 | some variable'a: type'Action'enum { parameter'e in parameter'i.issueevent'reference'Issue && (parameter'u in parameter'e.user'reference'IssueEvent && (parameter'u in type'User'class && (variable'a in parameter'e.action'attribute'IssueEvent && variable'a = element'UNSUBSCRIBED'literal'Action))) } | ||
81 | } | ||
82 | pred pattern'queries'isSubscribe [parameter'i: type'Issue'class, parameter'u: type'User'class, parameter'e: type'IssueEvent'class] { | ||
83 | some variable'a: type'Action'enum { parameter'e in parameter'i.issueevent'reference'Issue && (parameter'u in parameter'e.user'reference'IssueEvent && (parameter'u in type'User'class && (variable'a in parameter'e.action'attribute'IssueEvent && variable'a = element'SUBSCRIBED'literal'Action))) } | ||
84 | } | ||
85 | pred pattern'queries'consecutiveClosesWithoutReopen [parameter'i: type'Issue'class] { | ||
86 | some variable'a1: type'IssueEvent'class, variable'a2: type'IssueEvent'class, variable'virtual0: type'Action'enum, variable'virtual1: type'Action'enum { all variable'0: type'IssueEvent'class { variable'virtual0 = element'CLOSED'literal'Action && (pattern'queries'checkAction [ parameter'i , variable'a1 , variable'virtual0 ] && (variable'virtual1 = element'CLOSED'literal'Action && (pattern'queries'checkAction [ parameter'i , variable'a2 , variable'virtual1 ] && (variable'a1 != variable'a2 && not (pattern'queries'isReopen [ parameter'i , variable'0 ]))))) } } | ||
87 | } | ||
88 | pred pattern'queries'consecutiveReopensWithoutClose [parameter'i: type'Issue'class] { | ||
89 | some variable'a1: type'IssueEvent'class, variable'a2: type'IssueEvent'class, variable'virtual0: type'Action'enum, variable'virtual1: type'Action'enum { all variable'0: type'IssueEvent'class { variable'virtual0 = element'REOPENED'literal'Action && (pattern'queries'checkAction [ parameter'i , variable'a1 , variable'virtual0 ] && (variable'virtual1 = element'REOPENED'literal'Action && (pattern'queries'checkAction [ parameter'i , variable'a2 , variable'virtual1 ] && (variable'a1 != variable'a2 && not (pattern'queries'isClose [ parameter'i , variable'0 ]))))) } } | ||
90 | } | ||
91 | pred pattern'queries'consecutiveSubWithoutUnSub [parameter'i: type'Issue'class, parameter'u: type'User'class] { | ||
92 | some variable'a1: type'IssueEvent'class, variable'a2: type'IssueEvent'class, variable'virtual0: type'Action'enum, variable'virtual1: type'Action'enum { all variable'0: type'IssueEvent'class { variable'virtual0 = element'SUBSCRIBED'literal'Action && (pattern'queries'checkUserAction [ parameter'i , parameter'u , variable'a1 , variable'virtual0 ] && (variable'virtual1 = element'SUBSCRIBED'literal'Action && (pattern'queries'checkUserAction [ parameter'i , parameter'u , variable'a2 , variable'virtual1 ] && (variable'a1 != variable'a2 && not (pattern'queries'isUnSubscribe [ parameter'i , parameter'u , variable'0 ]))))) } } | ||
93 | } | ||
94 | pred pattern'queries'consecutiveUnSubWithoutSub [parameter'i: type'Issue'class, parameter'u: type'User'class] { | ||
95 | some variable'a1: type'IssueEvent'class, variable'a2: type'IssueEvent'class, variable'virtual0: type'Action'enum, variable'virtual1: type'Action'enum { all variable'0: type'IssueEvent'class { variable'virtual0 = element'UNSUBSCRIBED'literal'Action && (pattern'queries'checkUserAction [ parameter'i , parameter'u , variable'a1 , variable'virtual0 ] && (variable'virtual1 = element'UNSUBSCRIBED'literal'Action && (pattern'queries'checkUserAction [ parameter'i , parameter'u , variable'a2 , variable'virtual1 ] && (variable'a1 != variable'a2 && not (pattern'queries'isSubscribe [ parameter'i , parameter'u , variable'0 ]))))) } } | ||
96 | } | ||
97 | pred pattern'queries'committer [parameter'c: type'Commit'class, parameter'u: type'User'class] { | ||
98 | parameter'u in parameter'c.committer'reference'Commit && parameter'u in type'User'class | ||
99 | } | ||
100 | pred pattern'queries'eventUser [parameter'e: type'IssueEvent'class, parameter'u: type'User'class] { | ||
101 | parameter'u in parameter'e.user'reference'IssueEvent && parameter'u in type'User'class | ||
102 | } | ||
103 | pred pattern'queries'noCommitter [parameter'c: type'Commit'class] { | ||
104 | all variable'0: type'User'class { parameter'c in type'Commit'class && not (pattern'queries'committer [ parameter'c , variable'0 ]) } | ||
105 | } | ||
106 | pred pattern'queries'noUser [parameter'e: type'IssueEvent'class] { | ||
107 | all variable'0: type'User'class { parameter'e in type'IssueEvent'class && not (pattern'queries'eventUser [ parameter'e , variable'0 ]) } | ||
108 | } | ||
109 | fact EqualsAsDeclaration'pattern'queries'directParent { | ||
110 | all a: type'Commit'class, b: type'Commit'class { pattern'queries'directParent [ a , b ] <=> a->b in util'language.AsDeclaration'pattern'queries'directParent } | ||
111 | } | ||
112 | fact util'containmentDefinition { | ||
113 | util'language.util'contains = issue'reference'Project + (projectMembers'reference'Project + (commits'reference'Project + (pullrequest'reference'Issue + issueevent'reference'Issue))) | ||
114 | } | ||
115 | fact util'noParentForRoot { | ||
116 | no parent: type'PullRequest'class + (type'IssueEvent'class + (type'Commit'class + (type'User'class + (type'Project'class + (type'Issue'class + (type'Project'class'DefinedPart + type'Project'class'UndefinedPart)))))) { parent->(util'language.util'root) in util'language.util'contains } | ||
117 | } | ||
118 | fact util'atLeastOneParent { | ||
119 | all child: type'PullRequest'class + (type'IssueEvent'class + (type'Commit'class + (type'User'class + (type'Project'class + (type'Issue'class + (type'Project'class'DefinedPart + type'Project'class'UndefinedPart)))))) { child = util'language.util'root or (some parent: type'PullRequest'class + (type'IssueEvent'class + (type'Commit'class + (type'User'class + (type'Project'class + (type'Issue'class + (type'Project'class'DefinedPart + type'Project'class'UndefinedPart)))))) { parent->child in util'language.util'contains }) } | ||
120 | } | ||
121 | fact util'noCircularContainment { | ||
122 | no circle: type'PullRequest'class + (type'IssueEvent'class + (type'Commit'class + (type'User'class + (type'Project'class + (type'Issue'class + (type'Project'class'DefinedPart + type'Project'class'UndefinedPart)))))) { circle->circle in ^ (util'language.util'contains) } | ||
123 | } | ||
124 | fact upperMultiplicity'parents'Commit { | ||
125 | all src: type'Commit'class, trg'1: type'Commit'class, trg'2: type'Commit'class, trg'3: type'Commit'class { trg'1 in src.parents'reference'Commit && (trg'2 in src.parents'reference'Commit && trg'3 in src.parents'reference'Commit) => not (trg'1 != trg'2 && (trg'1 != trg'3 && trg'2 != trg'3)) } | ||
126 | } | ||
127 | fact oppositeReference'pullrequest'Commit { | ||
128 | pullrequest'reference'Commit = ~ commit'reference'PullRequest | ||
129 | } | ||
130 | fact errorpattern'queries'loopInParent { | ||
131 | all p0: type'Commit'class { not (pattern'queries'loopInParent [ p0 ]) } | ||
132 | } | ||
133 | fact errorpattern'queries'consecutiveClosesWithoutReopen { | ||
134 | all p0: type'Issue'class { not (pattern'queries'consecutiveClosesWithoutReopen [ p0 ]) } | ||
135 | } | ||
136 | fact errorpattern'queries'consecutiveReopensWithoutClose { | ||
137 | all p0: type'Issue'class { not (pattern'queries'consecutiveReopensWithoutClose [ p0 ]) } | ||
138 | } | ||
139 | fact errorpattern'queries'consecutiveSubWithoutUnSub { | ||
140 | all p0: type'Issue'class, p1: type'User'class { not (pattern'queries'consecutiveSubWithoutUnSub [ p0 , p1 ]) } | ||
141 | } | ||
142 | fact errorpattern'queries'consecutiveUnSubWithoutSub { | ||
143 | all p0: type'Issue'class, p1: type'User'class { not (pattern'queries'consecutiveUnSubWithoutSub [ p0 , p1 ]) } | ||
144 | } | ||
145 | fact errorpattern'queries'noCommitter { | ||
146 | all p0: type'Commit'class { not (pattern'queries'noCommitter [ p0 ]) } | ||
147 | } | ||
148 | fact errorpattern'queries'noUser { | ||
149 | all p0: type'IssueEvent'class { not (pattern'queries'noUser [ p0 ]) } | ||
150 | } | ||
151 | run { } for exactly 41 util'Object , 1 Int , exactly 0 String \ No newline at end of file | ||