def selectClasses(self, qualifiedClassName, referencingSourceFile, referencingLineNr): relevantClassReferences = [] translatedName = self.translateAsTypeDef(qualifiedClassName) parentNamespaceName = getParentNamespaceName(qualifiedClassName) nonQualifiedClassName = getNonQualifiedName(qualifiedClassName) #namespacesUsed = self.scope.getUsedNamespaces(parentNamespaceName, referencingSourceFile, referencingLineNr) namespacesUsed = self.scope.getUsedNamespaces(referencingSourceFile, referencingLineNr) if parentNamespaceName != "": index = 0 while index < len(namespacesUsed): usedNamespace = namespacesUsed[index] if usedNamespace == "": usedNamespace = parentNamespaceName else: usedNamespace += "::" + parentNamespaceName namespacesUsed[index] = usedNamespace index += 1 classReferences = self.classCollector.collectClassReferences(nonQualifiedClassName, namespacesUsed) # Which classes are reachable through (transitive) #includes? #print qualifiedClassName transIncludeDict = self.scope.getTransitiveIncludeDict() transitiveIncludedFiles=transIncludeDict.getTransitiveIncludedFiles(referencingSourceFile) for classReference in classReferences: sourceFile = classReference.getSourceFile() #print sourceFile, " in ", transitiveIncludedFiles #selectSourceFileMatches(sourceFile,transitiveIncludedFiles) if sourceFile in transitiveIncludedFiles: if not(classReference in relevantClassReferences): relevantClassReferences.append(classReference) else: conf = transIncludeDict.trySymlinkPath(sourceFile, transitiveIncludedFiles) if conf > 1 and not(classReference in relevantClassReferences): relevantClassReferences.append(classReference) sl = SourceLocation(referencingSourceFile, referencingLineNr, referencingLineNr) # TODO: we do an 'or' here, but we should check that (i) it is reachable # via include, and (ii) the namespacing is also ok # Which classes are reachable through namespacing. usedClassesLocations = self.scope.getTransitiveUsedClassesLocationsUsingLoc(sl) for usedClassLoc in usedClassesLocations: # convert to ClassReferenceEntity clsName = usedClassLoc.getNonQualifiedName() nspName = utils.spliceLastPackageName(usedClassLoc.getName(),utils.qualSeparator) sLoc = usedClassLoc.getSourceLocations()[0] cre = ClassReferenceEntity(clsName, nspName, sLoc.sourceFile, sLoc.start, "") if clsName == qualifiedClassName and not cre in relevantClassReferences: relevantClassReferences.append(cre) return relevantClassReferences
def __uniqueDestination(self): """ Entry point for trying to resolve to a unique destination """ found = False dstType = utils.spliceLastPackageName(self.content, ".") dstName = utils.spliceAllButLastPackageName(self.content, ".") mtdCands = self.methDict.getMethodsNamed(dstName) if 1 == len(mtdCands): # single method name candidate signature = mtdCands.keys()[0] found = self.__singleCandidateDestination(signature, dstType, dstName) else: found = self.__multipleCandidateDestinations(mtdCands, dstType, dstName) return found
def __uniqueDestination(self): """ Entry point for trying to resolve to a unique destination """ found = False dstType = utils.spliceLastPackageName(self.content, ".") dstName = utils.spliceAllButLastPackageName(self.content, ".") mtdCands = self.methDict.getMethodsNamed(dstName) if 1 == len(mtdCands): # single method name candidate signature = mtdCands.keys()[0] found = self.__singleCandidateDestination(signature, dstType, dstName) else: found = self.__multipleCandidateDestinations( mtdCands, dstType, dstName) return found
def selectClasses(self, qualifiedClassName, referencingSourceFile, referencingLineNr): relevantClassReferences = [] translatedName = self.translateAsTypeDef(qualifiedClassName) parentNamespaceName = getParentNamespaceName(qualifiedClassName) nonQualifiedClassName = getNonQualifiedName(qualifiedClassName) #namespacesUsed = self.scope.getUsedNamespaces(parentNamespaceName, referencingSourceFile, referencingLineNr) namespacesUsed = self.scope.getUsedNamespaces(referencingSourceFile, referencingLineNr) if parentNamespaceName != "": index = 0 while index < len(namespacesUsed): usedNamespace = namespacesUsed[index] if usedNamespace == "": usedNamespace = parentNamespaceName else: usedNamespace += "::" + parentNamespaceName namespacesUsed[index] = usedNamespace index += 1 classReferences = self.classCollector.collectClassReferences( nonQualifiedClassName, namespacesUsed) # Which classes are reachable through (transitive) #includes? #print qualifiedClassName transIncludeDict = self.scope.getTransitiveIncludeDict() transitiveIncludedFiles = transIncludeDict.getTransitiveIncludedFiles( referencingSourceFile) for classReference in classReferences: sourceFile = classReference.getSourceFile() #print sourceFile, " in ", transitiveIncludedFiles #selectSourceFileMatches(sourceFile,transitiveIncludedFiles) if sourceFile in transitiveIncludedFiles: if not (classReference in relevantClassReferences): relevantClassReferences.append(classReference) else: conf = transIncludeDict.trySymlinkPath( sourceFile, transitiveIncludedFiles) if conf > 1 and not (classReference in relevantClassReferences): relevantClassReferences.append(classReference) sl = SourceLocation(referencingSourceFile, referencingLineNr, referencingLineNr) # TODO: we do an 'or' here, but we should check that (i) it is reachable # via include, and (ii) the namespacing is also ok # Which classes are reachable through namespacing. usedClassesLocations = self.scope.getTransitiveUsedClassesLocationsUsingLoc( sl) for usedClassLoc in usedClassesLocations: # convert to ClassReferenceEntity clsName = usedClassLoc.getNonQualifiedName() nspName = utils.spliceLastPackageName(usedClassLoc.getName(), utils.qualSeparator) sLoc = usedClassLoc.getSourceLocations()[0] cre = ClassReferenceEntity(clsName, nspName, sLoc.sourceFile, sLoc.start, "") if clsName == qualifiedClassName and not cre in relevantClassReferences: relevantClassReferences.append(cre) return relevantClassReferences
def getOwnerUniqueName(self): return utils.spliceLastPackageName(self.src_unqName, ".")