loplugin:unnecessaryvirtual
Change-Id: If25d9307efda5f57b0f80a0cf5c2c5cab6a752d6 Reviewed-on: https://gerrit.libreoffice.org/27981 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
This commit is contained in:
committed by
Noel Grandin
parent
8f25e553b9
commit
602647c241
@@ -1,28 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
import io
|
||||
|
||||
definitionSet = set()
|
||||
overridingSet = set()
|
||||
|
||||
|
||||
with io.open(sys.argv[1], "rb", buffering=1024*1024) as txt:
|
||||
for line in txt:
|
||||
|
||||
if line.startswith("definition:\t"):
|
||||
idx1 = line.find("\t")
|
||||
clazzName = line[idx1+1 : len(line)-1]
|
||||
definitionSet.add(clazzName)
|
||||
|
||||
elif line.startswith("overriding:\t"):
|
||||
idx1 = line.find("\t")
|
||||
clazzName = line[idx1+1 : len(line)-1]
|
||||
overridingSet.add(clazzName)
|
||||
|
||||
for clazz in sorted(definitionSet - overridingSet):
|
||||
print clazz
|
||||
|
||||
# add an empty line at the end to make it easier for the removevirtuals plugin to mmap() the output file
|
||||
print
|
||||
|
@@ -22,7 +22,7 @@ Then we will post-process the 2 lists and find the set of virtual methods which
|
||||
The process goes something like this:
|
||||
$ make check
|
||||
$ make FORCE_COMPILE_ALL=1 COMPILER_PLUGIN_TOOL='unnecessaryvirtual' check
|
||||
$ ./compilerplugins/clang/unnecessaryvirtual.py unnecessaryvirtual.log > result.txt
|
||||
$ ./compilerplugins/clang/unnecessaryvirtual.py
|
||||
$ for dir in *; do make FORCE_COMPILE_ALL=1 UPDATE_FILES=$dir COMPILER_PLUGIN_TOOL='removevirtuals' $dir; done
|
||||
|
||||
Note that the actual process may involve a fair amount of undoing, hand editing, and general messing around
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
for (const std::string & s : overridingSet)
|
||||
output += "overriding:\t" + s + "\n";
|
||||
ofstream myfile;
|
||||
myfile.open( SRCDIR "/unnecessaryvirtual.log", ios::app | ios::out);
|
||||
myfile.open( SRCDIR "/loplugin.unnecessaryvirtual.log", ios::app | ios::out);
|
||||
myfile << output;
|
||||
myfile.close();
|
||||
}
|
37
compilerplugins/clang/unnecessaryvirtual.py
Executable file
37
compilerplugins/clang/unnecessaryvirtual.py
Executable file
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
import io
|
||||
|
||||
definitionSet = set()
|
||||
overridingSet = set()
|
||||
|
||||
|
||||
with io.open("loplugin.unnecessaryvirtual.log", "rb", buffering=1024*1024) as txt:
|
||||
for line in txt:
|
||||
|
||||
if line.startswith("definition:\t"):
|
||||
idx1 = line.find("\t")
|
||||
clazzName = line[idx1+1 : len(line)-1]
|
||||
definitionSet.add(clazzName)
|
||||
|
||||
elif line.startswith("overriding:\t"):
|
||||
idx1 = line.find("\t")
|
||||
clazzName = line[idx1+1 : len(line)-1]
|
||||
overridingSet.add(clazzName)
|
||||
|
||||
with open("loplugin.unnecessaryvirtual.report", "wt") as f:
|
||||
for clazz in sorted(definitionSet - overridingSet):
|
||||
# external code
|
||||
if clazz.startswith("std::"): continue
|
||||
if clazz.startswith("icu_"): continue
|
||||
if clazz.startswith("__cxx"): continue
|
||||
# windows-specific stuff
|
||||
if clazz.startswith("canvas::"): continue
|
||||
if clazz.startswith("psp::PrinterInfoManager"): continue
|
||||
# some test magic
|
||||
if clazz.startswith("apitest::"): continue
|
||||
f.write(clazz + "\n")
|
||||
# add an empty line at the end to make it easier for the removevirtuals plugin to mmap() the output file
|
||||
f.write("\n")
|
||||
|
Reference in New Issue
Block a user