aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als
diff options
context:
space:
mode:
Diffstat (limited to 'Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als')
-rw-r--r--Metrics/Metrics-Calculation/SocialNetwork_plugin/debug/problem.als151
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 @@
1one 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}
6abstract sig util'Object {
7}
8sig type'User'class extends util'Object {
9}
10abstract 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}
15sig 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}
20sig type'Issue'class extends util'Object {
21 pullrequest'reference'Issue : lone type'PullRequest'class,
22 issueevent'reference'Issue : set type'IssueEvent'class
23}
24sig type'PullRequest'class extends util'Object {
25 commit'reference'PullRequest : lone type'Commit'class
26}
27sig type'IssueEvent'class extends util'Object {
28 user'reference'IssueEvent : one type'User'class,
29 action'attribute'IssueEvent : one type'Action'enum
30}
31abstract sig type'Action'enum extends util'Object {
32}
33abstract sig type'Project'class'DefinedPart extends type'Project'class {
34}
35sig type'Project'class'UndefinedPart extends type'Project'class {
36}
37one sig element'SUBSCRIBED'literal'Action extends type'Action'enum {
38}
39one sig element'MENTIONED'literal'Action extends type'Action'enum {
40}
41one sig element'CLOSED'literal'Action extends type'Action'enum {
42}
43one sig element'REFERENCED'literal'Action extends type'Action'enum {
44}
45one sig element'ASSIGNED'literal'Action extends type'Action'enum {
46}
47one sig element'REOPENED'literal'Action extends type'Action'enum {
48}
49one sig element'UNSUBSCRIBED'literal'Action extends type'Action'enum {
50}
51one sig element'MERGED'literal'Action extends type'Action'enum {
52}
53one sig element'HEAD_REF_CLEANED'literal'Action extends type'Action'enum {
54}
55one sig element'HEAD_REF_DELETED'literal'Action extends type'Action'enum {
56}
57one sig element'HEAD_REF_RESTORED'literal'Action extends type'Action'enum {
58}
59one sig element'o'1 extends type'Project'class'DefinedPart {
60}
61pred 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}
64pred pattern'queries'loopInParent [parameter'a: type'Commit'class] {
65 parameter'a->parameter'a in ^ (util'language.AsDeclaration'pattern'queries'directParent)
66}
67pred 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}
70pred 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}
73pred 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}
76pred 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}
79pred 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}
82pred 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}
85pred 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}
88pred 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}
91pred 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}
94pred 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}
97pred 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}
100pred 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}
103pred 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}
106pred 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}
109fact 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}
112fact util'containmentDefinition {
113 util'language.util'contains = issue'reference'Project + (projectMembers'reference'Project + (commits'reference'Project + (pullrequest'reference'Issue + issueevent'reference'Issue)))
114}
115fact 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}
118fact 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}
121fact 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}
124fact 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}
127fact oppositeReference'pullrequest'Commit {
128 pullrequest'reference'Commit = ~ commit'reference'PullRequest
129}
130fact errorpattern'queries'loopInParent {
131 all p0: type'Commit'class { not (pattern'queries'loopInParent [ p0 ]) }
132}
133fact errorpattern'queries'consecutiveClosesWithoutReopen {
134 all p0: type'Issue'class { not (pattern'queries'consecutiveClosesWithoutReopen [ p0 ]) }
135}
136fact errorpattern'queries'consecutiveReopensWithoutClose {
137 all p0: type'Issue'class { not (pattern'queries'consecutiveReopensWithoutClose [ p0 ]) }
138}
139fact errorpattern'queries'consecutiveSubWithoutUnSub {
140 all p0: type'Issue'class, p1: type'User'class { not (pattern'queries'consecutiveSubWithoutUnSub [ p0 , p1 ]) }
141}
142fact errorpattern'queries'consecutiveUnSubWithoutSub {
143 all p0: type'Issue'class, p1: type'User'class { not (pattern'queries'consecutiveUnSubWithoutSub [ p0 , p1 ]) }
144}
145fact errorpattern'queries'noCommitter {
146 all p0: type'Commit'class { not (pattern'queries'noCommitter [ p0 ]) }
147}
148fact errorpattern'queries'noUser {
149 all p0: type'IssueEvent'class { not (pattern'queries'noUser [ p0 ]) }
150}
151run { } for exactly 41 util'Object , 1 Int , exactly 0 String \ No newline at end of file