Skip to content

Commit

Permalink
Merge pull request #30 from BetsyMcPhail/fix-platform-dependent-routines
Browse files Browse the repository at this point in the history
Create called/caller graphs for package components
  • Loading branch information
josephsnyder committed Jan 3, 2019
2 parents 7f8a1c7 + 12ee5a9 commit d4bbbec
Show file tree
Hide file tree
Showing 5 changed files with 572 additions and 709 deletions.
54 changes: 21 additions & 33 deletions Utilities/Dox/PythonScripts/CrossReference.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,20 @@
#----------------------------------------------------------------
import sys
import types
from LogManager import logger
import csv
import json
from operator import itemgetter, attrgetter

from LogManager import logger
from UtilityFunctions import PACKAGE_COMPONENT_MAP

NOT_KILLED_EXPLICITLY_VALUE = ">>"
MUMPS_ROUTINE_PREFIX = "Mumps"

BoolDict = {True:"Y", False:"N"}

LINE_OFFSET_DELIM = ","

#===============================================================================
# A Class to represent the variable in a _calledRoutine
#===============================================================================
Expand Down Expand Up @@ -89,8 +93,6 @@ def __init__(self, routineName, package=None):
self._refGlobals = dict()
self._dbGlobals = dict()
self._package = package
self._totalCaller = 0
self._totalCalled = 0
self._comments = []
self._originalName = routineName
self._hasSourceCode = True
Expand All @@ -112,10 +114,7 @@ def addComment(self, comment):
self._comments.append(comment)
def getComment(self):
return self._comments
def getTotalCaller(self):
return self._totalCaller
def getTotalCalled(self):
return self._totalCalled

def addLocalVariables(self, localVar):
varName = localVar.getName()
if varName not in self._localVariables:
Expand Down Expand Up @@ -205,10 +204,6 @@ def addCallDepRoutines(self, depRoutine, callTag, lineOccurrences, isCalled=True
depRoutines[package] = dict()
if depRoutine not in depRoutines[package]:
depRoutines[package][depRoutine] = dict()
if isCalled:
self._totalCalled += 1
else:
self._totalCaller += 1
if callTag not in depRoutines[package][depRoutine]:
depRoutines[package][depRoutine][callTag] = lineOccurrences.split(LINE_OFFSET_DELIM)
else:
Expand Down Expand Up @@ -913,8 +908,9 @@ def __init__(self, packageName):
self._routines = dict()
self._globals = dict()
self._namespaces = []
# ["Option","Function","Key","List","Protocol","Remote Procedure","Sort Template","Help Frame","Form",""]
self._objects = {"Key":{},"Dialog":{},"Function":{},"Option":{}, "List_Manager_Templates":{},"Protocol":{},"Remote_Procedure":{},"Sort_Template":{},"Help_Frame":{},"Form":{},"HL7_APPLICATION_PARAMETER":{},"Input_Template":{},"Print_Template":{}}
self._objects = dict()
for componentType in PACKAGE_COMPONENT_MAP:
self._objects[componentType] = dict()
self._globalNamespace = []
self._routineDependencies = dict()
self._routineDependents = dict()
Expand Down Expand Up @@ -951,35 +947,25 @@ def getAllRoutines(self):
return self._routines
def getAllGlobals(self):
return self._globals

#**************************************
#* Package object functions
#**************************************
def getPackageComponent(self, type,ien):
return self._objects[type][ien]
def getPackageComponent(self, type, ien):
return self._objects[type][ien]

def getAllPackageComponents(self, type="*"):
if type == "*":
return self._objects
return self._objects
return self._objects[type]

def addPackageComponent(self, type, value):
value.addObjectType(type)
self._objects[type][value.getIEN()] = value
def getAllOptions(self):
return self._objects["opt"]
def getOption(self,ien):
return self._objects["opt"][ien]
def addOption(self,Option):
self._objects['opt'][Option.getIEN()] = Option
def getFunction(self,ien):
return self._objects["func"][ien]
def addFunction(self,function):
self._objects["func"][function.getIEN()] = function
def getAllFunctions(self):
return self._objects["func"]
value.addObjectType(type)
self._objects[type][value.getIEN()] = value

def getRoutine(self, routineName):
return self._routines.get[routineName]
def hasRoutine(self, routineName):
return routineName in self._routines

def getName(self):
return self._name
def getOriginalName(self):
Expand All @@ -990,9 +976,10 @@ def generatePackageDependencies(self):
self.generatePackageComponentBasedDependencies()
self.generateRoutineBasedDependencies()
self.generateFileManFileBasedDependencies()

def generatePackageComponentBasedDependencies(self):
allObjs = self.getAllPackageComponents()
for key in allObjs.keys():
for key in allObjs:
for obj in allObjs[key]:
calledRoutines = allObjs[key][obj].getCalledRoutines()
for package in calledRoutines.iterkeys():
Expand All @@ -1009,6 +996,7 @@ def generatePackageComponentBasedDependencies(self):
package._objectDependents[self] = (set(), set())
package._objectDependents[self][0].add(allObjs[key][obj])
package._objectDependents[self][1].update(calledRoutines[package])

def generateRoutineBasedDependencies(self):
# build routine based dependencies
for globalEntry in self._globals.itervalues():
Expand Down
Loading

0 comments on commit d4bbbec

Please sign in to comment.