From e99b37c8f271814ba63046bbde9af0c68e7a26c9 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Sat, 13 Jul 2013 00:04:20 +0000 Subject: [PATCH] ObjC migrator: More knobs for migrating conforming protocols to each class. wip. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186231 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ARCMigrate/ObjCMT.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index b170e08bb9..d80c6a1113 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -235,6 +235,13 @@ void ObjCMigrateASTConsumer::migrateObjCInterfaceDecl(ASTContext &Ctx, } } +static bool +ClassImplementsAllMethodsAndProprties(ASTContext &Ctx, + const ObjCImplementationDecl *ImpDecl, + ObjCProtocolDecl *Protocol) { + return false; +} + void ObjCMigrateASTConsumer::migrateProtocolConformance(ASTContext &Ctx, const ObjCImplementationDecl *ImpDecl) { const ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface(); @@ -244,16 +251,25 @@ void ObjCMigrateASTConsumer::migrateProtocolConformance(ASTContext &Ctx, // and make them explicit. llvm::SmallPtrSet ExplicitProtocols; Ctx.CollectInheritedProtocols(IDecl, ExplicitProtocols); - llvm::SmallPtrSet PotentialImplicitProtocols; + llvm::SmallVector PotentialImplicitProtocols; - for (llvm::SmallPtrSet::iterator I = + for (llvm::SmallPtrSet::iterator I = ObjCProtocolDecls.begin(), E = ObjCProtocolDecls.end(); I != E; ++I) if (!ExplicitProtocols.count(*I)) - PotentialImplicitProtocols.insert(*I); + PotentialImplicitProtocols.push_back(*I); if (PotentialImplicitProtocols.empty()) return; + + // go through list of non-optional methods and properties in each protocol + // in the PotentialImplicitProtocols list. If class implements every one of the + // methods and properties, then this class conforms to this protocol. + llvm::SmallVector ConformingProtocols; + for (unsigned i = 0, e = PotentialImplicitProtocols.size(); i != e; i++) + if (ClassImplementsAllMethodsAndProprties(Ctx, ImpDecl, + PotentialImplicitProtocols[i])) + ConformingProtocols.push_back(PotentialImplicitProtocols[i]); } namespace { -- 2.40.0