Skip to content

Commit 7c714b7

Browse files
committed
Load methods from db
1 parent f5152b4 commit 7c714b7

2 files changed

Lines changed: 79 additions & 42 deletions

File tree

generator/org.svis.generator/src/org/svis/generator/famix/Famix2Famix.xtend

Lines changed: 63 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -132,33 +132,44 @@ class Famix2Famix extends WorkflowComponentWithConfig {
132132
val class = createClass(node)
133133
if(parent.hasLabel(packageLabel)) {
134134
val parentNamespace = namespaces.get(parent.id)
135-
println("parentID: " + parent.id)
136-
println("namespace: " + parentNamespace)
137-
println("nodeID: " + node.id)
138-
println("Elementliste: " + (classes.size + namespaces.size))
139-
println("FAMIXElemente: " + famixDocument.elements.size)
140135
var ref = famixFactory.createIntegerReference
141136
ref.ref = parentNamespace
142137
class.container = ref
143138
classes.put(node.id, class)
144139
famixDocument.elements += class
145140
}
146141
if(parent.hasLabel(classLabel)) {
147-
classes.put(node.id, class)
148142
val parentClass = classes.get(parent.id)
149143
var ref = famixFactory.createIntegerReference
150144
ref.ref = parentClass
151145
class.container = ref
152-
println("parentID: " + parent.id)
153-
println("parentClass: " + parentClass)
154-
println("nodeID: " + node.id)
155-
println("Elementliste: " + (classes.size + namespaces.size))
156-
println("FAMIXElemente: " + famixDocument.elements.size)
157146
famixDocument.elements += class
147+
classes.put(node.id, class)
158148
}
159149
}
160150
case "Method": {
161-
// do method stuff
151+
val method = createMethod(node)
152+
val parentClass = classes.get(parent.id)
153+
var ref = famixFactory.createIntegerReference
154+
ref.ref = parentClass
155+
method.parentType = ref
156+
val fileAnchor = famixFactory.createFAMIXFileAnchor
157+
if(node.hasProperty("firstLineNumber")) {
158+
val firstLineNumber = node.getProperty("firstLineNumber") as Long
159+
fileAnchor.startline = firstLineNumber.intValue
160+
}
161+
if(node.hasProperty("lastLineNumber")) {
162+
val lastLineNumber = node.getProperty("lastLineNumber") as Long
163+
fileAnchor.endline = lastLineNumber.intValue
164+
}
165+
fileAnchor.filename = parent.getProperty("sourceFileName") as String
166+
var anchorRef = famixFactory.createIntegerReference
167+
anchorRef.ref = method
168+
var methodRef = famixFactory.createIntegerReference
169+
methodRef.ref = fileAnchor
170+
fileAnchor.element = methodRef
171+
method.sourceAnchor = anchorRef
172+
famixDocument.elements += method
162173
}
163174
}
164175
]
@@ -170,8 +181,6 @@ class Famix2Famix extends WorkflowComponentWithConfig {
170181
} finally {
171182
tx.close
172183
}
173-
println("Elementliste: " + (classes.size + namespaces.size))
174-
println("FAMIXElemente: " + famixDocument.elements.size)
175184
ctx.set("famix", famixRoot)
176185
val resource = new ResourceImpl()
177186
resource.contents += famixRoot
@@ -670,35 +679,53 @@ class Famix2Famix extends WorkflowComponentWithConfig {
670679

671680
def createNamespace(Node node) {
672681
val namespace = famixFactory.createFAMIXNamespace
673-
val name = node.getProperty("name") as String
674-
val fqn = node.getProperty("fqn") as String
675682
val id = node.getId.toString
676-
namespace.value = name
677-
namespace.fqn = fqn
678683
namespace.name = id
679684
namespace.id = id
680-
print("ID von " + namespace.value + ": ")
681-
println(namespace.id)
685+
namespace.value = node.getProperty("name") as String
686+
namespace.fqn = node.getProperty("fqn") as String
682687
return namespace
683688
}
684689

685690
def createClass(Node node) {
686691
val class = famixFactory.createFAMIXClass
687-
if(node.hasProperty("name")) {
688-
val value = node.getProperty("name") as String
689-
class.value = value
690-
}
691-
if(node.hasProperty("fqn")) {
692-
val fqn = node.getProperty("fqn") as String
693-
class.fqn = fqn
694-
}
695-
696-
if(node.hasProperty("md5")) {
697-
val id = node.getProperty("md5") as String
698-
class.id = id
699-
}
700-
val name = node.getId.toString
701-
class.name = name
702-
return class
692+
class.name = node.getId.toString
693+
if(node.hasProperty("name")) {
694+
class.value = node.getProperty("name") as String
695+
}
696+
if(node.hasProperty("fqn")) {
697+
class.fqn = node.getProperty("fqn") as String
698+
}
699+
if(node.hasProperty("md5")) {
700+
class.id = node.getProperty("md5") as String
701+
}
702+
val anchorRef = famixFactory.createIntegerReference
703+
val classRef = famixFactory.createIntegerReference
704+
val fileAnchor = famixFactory.createFAMIXFileAnchor
705+
fileAnchor.filename = node.getProperty("sourceFileName") as String
706+
anchorRef.ref = class
707+
classRef.ref = fileAnchor
708+
class.type = anchorRef
709+
fileAnchor.element = classRef
710+
return class
711+
}
712+
713+
def createMethod(Node node) {
714+
val method = famixFactory.createFAMIXMethod
715+
method.name = node.getId.toString
716+
if(node.hasProperty("name")) {
717+
method.value = node.getProperty("name") as String
718+
}
719+
if(node.hasProperty("cyclomaticComplexity")) {
720+
val cyclomaticComplexity = node.getProperty("cyclomaticComplexity") as Long
721+
method.cyclomaticComplexity = cyclomaticComplexity.intValue
722+
}
723+
724+
if(node.hasProperty("effectiveLineCount")) {
725+
val numberOfStatements = node.getProperty("effectiveLineCount") as Long
726+
method.numberOfStatements = numberOfStatements.intValue
727+
}
728+
method.signature = node.getProperty("signature") as String
729+
return method
703730
}
704731
}

