Author: revane Date: Tue Aug 20 14:20:52 2013 New Revision: 188820 URL: http://llvm.org/viewvc/llvm-project?rev=188820&view=rev Log: cpp11-migrate: Use Replacement serialization from clang::tooling
Serialization of replacements has been moved to clang::tooling. Differential Revision: http://llvm-reviews.chandlerc.com/D1423 Removed: clang-tools-extra/trunk/cpp11-migrate/Core/ReplacementsYaml.h clang-tools-extra/trunk/unittests/cpp11-migrate/ReplacementsYamlTest.cpp Modified: clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.cpp clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.h clang-tools-extra/trunk/cpp11-migrate/Core/Reformatting.cpp clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp clang-tools-extra/trunk/test/cpp11-migrate/HeaderReplacements/common.h.yaml clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt Modified: clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.cpp?rev=188820&r1=188819&r2=188820&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.cpp (original) +++ clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.cpp Tue Aug 20 14:20:52 2013 @@ -19,6 +19,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Rewrite/Core/Rewriter.h" #include "clang/Tooling/Tooling.h" +#include "clang/Tooling/ReplacementsYaml.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" @@ -30,9 +31,9 @@ using namespace clang::tooling; void HeaderOverride::recordReplacements( const clang::tooling::Replacements &Replaces) { - MigratorDoc.Replacements.resize(Replaces.size()); + Replacements.Replacements.resize(Replaces.size()); std::copy(Replaces.begin(), Replaces.end(), - MigratorDoc.Replacements.begin()); + Replacements.Replacements.begin()); } SourceOverrides::SourceOverrides(llvm::StringRef MainFileName, @@ -93,7 +94,7 @@ void SourceOverrides::applyReplacements( // pipeline. HeaderOverride &HeaderOv = Headers[FileName]; // "Create" HeaderOverride if not already existing - if (HeaderOv.getFileName().empty()) + if (HeaderOv.getHeaderPath().empty()) HeaderOv = HeaderOverride(FileName, MainFileName); HeaderOv.swapContentOverride(ResultBuf); @@ -150,7 +151,7 @@ void SourceOverrides::applyOverrides(Sou assert(!I->second.getContentOverride().empty() && "Header override should not be empty!"); SM.overrideFileContents( - FM.getFile(I->second.getFileName()), + FM.getFile(I->second.getHeaderPath()), llvm::MemoryBuffer::getMemBuffer(I->second.getContentOverride())); } } Modified: clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.h?rev=188820&r1=188819&r2=188820&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.h (original) +++ clang-tools-extra/trunk/cpp11-migrate/Core/FileOverrides.h Tue Aug 20 14:20:52 2013 @@ -16,8 +16,8 @@ #ifndef CPP11_MIGRATE_FILE_OVERRIDES_H #define CPP11_MIGRATE_FILE_OVERRIDES_H -#include "Core/ReplacementsYaml.h" #include "clang/Tooling/Refactoring.h" +#include "clang/Tooling/ReplacementsYaml.h" #include "llvm/ADT/StringMap.h" // Forward Declarations @@ -64,16 +64,15 @@ public: /// \brief Constructors. /// @{ HeaderOverride() {} - HeaderOverride(llvm::StringRef TargetFile, - llvm::StringRef MainSourceFile) { - MigratorDoc.TargetFile = TargetFile; - MigratorDoc.MainSourceFile= MainSourceFile; + HeaderOverride(llvm::StringRef HeaderPath, + llvm::StringRef MainSourceFile) : HeaderPath(HeaderPath) { + Replacements.MainSourceFile = MainSourceFile; } /// @} - /// \brief Getter for FileName. - llvm::StringRef getFileName() const { - return MigratorDoc.TargetFile; + /// \brief Getter for HeaderPath. + llvm::StringRef getHeaderPath() const { + return HeaderPath; } /// \brief Accessor for ContentOverride. @@ -88,9 +87,9 @@ public: /// \brief Swaps the content of ContentOverride with \p S. void swapContentOverride(std::string &S) { ContentOverride.swap(S); } - /// \brief Getter for MigratorDoc. - const MigratorDocument &getMigratorDoc() const { - return MigratorDoc; + /// \brief Getter for Replacements. + const clang::tooling::TranslationUnitReplacements &getReplacements() const { + return Replacements; } /// \brief Stores the replacements made by a transform to the header this @@ -105,7 +104,8 @@ public: private: std::string ContentOverride; ChangedRanges Changes; - MigratorDocument MigratorDoc; + std::string HeaderPath; + clang::tooling::TranslationUnitReplacements Replacements; }; /// \brief Container mapping header file names to override information. Modified: clang-tools-extra/trunk/cpp11-migrate/Core/Reformatting.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/Reformatting.cpp?rev=188820&r1=188819&r2=188820&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/Core/Reformatting.cpp (original) +++ clang-tools-extra/trunk/cpp11-migrate/Core/Reformatting.cpp Tue Aug 20 14:20:52 2013 @@ -47,7 +47,7 @@ void Reformatter::reformatChanges(Source I != E; ++I) { const HeaderOverride &Header = I->getValue(); const tooling::Replacements &HeaderReplaces = - reformatSingleFile(Header.getFileName(), Header.getChanges(), SM); + reformatSingleFile(Header.getHeaderPath(), Header.getChanges(), SM); Replaces.insert(HeaderReplaces.begin(), HeaderReplaces.end()); } Overrides.applyReplacements(Replaces, SM); Removed: clang-tools-extra/trunk/cpp11-migrate/Core/ReplacementsYaml.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/ReplacementsYaml.h?rev=188819&view=auto ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/Core/ReplacementsYaml.h (original) +++ clang-tools-extra/trunk/cpp11-migrate/Core/ReplacementsYaml.h (removed) @@ -1,105 +0,0 @@ -//===-- Core/ReplacementsYaml.h ---------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// \brief This file provides functionality to serialize replacements for a -/// single file. It is used by the C++11 Migrator to store all the changes made -/// by a single transform to a particular file resulting from migrating a -/// translation unit of a particular main source file. -/// -//===----------------------------------------------------------------------===// - -#ifndef CPP11_MIGRATE_REPLACEMENTS_YAML_H -#define CPP11_MIGRATE_REPLACEMENTS_YAML_H - -#include "clang/Tooling/Refactoring.h" -#include "llvm/Support/YAMLTraits.h" -#include <vector> -#include <string> - -/// \brief The top-level YAML document that contains the details for the -/// replacement. -struct MigratorDocument { - std::vector<clang::tooling::Replacement> Replacements; - std::string TargetFile; - std::string MainSourceFile; -}; - -// FIXME: Put the YAML support for Replacement into clang::tooling. NOTE: The -// implementation below doesn't serialize the filename for Replacements. - -LLVM_YAML_IS_SEQUENCE_VECTOR(clang::tooling::Replacement) - -namespace llvm { -namespace yaml { - -/// \brief ScalarTraits to read/write std::string objects. -template <> -struct ScalarTraits<std::string> { - static void output(const std::string &Val, void *, llvm::raw_ostream &Out) { - // We need to put quotes around the string to make sure special characters - // in the string is not treated as YAML tokens. - std::string NormalizedVal = std::string("\"") + Val + std::string("\""); - Out << NormalizedVal; - } - - static StringRef input(StringRef Scalar, void *, std::string &Val) { - Val = Scalar; - return StringRef(); - } -}; - -/// \brief Specialized MappingTraits for Repleacements to be converted to/from -/// a YAML File. -template <> -struct MappingTraits<clang::tooling::Replacement> { - /// \brief Normalize clang::tooling::Replacement to provide direct access to - /// its members. - struct NormalizedReplacement { - NormalizedReplacement(const IO &) - : FilePath(""), Offset(0), Length(0), ReplacementText("") {} - - NormalizedReplacement(const IO &, const clang::tooling::Replacement &R) - : FilePath(R.getFilePath()), Offset(R.getOffset()), - Length(R.getLength()), ReplacementText(R.getReplacementText()) {} - - clang::tooling::Replacement denormalize(const IO &) { - return clang::tooling::Replacement(FilePath, Offset, Length, - ReplacementText); - } - - std::string FilePath; - unsigned int Offset; - unsigned int Length; - std::string ReplacementText; - }; - - static void mapping(IO &Io, clang::tooling::Replacement &R) { - MappingNormalization<NormalizedReplacement, clang::tooling::Replacement> - Keys(Io, R); - Io.mapRequired("Offset", Keys->Offset); - Io.mapRequired("Length", Keys->Length); - Io.mapRequired("ReplacementText", Keys->ReplacementText); - } -}; - -/// \brief Specialized MappingTraits for MigratorDocument to be converted -/// to/from a YAML File. -template <> -struct MappingTraits<MigratorDocument> { - static void mapping(IO &Io, MigratorDocument &TD) { - Io.mapRequired("Replacements", TD.Replacements); - Io.mapRequired("TargetFile", TD.TargetFile); - Io.mapRequired("MainSourceFile", TD.MainSourceFile); - } -}; -} // end namespace yaml -} // end namespace llvm - -#endif // CPP11_MIGRATE_REPLACEMENTS_YAML_H Modified: clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp?rev=188820&r1=188819&r2=188820&view=diff ============================================================================== --- clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp (original) +++ clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp Tue Aug 20 14:20:52 2013 @@ -379,8 +379,8 @@ int main(int argc, const char **argv) { continue; } llvm::yaml::Output YAML(ReplacementsFile); - YAML << const_cast<MigratorDocument &>( - HeaderI->getValue().getMigratorDoc()); + YAML << const_cast<TranslationUnitReplacements &>( + HeaderI->getValue().getReplacements()); } else { // If -yaml-only was not specified, then change headers on disk. // FIXME: This is transitional behaviour. Remove this functionality Modified: clang-tools-extra/trunk/test/cpp11-migrate/HeaderReplacements/common.h.yaml URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/cpp11-migrate/HeaderReplacements/common.h.yaml?rev=188820&r1=188819&r2=188820&view=diff ============================================================================== --- clang-tools-extra/trunk/test/cpp11-migrate/HeaderReplacements/common.h.yaml (original) +++ clang-tools-extra/trunk/test/cpp11-migrate/HeaderReplacements/common.h.yaml Tue Aug 20 14:20:52 2013 @@ -1,11 +1,12 @@ --- +MainSourceFile: "$(path)/main.cpp" Replacements: - - Offset: 432 + - FilePath: "$(path)/common.h" + Offset: 432 Length: 61 ReplacementText: "(auto & elem : C)" - - Offset: 506 + - FilePath: "$(path)/common.h" + Offset: 506 Length: 2 ReplacementText: "elem" -TargetFile: "$(path)/common.h" -MainSourceFile: "$(path)/main.cpp" ... Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt?rev=188820&r1=188819&r2=188820&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt (original) +++ clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt Tue Aug 20 14:20:52 2013 @@ -11,7 +11,6 @@ add_extra_unittest(Cpp11MigrateTests ReformattingTest.cpp IncludeExcludeTest.cpp PerfSupportTest.cpp - ReplacementsYamlTest.cpp TransformTest.cpp UniqueHeaderNameTest.cpp ) Removed: clang-tools-extra/trunk/unittests/cpp11-migrate/ReplacementsYamlTest.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/ReplacementsYamlTest.cpp?rev=188819&view=auto ============================================================================== --- clang-tools-extra/trunk/unittests/cpp11-migrate/ReplacementsYamlTest.cpp (original) +++ clang-tools-extra/trunk/unittests/cpp11-migrate/ReplacementsYamlTest.cpp (removed) @@ -1,73 +0,0 @@ -//===- unittests/cpp11-migrate/ReplacementsYamlTest.cpp -------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// Tests that change description files can be written and read. -// -//===----------------------------------------------------------------------===// - -#include "Utility.h" -#include "Core/FileOverrides.h" -#include "gtest/gtest.h" - -using namespace llvm; - -TEST(ReplacementsYamlTest, writeReadTest) { - using clang::tooling::Replacement; - - const std::string TargetFile = "/path/to/common.h"; - const std::string MainSourceFile = "/path/to/source.cpp"; - const unsigned int ReplacementOffset1 = 232; - const unsigned int ReplacementLength1 = 56; - const std::string ReplacementText1 = "(auto & elem : V)"; - const unsigned int ReplacementOffset2 = 301; - const unsigned int ReplacementLength2 = 2; - const std::string ReplacementText2 = "elem"; - - MigratorDocument Doc; - Doc.Replacements.push_back(Replacement(TargetFile, ReplacementOffset1, - ReplacementLength1, ReplacementText1)); - Doc.Replacements.push_back(Replacement(TargetFile, ReplacementOffset2, - ReplacementLength2, ReplacementText2)); - - Doc.TargetFile = TargetFile.c_str(); - Doc.MainSourceFile= MainSourceFile.c_str(); - - std::string YamlContent; - llvm::raw_string_ostream YamlContentStream(YamlContent); - - // Write to the YAML file. - { - yaml::Output YAML(YamlContentStream); - YAML << Doc; - YamlContentStream.str(); - ASSERT_NE(YamlContent.length(), 0u); - } - - // Read from the YAML file and verify that what was written is exactly what - // we read back. - { - MigratorDocument DocActual; - yaml::Input YAML(YamlContent); - YAML >> DocActual; - ASSERT_NO_ERROR(YAML.error()); - EXPECT_EQ(TargetFile, DocActual.TargetFile); - EXPECT_EQ(MainSourceFile, DocActual.MainSourceFile); - ASSERT_EQ(2u, DocActual.Replacements.size()); - - EXPECT_EQ(ReplacementOffset1, DocActual.Replacements[0].getOffset()); - EXPECT_EQ(ReplacementLength1, DocActual.Replacements[0].getLength()); - EXPECT_EQ(ReplacementText1, - DocActual.Replacements[0].getReplacementText().str()); - - EXPECT_EQ(ReplacementOffset2, DocActual.Replacements[1].getOffset()); - EXPECT_EQ(ReplacementLength2, DocActual.Replacements[1].getLength()); - EXPECT_EQ(ReplacementText2, - DocActual.Replacements[1].getReplacementText().str()); - } -} _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
