forked from cqfn/jpeek
-
Notifications
You must be signed in to change notification settings - Fork 2
/
lcom1.eo
62 lines (60 loc) · 3.31 KB
/
lcom1.eo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# lcom1(основное вычисление метрики, передаем количество пустых и непустых) и если непустых больше чем пустых, то 0, иначе разность пустых и непустых)
#
# pairsofmethods было(получили массив всех уникальных пар методов)
#
# rec1(принимает массив пар методов и начальный индекс 0)
# проверяет индекс с длинной массива
# берет первую пару(метод(0) и метод(0+1)), присваивает их в переменные соответственно
# запускает рекурсию для списка атрибутов двух методов(передаем список атрибутов одного и второго и индекс 0), рекурсия возвращает результат 0 или 1 присваиваем переменной paircohesion
# создаем пустой массив и присваиваем переменной mthdscohesion(он содержит массив нулей и единиц в зависимости от cohesion пары методов)
# запускаем рекурсию для следующей пары элементов потому что перечедаем индекс начальный +1+1, то есть перескакиваем на следующую пару методов
#
# rec2(принимает массив атрибутов одного метода(atts1) и массив атрибутов другого(atts2), начальный индекс 0)
# для каждого элемента массива atts2 проверяем, если совпадает имя с текущим atts1 от индекса(начальный 0), то возвращаем 1
# иначе 0
# и запускаем рекурсию для следующего(здесь единственное, я не додумался как сделать так чтобы при первом совпадении рекурсия завершалась и возвращала 1)
# соответственно передаем в повторную рекурсию те же два списка атрибутов и индекс увеличенный на единицу
+package org.jpeek.calculus.eo
+alias org.jpeek.calculus.eo.count
[testClass] > lcom1
[arr index mthdscohesion] > rec1
if. > @
index.geq (arr.length)
mthdscohesion
rec1
arr
(index.add 1)
append.
mthdscohesion
^.rec2 (((arr.get index).fst).atts) (((arr.get index).snd).atts) 0 0
[att1 att2 index result] > rec2
if. > @
index.geq (att1.length)
result
if.
(result.greater 0)
result
rec2
att1
att2
(index.add 1)
reduce.
att2
0
[]
[accum current] > reduce
if. > @
eq.
current.name
(^.^.att1.get (^.^.index)).name
1
accum
rec1 (testClass.methods.pairs) 0 * > subres
count subres 0 > p
count subres 1 > q
if. > @
q.less p
sub.
p
q
0