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:
Noel Grandin
2016-08-08 09:57:25 +02:00
committed by Noel Grandin
parent 8f25e553b9
commit 602647c241
20 changed files with 55 additions and 84 deletions

View File

@@ -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

View File

@@ -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();
}

View 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")