aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaDeclObjC.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2011-02-15 17:49:58 +0000
committerFariborz Jahanian <fjahanian@apple.com>2011-02-15 17:49:58 +0000
commit5ac96d5f54a94d57f485de8103eb05a0f19e1c39 (patch)
treebf8f02cfe41de082b21b5831a67342a4a03b5f95 /lib/Sema/SemaDeclObjC.cpp
parent6cd370cc314a57c406920084170c4f353048c416 (diff)
Refactoring of code to issue warning on implemented
deprecated class and methods in objective-c. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125573 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclObjC.cpp')
-rw-r--r--lib/Sema/SemaDeclObjC.cpp59
1 files changed, 28 insertions, 31 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index 3aeb50b032..865f22aec5 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -24,6 +24,23 @@
using namespace clang;
+static void DiagnoseObjCImplementedDeprecations(Sema &S,
+ NamedDecl *ND,
+ SourceLocation ImplLoc,
+ int select) {
+
+ unsigned DIAG = diag::warn_depercated_def;
+ if (S.Diags.getDiagnosticLevel(DIAG, ImplLoc)== Diagnostic::Ignored)
+ return;
+ if (ND && ND->getAttr<DeprecatedAttr>()) {
+ S.Diag(ImplLoc, DIAG) << select;
+ if (select == 0)
+ S.Diag(ND->getLocation(), diag::note_method_declared_at);
+ else
+ S.Diag(ND->getLocation(), diag::note_previous_decl) << "class";
+ }
+}
+
/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible
/// and user declared, in the method definition's AST.
void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {
@@ -66,19 +83,12 @@ void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {
}
// Warn on implementating deprecated methods under
// -Wdeprecated-implementations flag.
- // FIXME. Refactor using common routine.
- unsigned DIAG = diag::warn_depercated_def;
- if (Diags.getDiagnosticLevel(DIAG, MDecl->getLocation())
- != Diagnostic::Ignored)
- if (ObjCInterfaceDecl *IC = MDecl->getClassInterface()) {
- if (ObjCMethodDecl *IMD =
+ if (ObjCInterfaceDecl *IC = MDecl->getClassInterface())
+ if (ObjCMethodDecl *IMD =
IC->lookupMethod(MDecl->getSelector(), MDecl->isInstanceMethod()))
- if (NamedDecl *ND = dyn_cast<NamedDecl>(IMD))
- if (ND->getAttr<DeprecatedAttr>()) {
- Diag(MDecl->getLocation(), DIAG) << 0;
- Diag(IMD->getLocation(), diag::note_method_declared_at);
- }
- }
+ DiagnoseObjCImplementedDeprecations(*this,
+ dyn_cast<NamedDecl>(IMD),
+ MDecl->getLocation(), 0);
}
Decl *Sema::
@@ -556,16 +566,9 @@ Decl *Sema::ActOnStartCategoryImplementation(
CatIDecl->setImplementation(CDecl);
// Warn on implementating category of deprecated class under
// -Wdeprecated-implementations flag.
- // FIXME. Refactor using common routine.
- unsigned DIAG = diag::warn_depercated_def;
- if (Diags.getDiagnosticLevel(DIAG, CDecl->getLocation())
- != Diagnostic::Ignored)
- if (NamedDecl *ND = dyn_cast<NamedDecl>(IDecl))
- if (ND->getAttr<DeprecatedAttr>()) {
- Diag(CDecl->getLocation(), DIAG) << 2;
- Diag(IDecl->getLocation(), diag::note_previous_decl) << "class";
- }
-
+ DiagnoseObjCImplementedDeprecations(*this,
+ dyn_cast<NamedDecl>(IDecl),
+ CDecl->getLocation(), 2);
}
}
@@ -677,15 +680,9 @@ Decl *Sema::ActOnStartClassImplementation(
PushOnScopeChains(IMPDecl, TUScope);
// Warn on implementating deprecated class under
// -Wdeprecated-implementations flag.
- // FIXME. Refactor using common routine.
- unsigned DIAG = diag::warn_depercated_def;
- if (Diags.getDiagnosticLevel(DIAG, IMPDecl->getLocation())
- != Diagnostic::Ignored)
- if (NamedDecl *ND = dyn_cast<NamedDecl>(IDecl))
- if (ND->getAttr<DeprecatedAttr>()) {
- Diag(IMPDecl->getLocation(), DIAG) << 1;
- Diag(IDecl->getLocation(), diag::note_previous_decl) << "class";
- }
+ DiagnoseObjCImplementedDeprecations(*this,
+ dyn_cast<NamedDecl>(IDecl),
+ IMPDecl->getLocation(), 1);
}
return IMPDecl;
}