예제 #1
0
 def helper(self,src,classname):
     try:
         createPackageStructure(src,testdata.TheClass)
         classobj = getTypeOf(getModule(pkgstructureFile1),classname,[pkgstructureRootDir])
         return getRootClassesOfHierarchy(classobj,[pkgstructureRootDir])
     finally:
         removePackageStructure()
예제 #2
0
 def _isAClassInTheSameHierarchy(self,classobj):
     #return classobj in self.targetClasses
     targetRootClasses = getRootClassesOfHierarchy(classobj)
     for rootclass in self.rootClasses:
         if rootclass in targetRootClasses:
             return True
     return False
예제 #3
0
def generateRefsToAttribute(classobj,attrname,pythonpath):
    rootClasses = getRootClassesOfHierarchy(classobj,pythonpath)
    for sourcenode, linenum, col in _generateCoordsMatchingString(attrname,classobj.filename,pythonpath):
        scope = getScopeForLine(sourcenode, linenum)
        if col != 0 and sourcenode.getLines()[linenum-1][col-1] == '.':  # possible attribute
            expr = translateSourceCoordsIntoASTNode(sourcenode.filename,linenum,col)
            assert isinstance(expr,Getattr) or isinstance(expr,AssAttr)
            exprtype = getTypeOfExpr(scope,expr.expr,pythonpath)
            if isinstance(exprtype,Instance) and \
                   _isAClassInTheSameHierarchy(exprtype.getType(),rootClasses,pythonpath):
                yield createMatchObject(scope,linenum,col,attrname,100)
            elif exprtype is None:
                # can't deduce type of expression - still could be a match
                yield createMatchObject(scope,linenum,col,attrname,50)
        elif scopeIsAMethod(scope) and scope.name == attrname:  # possible method 
            if _isAClassInTheSameHierarchy(scope.getParent(),rootClasses,pythonpath):
                yield convertScopeToMatchObject(scope,100)
예제 #4
0
def _isAClassInTheSameHierarchy(classobj,rootclasses,pythonpath):
    targetRootClasses = getRootClassesOfHierarchy(classobj,pythonpath)
    for rootclass in rootclasses:
        if rootclass in targetRootClasses:
            return True
    return False
예제 #5
0
def generateRefsToAttribute(classobj,attrname):
    rootClasses = getRootClassesOfHierarchy(classobj)
    attrRefFinder = AttrbuteRefFinder(rootClasses,attrname)
    for ref in globalScanForMatches(classobj.filename, attrRefFinder, attrname):
        yield ref
    print >>log.progress,"Done"