def detectUnnAbsInDefine(fileObj, outputFile): defineList = fileObj.getDefineDeclarationList() for aDefine in defineList: lineCount, textSizeCount = aDefine.getBodyTextSize() if lineCount < CONSTS.LOC_THRESHOLD_UNNABS and textSizeCount < CONSTS.SIZE_THRESHOLD_UNNABS: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_UNN_ABS, CONSTS.DEFINE_RES)
def detectTCMod(fileObj, outputFile): if not (fileObj.fileName.__contains__("param") or fileObj.fileName.__contains__("init") or fileObj.fileName.__contains__("site")): if len(fileObj.getHardCodedStatments()) > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_TC_MOD, CONSTS.FILE_RES)
def detectMulAbsInClass(fileObj, outputFile): classList = fileObj.getClassDeclarationList() for aClass in classList: lcom = aClass.getLCOM() if lcom < CONSTS.LCOM_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_2, CONSTS.CLASS_RES)
def analyze(folder, file): resultsMetrics = defaultdict(list) # erasing for the next file outputFile = open(folder + "/" + CONSTS.PUPPETEER_OUT_FILE, 'a+') print("folder: ", folder) print("file: ", file) puppetFileCount = FileOperations.countPuppetFiles(file) # print("puppetFileCount: ", puppetFileCount) resultsMetrics[file].append(puppetFileCount) outputFile.write(CONSTS.PUPPET_FILE_COUNT + str(puppetFileCount) + "\n") Utilities.myPrint(CONSTS.PUPPET_FILE_COUNT + str(puppetFileCount)) metricsResults = SizeMetrics.collectSizeMetrics(file, outputFile) for i in metricsResults: resultsMetrics[file].append(i) # puppetFileCount, totalClasses,totalDefines,totalFiles,totalPackages,totalServices,totalExecs,totalLOC # print("RESULTS: ", resultsMetrics) CONSTS.smellsResults = {} # erasing for the next file SmellDectector.detectSmells(file, outputFile) # print("CONSTS.smellsResults: ", CONSTS.smellsResults) # print("\n\n") outputFile.close() return resultsMetrics, CONSTS.smellsResults
def detectMisAbs(fileObj, outputFile): classAndDefineCount = len(fileObj.getOuterClassList() + fileObj.getOuterDefineList()) outerElementCount = len(fileObj.getOuterElementList()) if outerElementCount - classAndDefineCount > CONSTS.MISABS_MAX_NON_ABS_COUNT: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MIS_ABS, CONSTS.FILE_RES)
def detectMissingModules(folder, outputFile): #print("%s" % (inspect.stack()[0][3])) classNamesSet = set() includeClassSet = set() for abspath, dirs, files in os.walk(folder): for file in files: #print(file) if file.endswith(".pp") and not os.path.islink(os.path.join(abspath, file)): #print(file) fileObj = SourceModel.SM_File.SM_File(os.path.join(abspath, file)) classNames, fileIncludes = detectMissingClassesByInclude(fileObj, outputFile) #print("Classes: %s" % ','.join(n for n in classNames)) classNamesSet = classNamesSet.union(classNames) #print("Union with %s: %s" % (','.join(n for n in classNames), ','.join(n for n in classNamesSet))) includeClassSet = includeClassSet.union(fileIncludes) #print("%s: Classes: %s" % (inspect.stack()[0][3], ','.join(n for n in classNamesSet))) #print("%s: Class includes: %s" % (inspect.stack()[0][3], ','.join(i for i in includeClassSet))) missingDependencySet = includeClassSet.difference(classNamesSet) #print(includeClassSet) #print(classNamesSet) #print(missingDependencySet) Utilities.myPrint("Missing dependency set: %s" % ','.join(c for c in missingDependencySet)) #for md in missingDependencySet: #Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_MIS_DEP, CONSTS.FILE_RES) with open('missDependencies.puppeteer.txt', 'a+') as f: for md in missingDependencySet: f.write("%s\n" % md) Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_MIS_DEP, CONSTS.FILE_RES)
def detectBroHierarchy(folder, outputFile): classNames, superClassNames = collectClassNames(folder) #print("classNames: " + str(classNames)) #print("superClassNames: " + str(superClassNames)) for superClass in superClassNames: if not classNames.__contains__(superClass): Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_BRO_HIE, CONSTS.MODULE_RES)
def detectUnnAbsInClasses(fileObj, outputFile): classList = fileObj.getClassDeclarationList() for aClass in classList: lineCount, textSizeCount = aClass.getBodyTextSize() if lineCount < CONSTS.LOC_THRESHOLD_UNNABS and textSizeCount < CONSTS.SIZE_THRESHOLD_UNNABS: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_UNN_ABS, CONSTS.CLASS_RES)
def detectImpAbs(fileObj, outputFile): execDecls = fileObj.getNoOfExecDeclarations() totalDeclarations = fileObj.getNoOfClassDeclarations() + fileObj.getNoOfDefineDeclarations() + \ fileObj.getNoOfFileDeclarations() + fileObj.getNoOfPackageDeclarations() + \ fileObj.getNoOfServiceDeclarations() + execDecls if float(totalDeclarations * CONSTS.IMPABS_THRESHOLD) <= float( execDecls) and execDecls > CONSTS.IMPABS_MAXEXECCOUNT: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_IMP_ABS, CONSTS.FILE_RES)
def detectDuplicateAbs(folder, outputFile): cpdXmlFile = getCpdXmlFile(folder) if cpdXmlFile: file = open(os.path.join(folder, cpdXmlFile), 'r', errors='ignore') fileContent = file.read() compiledRE = re.compile("<duplication lines=") for i in re.findall(compiledRE, fileContent): Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_DUP_ABS, CONSTS.FILE_RES)
def getDefineDeclarationList(self): compiledRE = re.compile(SMCONSTS.DEFINE_REGEX) defineList = [] for match in compiledRE.findall(self.fileText): defineText, s, e = self.extractElementText(match) Utilities.myPrint("Extracted define declaration: " + defineText) defineObj = SourceModel.SM_Define.SM_Define(defineText) defineList.append(defineObj) return defineList
def getServiceResourceList(self): compiledRE = re.compile(SMCONSTS.SERVICE_REGEX) serviceResourceList = [] for match in (compiledRE.findall(self.fileText)): serviceResourceText = self.extractResourceText(match) Utilities.myPrint("Extracted service declaration: " + serviceResourceText) serviceResourceObj = SourceModel.SM_ServiceResource.SM_ServiceResource(serviceResourceText) serviceResourceList.append(serviceResourceObj) return serviceResourceList
def getPackageResourceList(self): compiledRE = re.compile(SMCONSTS.PACKAGE_REGEX) packageResourceList = [] for match in (compiledRE.findall(self.fileText)): packageResourceText = self.extractResourceText(match) Utilities.myPrint("Extracted package declaration: " + packageResourceText) packageResourceObj = SourceModel.SM_PackageResource.SM_PackageResource(packageResourceText) packageResourceList.append(packageResourceObj) return packageResourceList
def getNodeDeclarations(self): compiledRE = re.compile(SMCONSTS.NODE_REGEX) nodeResourceList = [] for match in (compiledRE.findall(self.fileText)): nodeResourceText = self.extractResourceText(match) Utilities.myPrint("Extracted node declaration: " + nodeResourceText) nodeResourceObj = SourceModel.SM_Node.SM_Node(nodeResourceText) nodeResourceList.append(nodeResourceObj) return nodeResourceList
def getFileResourceList(self): compiledRE = re.compile(SMCONSTS.FILE_REGEX) fileResourceList = [] for match in (compiledRE.findall(self.fileText)): fileResourceText = self.extractResourceText(match) Utilities.myPrint("Extracted file declaration: " + fileResourceText) fileResourceObj = SourceModel.SM_FileResource.SM_FileResource(fileResourceText) fileResourceList.append(fileResourceObj) return fileResourceList
def detectUnstructuredModForm1(folder, outputFile): if isModulesExists(folder): return manifestsFolder = getManifestsFolder(folder) #repo-level manifests folder if manifestsFolder == "": Utilities.reportSmell(outputFile, manifestsFolder, CONSTS.SMELL_UNS_MOD_1, CONSTS.REPO_MANIFEST) return if FileOperations.countPuppetFiles(manifestsFolder) > CONSTS.MAX_MANIFESTS_PUPPET_FILES: Utilities.reportSmell(outputFile, manifestsFolder, CONSTS.SMELL_UNS_MOD_1, CONSTS.REPO_MANIFEST)
def getServiceResourceList(self): compiledRE = re.compile(SMCONSTS.SERVICE_REGEX) serviceResourceList = [] for match in (compiledRE.findall(self.fileText)): serviceResourceText = self.extractResourceText(match) Utilities.myPrint("Extracted service declaration: " + serviceResourceText) serviceResourceObj = SourceModel.SM_ServiceResource.SM_ServiceResource( serviceResourceText) serviceResourceList.append(serviceResourceObj) return serviceResourceList
def getPackageResourceList(self): compiledRE = re.compile(SMCONSTS.PACKAGE_REGEX) packageResourceList = [] for match in (compiledRE.findall(self.fileText)): packageResourceText = self.extractResourceText(match) Utilities.myPrint("Extracted package declaration: " + packageResourceText) packageResourceObj = SourceModel.SM_PackageResource.SM_PackageResource( packageResourceText) packageResourceList.append(packageResourceObj) return packageResourceList
def getFileResourceList(self): compiledRE = re.compile(SMCONSTS.FILE_REGEX) fileResourceList = [] for match in (compiledRE.findall(self.fileText)): fileResourceText = self.extractResourceText(match) Utilities.myPrint("Extracted file declaration: " + fileResourceText) fileResourceObj = SourceModel.SM_FileResource.SM_FileResource( fileResourceText) fileResourceList.append(fileResourceObj) return fileResourceList
def detectUnsModForm3(folder, outputFile): counter = 0 if os.path.isdir(folder): for dir in os.listdir(folder): if not (dir == "files" or dir == "manifests" or dir == "templates" or dir == "lib" or dir == "tests" or dir == "spec" or dir.__contains__("readme") or dir.__contains__("README") or dir.__contains__("license") or dir.__contains__("LICENSE") or dir.__contains__("metadata")): counter += 1 if counter > CONSTS.MAX_ALLOWED_NONSTANDARD_FILES: Utilities.reportSmell(outputFile, folder, CONSTS.SMELL_UNS_MOD_3, CONSTS.OTHERFILES)
def getClassDeclarationList(self): compiledRE = re.compile(SMCONSTS.CLASS_REGEX) compiledClassNameRE = re.compile(SMCONSTS.CLASS_NAME_REGEX) classList = [] for match in compiledRE.findall(self.fileText): className = compiledClassNameRE.findall(match)[0] #print("Class name: %s" % (className)) classText = self.extractResourceText(match) Utilities.myPrint("Extracted class declaration: " + classText) classObj = SourceModel.SM_Class.SM_Class(classText, className) classList.append(classObj) return classList
def getOnlyIncludeClassesCount(self): cnt_of_includes = 0 compiledIncludeRE = re.compile(SMCONSTS.ONLY_INCLUDE_REGEX) declareClassList = [] for match in (compiledIncludeRE.findall(self.fileText)): cnt_of_includes = cnt_of_includes + 1 #print match declareClassText = match cleanInclude = re.sub(r'^\s*include \[?(.+)\]?\s*$', r'\1', declareClassText) #print "Clean include: ", cleanInclude class_name = r'(?:Class\[)?\'?\:{0,2}([\w\d\:\-_\$]+)\'?\]?' classRE = re.compile(class_name) if ',' in cleanInclude: classes = cleanInclude.split(',') for c in classes: for m in classRE.findall(c): # Find a variable value in text if m.startswith('$'): #print("Variable: %s" % m) varRE = r'(?:^|\n)\s*\$[\w\d\-_]+\s?=\s?\'?\"?([\w\d\-_]+)\'?\"?\n' compiledVarRE = re.compile(varRE) for v in (compiledVarRE.findall(self.fileText)): #print(v) declareClassName = v #Utilities.myPrint("Extracted include class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource( declareClassText, declareClassName) declareClassList.append(declareResourceObj) break #print("Variable %s value) #print "if block: Extracted class name:", m else: declareClassName = m Utilities.myPrint( "Extracted include class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource( declareClassText, declareClassName) declareClassList.append(declareResourceObj) else: for c in classRE.findall(cleanInclude): #print "else block: Extracted class name: ", c declareClassName = c #print("%s" % includeClassText) #Utilities.myPrint("Extracted include class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource( declareClassText, declareClassName) declareClassList.append(declareResourceObj) #print "Declre class list contents in the end:", declareClassList #print "Total count of includes: ", cnt_of_includes return cnt_of_includes
def analyze(folder, repoName): outputFile = open(folder + "/" + CONSTS.PUPPETEER_OUT_FILE, 'w') puppetFileCount = FileOperations.countPuppetFiles(folder) outputFile.write(CONSTS.PUPPET_FILE_COUNT + str(puppetFileCount) + "\n") Utilities.myPrint(CONSTS.PUPPET_FILE_COUNT + str(puppetFileCount)) SizeMetrics.collectSizeMetrics(folder, outputFile) SmellDectector.detectSmells(folder, outputFile) outputFile.close() return
def getOnlyRequireCount(self): cnt_of_requires = 0 compiledIncludeRE = re.compile(SMCONSTS.ONLY_REQUIRE_REGEX) declareClassList = [] for match in (compiledIncludeRE.findall(self.fileText)): cnt_of_requires = cnt_of_requires + 1 #print match declareClassText = match cleanInclude = re.sub(r'^\s*require \[?(.+)\]?\s*$', r'\1', declareClassText) class_name = r'(?:Class\[)?\'?\:{0,2}([\w\d\:\-_\$]+)\'?\]?' classRE = re.compile(class_name) if ',' in cleanInclude: classes = cleanInclude.split(',') for c in classes: for m in classRE.findall(c): # Find a variable value in text if m.startswith('$'): #print("Variable: %s" % m) varRE = r'(?:^|\n)\s*\$[\w\d\-_]+\s?=\s?\'?\"?([\w\d\-_]+)\'?\"?\n' compiledVarRE = re.compile(varRE) for v in (compiledVarRE.findall(self.fileText)): #print(v) declareClassName = v declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource( declareClassText, declareClassName) declareClassList.append(declareResourceObj) break else: declareClassName = m Utilities.myPrint( "Extracted include class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource( declareClassText, declareClassName) declareClassList.append(declareResourceObj) else: for c in classRE.findall(cleanInclude): declareClassName = c declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource( declareClassText, declareClassName) declareClassList.append(declareResourceObj) return cnt_of_requires
def getPhysicalResourceDeclarationCount(self): pkg_count = 0 compiledRE = re.compile(r'\'.+\'\W*:|\".+\":') tempVar = compiledRE.findall(self.resourceText) Utilities.myPrint("Found package declarations: " + str(tempVar)) pkg_count = len(tempVar) # Find list type package declarations compiledRE = re.compile(r'{\[((\".+?\"),?)+\]:\s*}') result = compiledRE.finditer(self.resourceText) all_pkgs = "" for m in result: all_pkgs = m.group(1) pkgs = all_pkgs.split(',') for pkg in pkgs: Utilities.myPrint("Found package declarations: " + str(pkg)) pkg_count += len(pkgs) return pkg_count
def getIncludeClasses(self): compiledIncludeRE = re.compile(SMCONSTS.DECLARE_INCLUDE_REGEX) compiledResourceRE = re.compile(SMCONSTS.DECLARE_RESOURCE_REGEX) declareClassList = [] declareClassName = "" for match in (compiledIncludeRE.findall(self.fileText)): #print(match) declareClassText = match cleanInclude = re.sub(r'^\s*include \[?(.+)\]?\s*$', r'\1', declareClassText) #print("Clean include: %s" % cleanInclude) class_name = r'(?:Class\[)?\'?\:{0,2}([\w\d\:\-_\$]+)\'?\]?' classRE = re.compile(class_name) if ',' in cleanInclude: classes = cleanInclude.split(',') for c in classes: for m in classRE.findall(c): # Find a variable value in text if m.startswith('$'): #print("Variable: %s" % m) varRE = r'(?:^|\n)\s*\$[\w\d\-_]+\s?=\s?\'?\"?([\w\d\-_]+)\'?\"?\n' compiledVarRE = re.compile(varRE) for v in (compiledVarRE.findall(self.fileText)): #print(v) declareClassName = v Utilities.myPrint("Extracted include class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource(declareClassText, declareClassName) declareClassList.append(declareResourceObj) break #print("Variable %s value) #print("Extracted class name: %s" % m) else: declareClassName = m Utilities.myPrint("Extracted include class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource(declareClassText, declareClassName) declareClassList.append(declareResourceObj) else: for c in classRE.findall(cleanInclude): #print("Extracted class name: %s" % c) declareClassName = c #print("%s" % includeClassText) Utilities.myPrint("Extracted include class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource(declareClassText, declareClassName) declareClassList.append(declareResourceObj) for match in (compiledResourceRE.findall(self.fileText)): #print(match) declareClassText = match declareClassName = declareClassText #print("%s" % includeClassText) Utilities.myPrint("Extracted resource class declaration: " + declareClassText) declareResourceObj = SourceModel.SM_IncludeResource.SM_IncludeResource(declareClassText, declareClassName) declareClassList.append(declareResourceObj) return declareClassList
def getLCOM(elementList): disconnectedElements = 0 while len(elementList) > 0: disconnectedElements += 1 curElement = elementList.pop() variableList = curElement.getUsedVariables() i = 0 while len(elementList) > 0 and i < len(elementList): elementToCompare = elementList[i] curVariableList = elementToCompare.getUsedVariables() if len(Utilities.intersection(curVariableList, variableList)) > 0: variableList = Utilities.summation(curVariableList, variableList) elementList.pop(i) i += 1 #print("Computing LCOM : disconnected elements - " + str(disconnectedElements)) if disconnectedElements > 0: LCOM = float("{:.2f}".format(1.0/disconnectedElements)) else: LCOM = float(1.0) return LCOM
def getLCOM(elementList): disconnectedElements = 0 while len(elementList) > 0: disconnectedElements += 1 curElement = elementList.pop() variableList = curElement.getUsedVariables() i = 0 while len(elementList) > 0 and i < len(elementList): elementToCompare = elementList[i] curVariableList = elementToCompare.getUsedVariables() if len(Utilities.intersection(curVariableList, variableList)) > 0: variableList = Utilities.summation(curVariableList, variableList) elementList.pop(i) i += 1 #print("Computing LCOM : disconnected elements - " + str(disconnectedElements)) if disconnectedElements > 0: LCOM = float("{:.2f}".format(1.0 / disconnectedElements)) else: LCOM = float(1.0) return LCOM
def collectSizeMetrics(folder, outputFile): totalClasses = 0 totalDefines = 0 totalFiles = 0 totalPackages = 0 totalServices = 0 totalExecs = 0 totalLOC = 0 for root, dirs, files in os.walk(folder): for file in files: if file.endswith(".pp") and not os.path.islink( os.path.join(root, file)): Utilities.myPrint("Reading file: " + os.path.join(root, file)) fileObj = SourceModel.SM_File.SM_File(os.path.join(root, file)) totalClasses += fileObj.getNoOfClassDeclarations() totalDefines += fileObj.getNoOfDefineDeclarations() totalFiles += fileObj.getNoOfFileDeclarations() totalPackages += fileObj.getNoOfPackageDeclarations() totalServices += fileObj.getNoOfServiceDeclarations() totalExecs += fileObj.getNoOfExecDeclarations() totalLOC += fileObj.getLinesOfCode() print("1,TotalClasses," + str(totalClasses) + "\n") print("1,TotalDefines," + str(totalDefines) + "\n") print("1,TotalFiles," + str(totalFiles) + "\n") print("1,TotalPackages," + str(totalPackages) + "\n") print("1,TotalServices," + str(totalServices) + "\n") print("1,TotalExecs," + str(totalExecs) + "\n") print("1,TotalLOC," + str(totalLOC) + "\n")
def detectInsModForm2(fileObj, outputFile): for aClass in fileObj.getOuterClassList(): if aClass.getLocWithoutComments() > CONSTS.MAX_CLASS_LOC_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_2, CONSTS.CLASS_RES) for aDefine in fileObj.getOuterDefineList(): if aDefine.getLocWithoutComments() > CONSTS.MAX_DEFINE_LOC_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_2, CONSTS.DEFINE_RES) if fileObj.getLinesOfCodeWithoutComments() > CONSTS.MAX_MODULE_LOC_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_INS_MOD_2, CONSTS.FILE_RES)
def checkWithFileResource(fileObj, outputFile): fileResourceList = fileObj.getFileResourceList() for fileRes in fileResourceList: if fileRes.getPhysicalResourceDeclarationCount() > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_1, CONSTS.FILE_RES)
def checkWithServiceResource(fileObj, outputFile): serviceResourceList = fileObj.getServiceResourceList() for serviceRes in serviceResourceList: if serviceRes.getPhysicalResourceDeclarationCount() > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_1, CONSTS.SERVICE_RES)
def detectDefEnc(fileObj, outputFile): for nodeDecl in fileObj.getNodeDeclarations(): if nodeDecl.getGlobalVariableCount() > 0: Utilities.reportSmell(outputFile, CONSTS.SMELL_DEF_ENC, fileObj.fileName, CONSTS.NODES_RES)
def countEntityDeclaration(self, regEx, entityType): compiledRE = re.compile(regEx) Utilities.myPrint("Identified " + entityType + " declarations: " + str(compiledRE.findall(self.fileText)) + \ " Size: " + str(len(compiledRE.findall(self.fileText)))) return len(compiledRE.findall(self.fileText))
def detectMulAbsInDefine(fileObj, outputFile): defineList = fileObj.getDefineDeclarationList() for aDefine in defineList: if aDefine.getLCOM() < CONSTS.LCOM_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_2, CONSTS.DEFINE_RES)
def detectMulAbsInModule(fileObj, outputFile): if fileObj.getLCOM() < CONSTS.LCOM_THRESHOLD: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_2, CONSTS.FILE_RES)
def detectUnnAbsInModules(fileObj, outputFile): lineCount, textSizeCount = fileObj.getBodyTextSize() if lineCount < CONSTS.LOC_THRESHOLD_UNNABS and textSizeCount < CONSTS.SIZE_THRESHOLD_UNNABS: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_UNN_ABS, CONSTS.DEFINE_RES)
def checkWithPackageResource(fileObj, outputFile): packageResourceList = fileObj.getPackageResourceList() for packageRes in packageResourceList: if packageRes.getPhysicalResourceDeclarationCount() > 1: Utilities.reportSmell(outputFile, fileObj.fileName, CONSTS.SMELL_MUL_ABS_1, CONSTS.PACKAGE_RES)
def collectSizeMetrics(folder, outputFile): totalClasses = 0 totalDefines = 0 totalFiles = 0 totalPackages = 0 totalServices = 0 totalExecs = 0 totalLOC = 0 for root, dirs, files in os.walk(folder): for file in files: if file.endswith(".pp") and not os.path.islink(os.path.join(root, file)): Utilities.myPrint("Reading file: " + os.path.join(root, file)) fileObj = SourceModel.SM_File.SM_File(os.path.join(root, file)) totalClasses += fileObj.getNoOfClassDeclarations() totalDefines += fileObj.getNoOfDefineDeclarations() totalFiles += fileObj.getNoOfFileDeclarations() totalPackages += fileObj.getNoOfPackageDeclarations() totalServices += fileObj.getNoOfServiceDeclarations() totalExecs += fileObj.getNoOfExecDeclarations() totalLOC += fileObj.getLinesOfCode() outputFile.write(CONSTS.TOTAL_CLASS_DECLS + str(totalClasses) + "\n") Utilities.myPrint(CONSTS.TOTAL_CLASS_DECLS + str(totalClasses)) outputFile.write(CONSTS.TOTAL_DEFINE_DECLS + str(totalDefines) + "\n") Utilities.myPrint(CONSTS.TOTAL_DEFINE_DECLS + str(totalDefines)) outputFile.write(CONSTS.TOTAL_FILE_RES_DECLS + str(totalFiles) + "\n") Utilities.myPrint(CONSTS.TOTAL_FILE_RES_DECLS + str(totalFiles)) outputFile.write(CONSTS.TOTAL_PACKAGE_RES_DECLS + str(totalPackages) + "\n") Utilities.myPrint(CONSTS.TOTAL_PACKAGE_RES_DECLS + str(totalPackages)) outputFile.write(CONSTS.TOTAL_SERVICE_RES_DECLS + str(totalServices) + "\n") Utilities.myPrint(CONSTS.TOTAL_SERVICE_RES_DECLS + str(totalServices)) outputFile.write(CONSTS.TOTAL_EXEC_DECLS + str(totalExecs) + "\n") Utilities.myPrint(CONSTS.TOTAL_EXEC_DECLS + str(totalExecs)) outputFile.write(CONSTS.TOTAL_LOC + str(totalLOC) + "\n") Utilities.myPrint(CONSTS.TOTAL_LOC + str(totalLOC))
def getPhysicalResourceDeclarationCount(self): compiledRE = re.compile(r'\'.+\'\W*:|\".+\":') tempVar = compiledRE.findall(self.resourceText) Utilities.myPrint("Found file declarations: " + str(tempVar)) return len(tempVar)