ObjCMethodDecl *OM,
ObjCInstanceTypeFamily OIT_Family = OIT_None);
- void migrateCFFunctions(ASTContext &Ctx,
- const FunctionDecl *FuncDecl);
+ void migrateCFAnnotation(ASTContext &Ctx, const Decl *Decl);
void AnnotateImplicitBridging(ASTContext &Ctx);
bool migrateAddMethodAnnotation(ASTContext &Ctx,
const ObjCMethodDecl *MethodDecl);
-
- void migrateMethodForCFAnnotation(ASTContext &Ctx,
- const ObjCMethodDecl *MethodDecl);
public:
std::string MigrateDir;
bool MigrateLiterals;
CFFunctionIBCandidates.clear();
}
-void ObjCMigrateASTConsumer::migrateCFFunctions(
- ASTContext &Ctx,
- const FunctionDecl *FuncDecl) {
- if (FuncDecl->hasAttr<CFAuditedTransferAttr>()) {
+void ObjCMigrateASTConsumer::migrateCFAnnotation(ASTContext &Ctx, const Decl *Decl) {
+ if (Decl->hasAttr<CFAuditedTransferAttr>()) {
assert(CFFunctionIBCandidates.empty() &&
- "Cannot have audited functions inside user "
+ "Cannot have audited functions/methods inside user "
"provided CF_IMPLICIT_BRIDGING_ENABLE");
return;
}
// Finction must be annotated first.
- bool Audited = migrateAddFunctionAnnotation(Ctx, FuncDecl);
+ bool Audited;
+ if (const FunctionDecl *FuncDecl = dyn_cast<FunctionDecl>(Decl))
+ Audited = migrateAddFunctionAnnotation(Ctx, FuncDecl);
+ else
+ Audited = migrateAddMethodAnnotation(Ctx, cast<ObjCMethodDecl>(Decl));
if (Audited) {
- CFFunctionIBCandidates.push_back(FuncDecl);
+ CFFunctionIBCandidates.push_back(Decl);
if (!FileId)
- FileId = PP.getSourceManager().getFileID(FuncDecl->getLocation()).getHashValue();
+ FileId = PP.getSourceManager().getFileID(Decl->getLocation()).getHashValue();
}
else
AnnotateImplicitBridging(Ctx);
}
bool ObjCMigrateASTConsumer::migrateAddFunctionAnnotation(
- ASTContext &Ctx,
- const FunctionDecl *FuncDecl) {
+ ASTContext &Ctx,
+ const FunctionDecl *FuncDecl) {
if (FuncDecl->hasBody())
return false;
MEnd = CDecl->meth_end();
M != MEnd; ++M) {
ObjCMethodDecl *Method = (*M);
- migrateMethodForCFAnnotation(Ctx, Method);
- }
-}
-
-void ObjCMigrateASTConsumer::migrateMethodForCFAnnotation(
- ASTContext &Ctx,
- const ObjCMethodDecl *MethodDecl) {
- if (MethodDecl->hasAttr<CFAuditedTransferAttr>()) {
- assert(CFFunctionIBCandidates.empty() &&
- "Cannot have audited method inside user "
- "provided CF_IMPLICIT_BRIDGING_ENABLE");
- return;
+ migrateCFAnnotation(Ctx, Method);
}
-
- // Method must be annotated first.
- bool Audited = migrateAddMethodAnnotation(Ctx, MethodDecl);
- if (Audited) {
- CFFunctionIBCandidates.push_back(MethodDecl);
- if (!FileId)
- FileId = PP.getSourceManager().getFileID(MethodDecl->getLocation()).getHashValue();
- }
- else
- AnnotateImplicitBridging(Ctx);
}
bool ObjCMigrateASTConsumer::migrateAddMethodAnnotation(ASTContext &Ctx,
migrateNSEnumDecl(Ctx, ED, TD);
}
else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*D))
- migrateCFFunctions(Ctx, FD);
+ migrateCFAnnotation(Ctx, FD);
if (ObjCContainerDecl *CDecl = dyn_cast<ObjCContainerDecl>(*D)) {
// migrate methods which can have instancetype as their result type.