generator/org.svis.generator/src/org/svis/generator/famix/FamixEvaluator.xtend

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,28 @@ package org.svis.generator.famix
33
import org.neo4j.graphdb.Path
44
import org.neo4j.graphdb.traversal.Evaluation
55
import org.neo4j.graphdb.traversal.Evaluator
6+
import org.neo4j.graphdb.Direction
7+
import org.neo4j.graphdb.Label
68

79
class FamixEvaluator implements Evaluator {
810

911
override evaluate(Path path) {
1012
var result = Evaluation.EXCLUDE_AND_PRUNE
11-
for(label : path.endNode.labels) {
12-
if(label.name == "Package" ||
13-
label.name == "Class" ||
14-
label.name == "Method") {
13+
for (label : path.endNode.labels) {
14+
if (label.name == "Package" || label.name == "Method") {
1515
result = Evaluation.INCLUDE_AND_CONTINUE
1616
}
17+
if (label.name == "Class") {
18+
val pre = path.nodes.get(path.length - 1)
19+
val isInnerClass = path.endNode.getProperty("name").toString.contains("$")
20+
if ((pre.hasLabel(Label.label("Package")) && isInnerClass) || pre.hasLabel(Label.label("Method")) ) {
21+
result = Evaluation.EXCLUDE_AND_PRUNE
22+
}
23+
else {
24+
result = Evaluation.INCLUDE_AND_CONTINUE
25+
}
26+
}
1727
}
1828
return result
19-
}
20-
}
29+
}
30+
}

0 commit comments

Comments
 (0)