"""
def getAllRelatedClasses(root,classfqn):
classobj = getTypeOf(root,classfqn)
rootClasses = _getRootClasses(classobj)
#print rootClasses
relatedClasses = [] + rootClasses
for rootClass in rootClasses:
relatedClasses += _getAllSubClasses(rootClass,root)
return relatedClasses
def _getRootClasses(klass):
if klass is None: # i.e. dont have base class in our ast
return None
if klass.getBaseClassNames() == []: # i.e. is a root class
return[klass]
else:
rootclasses = []
for base in klass.getBaseClassNames():
baseclass = getTypeOf(klass,base)
rootclass = _getRootClasses(baseclass)
if rootclass is None: # base class not in our ast
rootclass = [klass]
rootclasses+=rootclass
return rootclasses
def _getAllSubClasses(baseclass, root, subclasses = []):
class ClassVisitor:
def visitSource(self,node):
self.visit(node.fastparseroot)
def visitClass(self, node):
for basename in node.getBaseClassNames():
if basename.find(baseclass.name) != -1 and \
getTypeOf(node,basename) == baseclass:
subclasses.append(node)
_getAllSubClasses(node,root,subclasses)
for child in node.getChildNodes():
self.visit(child)
walk(root, ClassVisitor())
return subclasses
"""
|