@@ -798,83 +798,6 @@ ReturnInfo(ASTContext &Ctx, ArrayRef<ReturnInfo> Branches):
798798 }
799799}
800800
801- void swift::ide::getLocationInfoForClangNode (ClangNode ClangNode,
802- ClangImporter *Importer,
803- llvm::Optional<std::pair<unsigned , unsigned >> &DeclarationLoc,
804- StringRef &Filename) {
805- clang::ASTContext &ClangCtx = Importer->getClangASTContext ();
806- clang::SourceManager &ClangSM = ClangCtx.getSourceManager ();
807-
808- clang::SourceRange SR = ClangNode.getLocation ();
809- if (auto MD = dyn_cast_or_null<clang::ObjCMethodDecl>(ClangNode.getAsDecl ())) {
810- SR = clang::SourceRange (MD->getSelectorStartLoc (),
811- MD->getDeclaratorEndLoc ());
812- }
813-
814- clang::CharSourceRange CharRange =
815- clang::Lexer::makeFileCharRange (clang::CharSourceRange::getTokenRange (SR),
816- ClangSM, ClangCtx.getLangOpts ());
817- if (CharRange.isInvalid ())
818- return ;
819-
820- std::pair<clang::FileID, unsigned >
821- Decomp = ClangSM.getDecomposedLoc (CharRange.getBegin ());
822- if (!Decomp.first .isInvalid ()) {
823- if (auto FE = ClangSM.getFileEntryForID (Decomp.first )) {
824- Filename = FE->getName ();
825-
826- std::pair<clang::FileID, unsigned >
827- EndDecomp = ClangSM.getDecomposedLoc (CharRange.getEnd ());
828-
829- DeclarationLoc = { Decomp.second , EndDecomp.second -Decomp.second };
830- }
831- }
832- }
833-
834- static unsigned getCharLength (SourceManager &SM, SourceRange TokenRange) {
835- SourceLoc CharEndLoc = Lexer::getLocForEndOfToken (SM, TokenRange.End );
836- return SM.getByteDistance (TokenRange.Start , CharEndLoc);
837- }
838-
839- void swift::ide::getLocationInfo (const ValueDecl *VD,
840- llvm::Optional<std::pair<unsigned , unsigned >> &DeclarationLoc,
841- StringRef &Filename) {
842- ASTContext &Ctx = VD->getASTContext ();
843- SourceManager &SM = Ctx.SourceMgr ;
844-
845- auto ClangNode = VD->getClangNode ();
846-
847- if (VD->getLoc ().isValid ()) {
848- auto getSignatureRange = [&](const ValueDecl *VD) -> Optional<unsigned > {
849- if (auto FD = dyn_cast<AbstractFunctionDecl>(VD)) {
850- SourceRange R = FD->getSignatureSourceRange ();
851- if (R.isValid ())
852- return getCharLength (SM, R);
853- }
854- return None;
855- };
856- unsigned NameLen;
857- if (auto SigLen = getSignatureRange (VD)) {
858- NameLen = SigLen.getValue ();
859- } else if (VD->hasName ()) {
860- NameLen = VD->getBaseName ().userFacingName ().size ();
861- } else {
862- NameLen = getCharLength (SM, VD->getLoc ());
863- }
864-
865- unsigned DeclBufID = SM.findBufferContainingLoc (VD->getLoc ());
866- DeclarationLoc = { SM.getLocOffsetInBuffer (VD->getLoc (), DeclBufID),
867- NameLen };
868- Filename = SM.getIdentifierForBuffer (DeclBufID);
869-
870- } else if (ClangNode) {
871- ClangImporter *Importer =
872- static_cast <ClangImporter*>(Ctx.getClangModuleLoader ());
873- return getLocationInfoForClangNode (ClangNode, Importer,
874- DeclarationLoc, Filename);
875- }
876- }
877-
878801CharSourceRange CallArgInfo::getEntireCharRange (const SourceManager &SM) const {
879802 return CharSourceRange (SM, LabelRange.getStart (),
880803 Lexer::getLocForEndOfToken (SM, ArgExp->getEndLoc ()));
0 commit comments