new loplugin to find public methods that can be private
based on the unusedmethods plugin, which I should probably rename at some point Change-Id: If197423c59d4350ea1fdc69e99d24b631d9751b9
This commit is contained in:
@@ -5,10 +5,13 @@ import re
|
||||
import io
|
||||
|
||||
definitionSet = set()
|
||||
publicDefinitionSet = set()
|
||||
definitionToSourceLocationMap = dict()
|
||||
callSet = set()
|
||||
returnSet = set()
|
||||
usedReturnSet = set()
|
||||
sourceLocationSet = set()
|
||||
calledFromOutsideSet = set()
|
||||
|
||||
# things we need to exclude for reasons like :
|
||||
# - it's a weird template thingy that confuses the plugin
|
||||
exclusionSet = set([
|
||||
@@ -120,19 +123,35 @@ with io.open(sys.argv[1], "rb", buffering=1024*1024) as txt:
|
||||
if line.startswith("definition:\t"):
|
||||
idx1 = line.find("\t",12)
|
||||
idx2 = line.find("\t",idx1+1)
|
||||
funcInfo = (normalizeTypeParams(line[12:idx1]), normalizeTypeParams(line[idx1+1:idx2]))
|
||||
idx3 = line.find("\t",idx2+1)
|
||||
access = line[12:idx1]
|
||||
returnType = line[idx1+1:idx2]
|
||||
nameAndParams = line[idx2+1:idx3]
|
||||
sourceLocation = line[idx3+1:].strip()
|
||||
funcInfo = (normalizeTypeParams(returnType), normalizeTypeParams(nameAndParams))
|
||||
definitionSet.add(funcInfo)
|
||||
definitionToSourceLocationMap[funcInfo] = line[idx2+1:].strip()
|
||||
if access == "public":
|
||||
publicDefinitionSet.add(funcInfo)
|
||||
definitionToSourceLocationMap[funcInfo] = sourceLocation
|
||||
elif line.startswith("call:\t"):
|
||||
idx1 = line.find("\t",6)
|
||||
callSet.add((normalizeTypeParams(line[6:idx1]), normalizeTypeParams(line[idx1+1:].strip())))
|
||||
returnType = line[6:idx1]
|
||||
nameAndParams = line[idx1+1:].strip()
|
||||
callSet.add((normalizeTypeParams(returnType), normalizeTypeParams(nameAndParams)))
|
||||
elif line.startswith("usedReturn:\t"):
|
||||
idx1 = line.find("\t",12)
|
||||
returnSet.add((normalizeTypeParams(line[12:idx1]), normalizeTypeParams(line[idx1+1:].strip())))
|
||||
returnType = line[12:idx1]
|
||||
nameAndParams = line[idx1+1:].strip()
|
||||
usedReturnSet.add((normalizeTypeParams(returnType), normalizeTypeParams(nameAndParams)))
|
||||
elif line.startswith("calledFromOutsideSet:\t"):
|
||||
idx1 = line.find("\t",22)
|
||||
returnType = line[22:idx1]
|
||||
nameAndParams = line[idx1+1:].strip()
|
||||
calledFromOutsideSet.add((normalizeTypeParams(returnType), normalizeTypeParams(nameAndParams)))
|
||||
|
||||
# Invert the definitionToSourceLocationMap
|
||||
# Invert the definitionToSourceLocationMap.
|
||||
# If we see more than one method at the same sourceLocation, it's being autogenerated as part of a template
|
||||
# and we should just ignore
|
||||
# and we should just ignore it.
|
||||
sourceLocationToDefinitionMap = {}
|
||||
for k, v in definitionToSourceLocationMap.iteritems():
|
||||
sourceLocationToDefinitionMap[v] = sourceLocationToDefinitionMap.get(v, [])
|
||||
@@ -253,11 +272,9 @@ tmp1list = sorted(tmp1set, key=lambda v: natural_sort_key(v[1]))
|
||||
tmp2set = set()
|
||||
for d in definitionSet:
|
||||
clazz = d[0] + " " + d[1]
|
||||
if clazz in exclusionSet:
|
||||
if d in usedReturnSet:
|
||||
continue
|
||||
if d in returnSet:
|
||||
continue
|
||||
if isOtherConstness(d, returnSet):
|
||||
if isOtherConstness(d, usedReturnSet):
|
||||
continue
|
||||
if d[0] == "void":
|
||||
continue
|
||||
@@ -287,7 +304,31 @@ for d in definitionSet:
|
||||
# sort results by name and line number
|
||||
tmp2list = sorted(tmp2set, key=lambda v: natural_sort_key(v[1]))
|
||||
|
||||
for t in tmp2list:
|
||||
#for t in tmp2list:
|
||||
# print t[1]
|
||||
# print " ", t[0]
|
||||
|
||||
|
||||
# -------------------------------------------
|
||||
# Do the "unnecessary public" part
|
||||
# -------------------------------------------
|
||||
|
||||
tmp3set = set()
|
||||
for d in publicDefinitionSet:
|
||||
clazz = d[0] + " " + d[1]
|
||||
if d in calledFromOutsideSet:
|
||||
continue
|
||||
if isOtherConstness(d, calledFromOutsideSet):
|
||||
continue
|
||||
# ignore external code
|
||||
if definitionToSourceLocationMap[d].startswith("external/"):
|
||||
continue
|
||||
tmp3set.add((clazz, definitionToSourceLocationMap[d]))
|
||||
|
||||
# sort results by name and line number
|
||||
tmp3list = sorted(tmp3set, key=lambda v: natural_sort_key(v[1]))
|
||||
|
||||
for t in tmp3list:
|
||||
print t[1]
|
||||
print " ", t[0]
|
||||
|
||||
|
Reference in New Issue
Block a user