зеркало из https://github.com/microsoft/clang-1.git
Have the UnusedIvar check skip ivars with setters/getters created by @synthesize.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54050 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
abfaf9984e
Коммит
694eefb745
|
@ -35,12 +35,26 @@ static void Scan(IvarUsageMap& M, Stmt* S) {
|
|||
ObjCIvarDecl* D = Ex->getDecl();
|
||||
IvarUsageMap::iterator I = M.find(D);
|
||||
if (I != M.end()) I->second = Used;
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I!=E;++I)
|
||||
Scan(M, *I);
|
||||
}
|
||||
|
||||
static void Scan(IvarUsageMap& M, ObjCPropertyImplDecl* D) {
|
||||
if (!D)
|
||||
return;
|
||||
|
||||
ObjCIvarDecl* ID = D->getPropertyIvarDecl();
|
||||
|
||||
if (!ID)
|
||||
return;
|
||||
|
||||
IvarUsageMap::iterator I = M.find(ID);
|
||||
if (I != M.end()) I->second = Used;
|
||||
}
|
||||
|
||||
void clang::CheckObjCUnusedIvar(ObjCImplementationDecl* D, BugReporter& BR) {
|
||||
|
||||
ObjCInterfaceDecl* ID = D->getClassInterface();
|
||||
|
@ -73,13 +87,21 @@ void clang::CheckObjCUnusedIvar(ObjCImplementationDecl* D, BugReporter& BR) {
|
|||
E = D->instmeth_end(); I!=E; ++I)
|
||||
Scan(M, (*I)->getBody());
|
||||
|
||||
// Scan for @synthesized property methods that act as setters/getters
|
||||
// to an ivar.
|
||||
for (ObjCImplementationDecl::propimpl_iterator I = D->propimpl_begin(),
|
||||
E = D->propimpl_end(); I!=E; ++I)
|
||||
Scan(M, *I);
|
||||
|
||||
// Find ivars that are unused.
|
||||
for (IvarUsageMap::iterator I = M.begin(), E = M.end(); I!=E; ++I)
|
||||
if (I->second == Unused) {
|
||||
|
||||
std::ostringstream os;
|
||||
os << "Instance variable '" << I->first->getName()
|
||||
<< "' in class '" << ID->getName() << "' is never used.";
|
||||
<< "' in class '" << ID->getName()
|
||||
<< "' is never used by the methods in its @implementation "
|
||||
"(although it may be used by category methods).";
|
||||
|
||||
BR.EmitBasicReport("unused ivar",
|
||||
os.str().c_str(), I->first->getLocation());
|
||||
|
|
Загрузка…
Ссылка в новой задаче