[clang-tools-extra] r188820 - cpp11-migrate: Use Replacement serialization from clang::tooling

Edwin Vane edwin.vane at intel.com
Tue Aug 20 12:20:52 PDT 2013


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());
-  }
-}





More information about the cfe-commits mailing list