From 4629d85e45d93c2a5174b318b17ec022f23d0332 Mon Sep 17 00:00:00 2001 From: gdrosos Date: Sun, 5 Jun 2022 20:17:27 +0300 Subject: [PATCH] Add LoC metadata to stitched nodes --- stitcher/cg.py | 7 ++++++- stitcher/node.py | 9 ++++++++- stitcher/stitcher.py | 14 ++++++++------ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/stitcher/cg.py b/stitcher/cg.py index c2b6f70..ec286a6 100644 --- a/stitcher/cg.py +++ b/stitcher/cg.py @@ -65,9 +65,14 @@ def iterate_mods(d, internal): for cls in info["metadata"]["superClasses"]: super_cls.append(Node(cls, product=self.product, version=self.version)) + first = None + last = None + if info["metadata"].get("first", None) != None: + first = info["metadata"].get("first") + last = info["metadata"].get("last") node = Node(info["namespace"], product=self.product, - super_cls=super_cls, version=self.version) + super_cls=super_cls, version=self.version, first=first, last=last) self.id_to_node[id] = node if node.get_modname(): diff --git a/stitcher/node.py b/stitcher/node.py index 8b81dbd..684fa05 100644 --- a/stitcher/node.py +++ b/stitcher/node.py @@ -22,11 +22,13 @@ # under the License. # class Node: - def __init__(self, uri_str, product=None, super_cls=None, version=None): + def __init__(self, uri_str, product=None, super_cls=None, version=None, first=None, last=None): self.uri_str = uri_str self.product = product self.version = version self.super_cls = super_cls or [] + self.first = first + self.last=last if len(uri_str.split("/")) == 5: self.internal = False @@ -66,6 +68,11 @@ def get_callable(self): def get_class_hier(self): return self.super_cls + def get_metadata(self): + return {"first": self.first, + "last":self.last + } + def to_string(self, simple=False): uri = "" if not simple: diff --git a/stitcher/stitcher.py b/stitcher/stitcher.py index 4269b95..b25ad31 100644 --- a/stitcher/stitcher.py +++ b/stitcher/stitcher.py @@ -36,6 +36,7 @@ def __init__(self, call_graph_paths, simple): "edges": [], "nodes": {} } + self.node_to_metadata = {} self.nodes_cnt = 0 self.edges_cnt = 0 @@ -53,8 +54,8 @@ def stitch(self): self.resolved_cnt += len(internal_calls) for src, dst in internal_calls: - self._assign_id(src.to_string(self.simple)) - self._assign_id(dst.to_string(self.simple)) + self._assign_id(src.to_string(self.simple), src.get_metadata()) + self._assign_id(dst.to_string(self.simple), dst.get_metadata()) self.stitched["edges"].append([ self.node_to_id[src.to_string(self.simple)], self.node_to_id[dst.to_string(self.simple)], @@ -65,8 +66,8 @@ def stitch(self): self.edges_cnt_no_builtin -= 1 for resolved in self._resolve(dst): self.resolved_cnt += 1 - self._assign_id(src.to_string(self.simple)) - self._assign_id(resolved.to_string(self.simple)) + self._assign_id(src.to_string(self.simple), src.get_metadata()) + self._assign_id(resolved.to_string(self.simple), resolved.get_metadata()) self.stitched["edges"].append([ self.node_to_id[src.to_string(self.simple)], self.node_to_id[resolved.to_string(self.simple)], @@ -74,7 +75,7 @@ def stitch(self): self.nodes_cnt = self.id_cnt for node, id in self.node_to_id.items(): - self.stitched["nodes"][id] = {"URI": node, "metadata": {}} + self.stitched["nodes"][id] = {"URI": node, "metadata": self.node_to_metadata[node]} def output(self): return self.stitched @@ -148,7 +149,8 @@ def _err_and_exit(self, msg): print (msg) sys.exit(1) - def _assign_id(self, node_str): + def _assign_id(self, node_str, metadata): if self.node_to_id.get(node_str, None) is None: self.node_to_id[node_str] = self.id_cnt + self.node_to_metadata[node_str] = metadata self.id_cnt += 1