<div dir="ltr">Can I reproduce this somehow?</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 29, 2014 at 3:23 PM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This seems to have broken the Windows build. For example,<br>
<a href="http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/11259" target="_blank">http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/11259</a><br>
<br>
It seems that clang-format, is still dependent on AST via FrontendAction.<br>
<div class="HOEnZb"><div class="h5"><br>
On Wed, Oct 29, 2014 at 11:55 AM, Daniel Jasper <<a href="mailto:djasper@google.com">djasper@google.com</a>> wrote:<br>
> Author: djasper<br>
> Date: Wed Oct 29 13:55:09 2014<br>
> New Revision: 220867<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=220867&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=220867&view=rev</a><br>
> Log:<br>
> Refactor libTooling to reduce required dependencies.<br>
><br>
> This moves classes for storing and applying replacements to separate<br>
> files. These classes specifically are used by clang-format which doesn't<br>
> have any other dependencies on clangAST. Thereby, the size of<br>
> clang-format's binary can be cut roughly in half and its build time sped<br>
> up.<br>
><br>
> Added:<br>
> cfe/trunk/include/clang/Tooling/Core/<br>
> cfe/trunk/include/clang/Tooling/Core/Replacement.h<br>
> - copied, changed from r220860, cfe/trunk/include/clang/Tooling/Refactoring.h<br>
> cfe/trunk/lib/Tooling/Core/<br>
> cfe/trunk/lib/Tooling/Core/CMakeLists.txt<br>
> cfe/trunk/lib/Tooling/Core/Makefile<br>
> - copied, changed from r220860, cfe/trunk/lib/Tooling/Makefile<br>
> cfe/trunk/lib/Tooling/Core/Replacement.cpp<br>
> - copied, changed from r220860, cfe/trunk/lib/Tooling/Refactoring.cpp<br>
> Modified:<br>
> cfe/trunk/include/clang/Tooling/Refactoring.h<br>
> cfe/trunk/lib/Format/CMakeLists.txt<br>
> cfe/trunk/lib/Tooling/CMakeLists.txt<br>
> cfe/trunk/lib/Tooling/Makefile<br>
> cfe/trunk/lib/Tooling/Refactoring.cpp<br>
> cfe/trunk/tools/clang-format/CMakeLists.txt<br>
> cfe/trunk/tools/clang-format/Makefile<br>
> cfe/trunk/tools/libclang/Makefile<br>
> cfe/trunk/unittests/Format/CMakeLists.txt<br>
> cfe/trunk/unittests/Format/Makefile<br>
> cfe/trunk/unittests/Tooling/Makefile<br>
><br>
> Copied: cfe/trunk/include/clang/Tooling/Core/Replacement.h (from r220860, cfe/trunk/include/clang/Tooling/Refactoring.h)<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Core/Replacement.h?p2=cfe/trunk/include/clang/Tooling/Core/Replacement.h&p1=cfe/trunk/include/clang/Tooling/Refactoring.h&r1=220860&r2=220867&rev=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Core/Replacement.h?p2=cfe/trunk/include/clang/Tooling/Core/Replacement.h&p1=cfe/trunk/include/clang/Tooling/Refactoring.h&r1=220860&r2=220867&rev=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/include/clang/Tooling/Refactoring.h (original)<br>
> +++ cfe/trunk/include/clang/Tooling/Core/Replacement.h Wed Oct 29 13:55:09 2014<br>
> @@ -1,4 +1,4 @@<br>
> -//===--- Refactoring.h - Framework for clang refactoring tools --*- C++ -*-===//<br>
> +//===--- Replacement.h - Framework for clang refactoring tools --*- C++ -*-===//<br>
> //<br>
> // The LLVM Compiler Infrastructure<br>
> //<br>
> @@ -7,7 +7,7 @@<br>
> //<br>
> //===----------------------------------------------------------------------===//<br>
> //<br>
> -// Interfaces supporting refactorings that span multiple translation units.<br>
> +// Classes supporting refactorings that span multiple translation units.<br>
> // While single translation unit refactorings are supported via the Rewriter,<br>
> // when refactoring multiple translation units changes must be stored in a<br>
> // SourceManager independent form, duplicate changes need to be removed, and<br>
> @@ -16,19 +16,18 @@<br>
> //<br>
> //===----------------------------------------------------------------------===//<br>
><br>
> -#ifndef LLVM_CLANG_TOOLING_REFACTORING_H<br>
> -#define LLVM_CLANG_TOOLING_REFACTORING_H<br>
> +#ifndef LLVM_CLANG_TOOLING_CORE_REPLACEMENT_H<br>
> +#define LLVM_CLANG_TOOLING_CORE_REPLACEMENT_H<br>
><br>
> #include "clang/Basic/SourceLocation.h"<br>
> -#include "clang/Tooling/Tooling.h"<br>
> #include "llvm/ADT/StringRef.h"<br>
> #include <set><br>
> #include <string><br>
> +#include <vector><br>
><br>
> namespace clang {<br>
><br>
> class Rewriter;<br>
> -class SourceLocation;<br>
><br>
> namespace tooling {<br>
><br>
> @@ -193,42 +192,28 @@ struct TranslationUnitReplacements {<br>
> std::vector<Replacement> Replacements;<br>
> };<br>
><br>
> -/// \brief A tool to run refactorings.<br>
> +/// \brief Apply all replacements in \p Replaces to the Rewriter \p Rewrite.<br>
> ///<br>
> -/// This is a refactoring specific version of \see ClangTool. FrontendActions<br>
> -/// passed to run() and runAndSave() should add replacements to<br>
> -/// getReplacements().<br>
> -class RefactoringTool : public ClangTool {<br>
> -public:<br>
> - /// \see ClangTool::ClangTool.<br>
> - RefactoringTool(const CompilationDatabase &Compilations,<br>
> - ArrayRef<std::string> SourcePaths);<br>
> -<br>
> - /// \brief Returns the set of replacements to which replacements should<br>
> - /// be added during the run of the tool.<br>
> - Replacements &getReplacements();<br>
> -<br>
> - /// \brief Call run(), apply all generated replacements, and immediately save<br>
> - /// the results to disk.<br>
> - ///<br>
> - /// \returns 0 upon success. Non-zero upon failure.<br>
> - int runAndSave(FrontendActionFactory *ActionFactory);<br>
> -<br>
> - /// \brief Apply all stored replacements to the given Rewriter.<br>
> - ///<br>
> - /// Replacement applications happen independently of the success of other<br>
> - /// applications.<br>
> - ///<br>
> - /// \returns true if all replacements apply. false otherwise.<br>
> - bool applyAllReplacements(Rewriter &Rewrite);<br>
> +/// Replacement applications happen independently of the success of<br>
> +/// other applications.<br>
> +///<br>
> +/// \returns true if all replacements apply. false otherwise.<br>
> +bool applyAllReplacements(const Replacements &Replaces, Rewriter &Rewrite);<br>
><br>
> -private:<br>
> - /// \brief Write all refactored files to disk.<br>
> - int saveRewrittenFiles(Rewriter &Rewrite);<br>
> +/// \brief Apply all replacements in \p Replaces to the Rewriter \p Rewrite.<br>
> +///<br>
> +/// Replacement applications happen independently of the success of<br>
> +/// other applications.<br>
> +///<br>
> +/// \returns true if all replacements apply. false otherwise.<br>
> +bool applyAllReplacements(const std::vector<Replacement> &Replaces,<br>
> + Rewriter &Rewrite);<br>
><br>
> -private:<br>
> - Replacements Replace;<br>
> -};<br>
> +/// \brief Applies all replacements in \p Replaces to \p Code.<br>
> +///<br>
> +/// This completely ignores the path stored in each replacement. If one or more<br>
> +/// replacements cannot be applied, this returns an empty \c string.<br>
> +std::string applyAllReplacements(StringRef Code, const Replacements &Replaces);<br>
><br>
> template <typename Node><br>
> Replacement::Replacement(const SourceManager &Sources,<br>
> @@ -241,4 +226,4 @@ Replacement::Replacement(const SourceMan<br>
> } // end namespace tooling<br>
> } // end namespace clang<br>
><br>
> -#endif // LLVM_CLANG_TOOLING_REFACTORING_H<br>
> +#endif // LLVM_CLANG_TOOLING_CORE_REPLACEMENT_H<br>
><br>
> Modified: cfe/trunk/include/clang/Tooling/Refactoring.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Refactoring.h?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Refactoring.h?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/include/clang/Tooling/Refactoring.h (original)<br>
> +++ cfe/trunk/include/clang/Tooling/Refactoring.h Wed Oct 29 13:55:09 2014<br>
> @@ -19,180 +19,16 @@<br>
> #ifndef LLVM_CLANG_TOOLING_REFACTORING_H<br>
> #define LLVM_CLANG_TOOLING_REFACTORING_H<br>
><br>
> -#include "clang/Basic/SourceLocation.h"<br>
> +#include "clang/Tooling/Core/Replacement.h"<br>
> #include "clang/Tooling/Tooling.h"<br>
> -#include "llvm/ADT/StringRef.h"<br>
> -#include <set><br>
> #include <string><br>
><br>
> namespace clang {<br>
><br>
> class Rewriter;<br>
> -class SourceLocation;<br>
><br>
> namespace tooling {<br>
><br>
> -/// \brief A source range independent of the \c SourceManager.<br>
> -class Range {<br>
> -public:<br>
> - Range() : Offset(0), Length(0) {}<br>
> - Range(unsigned Offset, unsigned Length) : Offset(Offset), Length(Length) {}<br>
> -<br>
> - /// \brief Accessors.<br>
> - /// @{<br>
> - unsigned getOffset() const { return Offset; }<br>
> - unsigned getLength() const { return Length; }<br>
> - /// @}<br>
> -<br>
> - /// \name Range Predicates<br>
> - /// @{<br>
> - /// \brief Whether this range overlaps with \p RHS or not.<br>
> - bool overlapsWith(Range RHS) const {<br>
> - return Offset + Length > RHS.Offset && Offset < RHS.Offset + RHS.Length;<br>
> - }<br>
> -<br>
> - /// \brief Whether this range contains \p RHS or not.<br>
> - bool contains(Range RHS) const {<br>
> - return RHS.Offset >= Offset &&<br>
> - (RHS.Offset + RHS.Length) <= (Offset + Length);<br>
> - }<br>
> - /// @}<br>
> -<br>
> -private:<br>
> - unsigned Offset;<br>
> - unsigned Length;<br>
> -};<br>
> -<br>
> -/// \brief A text replacement.<br>
> -///<br>
> -/// Represents a SourceManager independent replacement of a range of text in a<br>
> -/// specific file.<br>
> -class Replacement {<br>
> -public:<br>
> - /// \brief Creates an invalid (not applicable) replacement.<br>
> - Replacement();<br>
> -<br>
> - /// \brief Creates a replacement of the range [Offset, Offset+Length) in<br>
> - /// FilePath with ReplacementText.<br>
> - ///<br>
> - /// \param FilePath A source file accessible via a SourceManager.<br>
> - /// \param Offset The byte offset of the start of the range in the file.<br>
> - /// \param Length The length of the range in bytes.<br>
> - Replacement(StringRef FilePath, unsigned Offset,<br>
> - unsigned Length, StringRef ReplacementText);<br>
> -<br>
> - /// \brief Creates a Replacement of the range [Start, Start+Length) with<br>
> - /// ReplacementText.<br>
> - Replacement(const SourceManager &Sources, SourceLocation Start, unsigned Length,<br>
> - StringRef ReplacementText);<br>
> -<br>
> - /// \brief Creates a Replacement of the given range with ReplacementText.<br>
> - Replacement(const SourceManager &Sources, const CharSourceRange &Range,<br>
> - StringRef ReplacementText);<br>
> -<br>
> - /// \brief Creates a Replacement of the node with ReplacementText.<br>
> - template <typename Node><br>
> - Replacement(const SourceManager &Sources, const Node &NodeToReplace,<br>
> - StringRef ReplacementText);<br>
> -<br>
> - /// \brief Returns whether this replacement can be applied to a file.<br>
> - ///<br>
> - /// Only replacements that are in a valid file can be applied.<br>
> - bool isApplicable() const;<br>
> -<br>
> - /// \brief Accessors.<br>
> - /// @{<br>
> - StringRef getFilePath() const { return FilePath; }<br>
> - unsigned getOffset() const { return ReplacementRange.getOffset(); }<br>
> - unsigned getLength() const { return ReplacementRange.getLength(); }<br>
> - StringRef getReplacementText() const { return ReplacementText; }<br>
> - /// @}<br>
> -<br>
> - /// \brief Applies the replacement on the Rewriter.<br>
> - bool apply(Rewriter &Rewrite) const;<br>
> -<br>
> - /// \brief Returns a human readable string representation.<br>
> - std::string toString() const;<br>
> -<br>
> - private:<br>
> - void setFromSourceLocation(const SourceManager &Sources, SourceLocation Start,<br>
> - unsigned Length, StringRef ReplacementText);<br>
> - void setFromSourceRange(const SourceManager &Sources,<br>
> - const CharSourceRange &Range,<br>
> - StringRef ReplacementText);<br>
> -<br>
> - std::string FilePath;<br>
> - Range ReplacementRange;<br>
> - std::string ReplacementText;<br>
> -};<br>
> -<br>
> -/// \brief Less-than operator between two Replacements.<br>
> -bool operator<(const Replacement &LHS, const Replacement &RHS);<br>
> -<br>
> -/// \brief Equal-to operator between two Replacements.<br>
> -bool operator==(const Replacement &LHS, const Replacement &RHS);<br>
> -<br>
> -/// \brief A set of Replacements.<br>
> -/// FIXME: Change to a vector and deduplicate in the RefactoringTool.<br>
> -typedef std::set<Replacement> Replacements;<br>
> -<br>
> -/// \brief Apply all replacements in \p Replaces to the Rewriter \p Rewrite.<br>
> -///<br>
> -/// Replacement applications happen independently of the success of<br>
> -/// other applications.<br>
> -///<br>
> -/// \returns true if all replacements apply. false otherwise.<br>
> -bool applyAllReplacements(const Replacements &Replaces, Rewriter &Rewrite);<br>
> -<br>
> -/// \brief Apply all replacements in \p Replaces to the Rewriter \p Rewrite.<br>
> -///<br>
> -/// Replacement applications happen independently of the success of<br>
> -/// other applications.<br>
> -///<br>
> -/// \returns true if all replacements apply. false otherwise.<br>
> -bool applyAllReplacements(const std::vector<Replacement> &Replaces,<br>
> - Rewriter &Rewrite);<br>
> -<br>
> -/// \brief Applies all replacements in \p Replaces to \p Code.<br>
> -///<br>
> -/// This completely ignores the path stored in each replacement. If one or more<br>
> -/// replacements cannot be applied, this returns an empty \c string.<br>
> -std::string applyAllReplacements(StringRef Code, const Replacements &Replaces);<br>
> -<br>
> -/// \brief Calculates how a code \p Position is shifted when \p Replaces are<br>
> -/// applied.<br>
> -unsigned shiftedCodePosition(const Replacements& Replaces, unsigned Position);<br>
> -<br>
> -/// \brief Calculates how a code \p Position is shifted when \p Replaces are<br>
> -/// applied.<br>
> -///<br>
> -/// \pre Replaces[i].getOffset() <= Replaces[i+1].getOffset().<br>
> -unsigned shiftedCodePosition(const std::vector<Replacement> &Replaces,<br>
> - unsigned Position);<br>
> -<br>
> -/// \brief Removes duplicate Replacements and reports if Replacements conflict<br>
> -/// with one another. All Replacements are assumed to be in the same file.<br>
> -///<br>
> -/// \post Replaces[i].getOffset() <= Replaces[i+1].getOffset().<br>
> -///<br>
> -/// This function sorts \p Replaces so that conflicts can be reported simply by<br>
> -/// offset into \p Replaces and number of elements in the conflict.<br>
> -void deduplicate(std::vector<Replacement> &Replaces,<br>
> - std::vector<Range> &Conflicts);<br>
> -<br>
> -/// \brief Collection of Replacements generated from a single translation unit.<br>
> -struct TranslationUnitReplacements {<br>
> - /// Name of the main source for the translation unit.<br>
> - std::string MainSourceFile;<br>
> -<br>
> - /// A freeform chunk of text to describe the context of the replacements.<br>
> - /// Will be printed, for example, when detecting conflicts during replacement<br>
> - /// deduplication.<br>
> - std::string Context;<br>
> -<br>
> - std::vector<Replacement> Replacements;<br>
> -};<br>
> -<br>
> /// \brief A tool to run refactorings.<br>
> ///<br>
> /// This is a refactoring specific version of \see ClangTool. FrontendActions<br>
> @@ -230,14 +66,6 @@ private:<br>
> Replacements Replace;<br>
> };<br>
><br>
> -template <typename Node><br>
> -Replacement::Replacement(const SourceManager &Sources,<br>
> - const Node &NodeToReplace, StringRef ReplacementText) {<br>
> - const CharSourceRange Range =<br>
> - CharSourceRange::getTokenRange(NodeToReplace->getSourceRange());<br>
> - setFromSourceRange(Sources, Range, ReplacementText);<br>
> -}<br>
> -<br>
> } // end namespace tooling<br>
> } // end namespace clang<br>
><br>
><br>
> Modified: cfe/trunk/lib/Format/CMakeLists.txt<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Format/CMakeLists.txt (original)<br>
> +++ cfe/trunk/lib/Format/CMakeLists.txt Wed Oct 29 13:55:09 2014<br>
> @@ -12,5 +12,5 @@ add_clang_library(clangFormat<br>
> LINK_LIBS<br>
> clangBasic<br>
> clangLex<br>
> - clangTooling<br>
> + clangToolingCore<br>
> )<br>
><br>
> Modified: cfe/trunk/lib/Tooling/CMakeLists.txt<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Tooling/CMakeLists.txt (original)<br>
> +++ cfe/trunk/lib/Tooling/CMakeLists.txt Wed Oct 29 13:55:09 2014<br>
> @@ -1,5 +1,7 @@<br>
> set(LLVM_LINK_COMPONENTS support)<br>
><br>
> +add_subdirectory(Core)<br>
> +<br>
> add_clang_library(clangTooling<br>
> ArgumentsAdjusters.cpp<br>
> CommonOptionsParser.cpp<br>
> @@ -18,4 +20,5 @@ add_clang_library(clangTooling<br>
> clangFrontend<br>
> clangLex<br>
> clangRewrite<br>
> + clangToolingCore<br>
> )<br>
><br>
> Added: cfe/trunk/lib/Tooling/Core/CMakeLists.txt<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/CMakeLists.txt?rev=220867&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/CMakeLists.txt?rev=220867&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Tooling/Core/CMakeLists.txt (added)<br>
> +++ cfe/trunk/lib/Tooling/Core/CMakeLists.txt Wed Oct 29 13:55:09 2014<br>
> @@ -0,0 +1,10 @@<br>
> +set(LLVM_LINK_COMPONENTS support)<br>
> +<br>
> +add_clang_library(clangToolingCore<br>
> + Replacement.cpp<br>
> +<br>
> + LINK_LIBS<br>
> + clangBasic<br>
> + clangDriver<br>
> + clangRewrite<br>
> + )<br>
><br>
> Copied: cfe/trunk/lib/Tooling/Core/Makefile (from r220860, cfe/trunk/lib/Tooling/Makefile)<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/Makefile?p2=cfe/trunk/lib/Tooling/Core/Makefile&p1=cfe/trunk/lib/Tooling/Makefile&r1=220860&r2=220867&rev=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/Makefile?p2=cfe/trunk/lib/Tooling/Core/Makefile&p1=cfe/trunk/lib/Tooling/Makefile&r1=220860&r2=220867&rev=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Tooling/Makefile (original)<br>
> +++ cfe/trunk/lib/Tooling/Core/Makefile Wed Oct 29 13:55:09 2014<br>
> @@ -1,4 +1,4 @@<br>
> -##===- clang/lib/Tooling/Makefile ---------------------------*- Makefile -*-===##<br>
> +##===- clang/lib/Tooling/Core/Makefile ---------------------*- Makefile -*-===##<br>
> #<br>
> # The LLVM Compiler Infrastructure<br>
> #<br>
> @@ -7,7 +7,7 @@<br>
> #<br>
> ##===----------------------------------------------------------------------===##<br>
><br>
> -CLANG_LEVEL := ../..<br>
> -LIBRARYNAME := clangTooling<br>
> +CLANG_LEVEL := ../../..<br>
> +LIBRARYNAME := clangToolingCore<br>
><br>
> include $(CLANG_LEVEL)/Makefile<br>
><br>
> Copied: cfe/trunk/lib/Tooling/Core/Replacement.cpp (from r220860, cfe/trunk/lib/Tooling/Refactoring.cpp)<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/Replacement.cpp?p2=cfe/trunk/lib/Tooling/Core/Replacement.cpp&p1=cfe/trunk/lib/Tooling/Refactoring.cpp&r1=220860&r2=220867&rev=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/Replacement.cpp?p2=cfe/trunk/lib/Tooling/Core/Replacement.cpp&p1=cfe/trunk/lib/Tooling/Refactoring.cpp&r1=220860&r2=220867&rev=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Tooling/Refactoring.cpp (original)<br>
> +++ cfe/trunk/lib/Tooling/Core/Replacement.cpp Wed Oct 29 13:55:09 2014<br>
> @@ -1,4 +1,4 @@<br>
> -//===--- Refactoring.cpp - Framework for clang refactoring tools ----------===//<br>
> +//===--- Replacement.cpp - Framework for clang refactoring tools ----------===//<br>
> //<br>
> // The LLVM Compiler Infrastructure<br>
> //<br>
> @@ -7,17 +7,18 @@<br>
> //<br>
> //===----------------------------------------------------------------------===//<br>
> //<br>
> -// Implements tools to support refactorings.<br>
> +// Implements classes to support/store refactorings.<br>
> //<br>
> //===----------------------------------------------------------------------===//<br>
><br>
> +#include "clang/Basic/Diagnostic.h"<br>
> +#include "clang/Basic/DiagnosticIDs.h"<br>
> #include "clang/Basic/DiagnosticOptions.h"<br>
> #include "clang/Basic/FileManager.h"<br>
> #include "clang/Basic/SourceManager.h"<br>
> -#include "clang/Frontend/TextDiagnosticPrinter.h"<br>
> #include "clang/Lex/Lexer.h"<br>
> #include "clang/Rewrite/Core/Rewriter.h"<br>
> -#include "clang/Tooling/Refactoring.h"<br>
> +#include "clang/Tooling/Core/Replacement.h"<br>
> #include "llvm/Support/FileSystem.h"<br>
> #include "llvm/Support/Path.h"<br>
> #include "llvm/Support/raw_os_ostream.h"<br>
> @@ -142,67 +143,6 @@ void Replacement::setFromSourceRange(con<br>
> getRangeSize(Sources, Range), ReplacementText);<br>
> }<br>
><br>
> -bool applyAllReplacements(const Replacements &Replaces, Rewriter &Rewrite) {<br>
> - bool Result = true;<br>
> - for (Replacements::const_iterator I = Replaces.begin(),<br>
> - E = Replaces.end();<br>
> - I != E; ++I) {<br>
> - if (I->isApplicable()) {<br>
> - Result = I->apply(Rewrite) && Result;<br>
> - } else {<br>
> - Result = false;<br>
> - }<br>
> - }<br>
> - return Result;<br>
> -}<br>
> -<br>
> -// FIXME: Remove this function when Replacements is implemented as std::vector<br>
> -// instead of std::set.<br>
> -bool applyAllReplacements(const std::vector<Replacement> &Replaces,<br>
> - Rewriter &Rewrite) {<br>
> - bool Result = true;<br>
> - for (std::vector<Replacement>::const_iterator I = Replaces.begin(),<br>
> - E = Replaces.end();<br>
> - I != E; ++I) {<br>
> - if (I->isApplicable()) {<br>
> - Result = I->apply(Rewrite) && Result;<br>
> - } else {<br>
> - Result = false;<br>
> - }<br>
> - }<br>
> - return Result;<br>
> -}<br>
> -<br>
> -std::string applyAllReplacements(StringRef Code, const Replacements &Replaces) {<br>
> - FileManager Files((FileSystemOptions()));<br>
> - DiagnosticsEngine Diagnostics(<br>
> - IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs),<br>
> - new DiagnosticOptions);<br>
> - Diagnostics.setClient(new TextDiagnosticPrinter(<br>
> - llvm::outs(), &Diagnostics.getDiagnosticOptions()));<br>
> - SourceManager SourceMgr(Diagnostics, Files);<br>
> - Rewriter Rewrite(SourceMgr, LangOptions());<br>
> - std::unique_ptr<llvm::MemoryBuffer> Buf =<br>
> - llvm::MemoryBuffer::getMemBuffer(Code, "<stdin>");<br>
> - const clang::FileEntry *Entry =<br>
> - Files.getVirtualFile("<stdin>", Buf->getBufferSize(), 0);<br>
> - SourceMgr.overrideFileContents(Entry, std::move(Buf));<br>
> - FileID ID =<br>
> - SourceMgr.createFileID(Entry, SourceLocation(), clang::SrcMgr::C_User);<br>
> - for (Replacements::const_iterator I = Replaces.begin(), E = Replaces.end();<br>
> - I != E; ++I) {<br>
> - Replacement Replace("<stdin>", I->getOffset(), I->getLength(),<br>
> - I->getReplacementText());<br>
> - if (!Replace.apply(Rewrite))<br>
> - return "";<br>
> - }<br>
> - std::string Result;<br>
> - llvm::raw_string_ostream OS(Result);<br>
> - Rewrite.getEditBuffer(ID).write(OS);<br>
> - OS.flush();<br>
> - return Result;<br>
> -}<br>
> -<br>
> unsigned shiftedCodePosition(const Replacements &Replaces, unsigned Position) {<br>
> unsigned NewPosition = Position;<br>
> for (Replacements::iterator I = Replaces.begin(), E = Replaces.end(); I != E;<br>
> @@ -285,41 +225,65 @@ void deduplicate(std::vector<Replacement<br>
> Conflicts.push_back(Range(ConflictStart, ConflictLength));<br>
> }<br>
><br>
> -<br>
> -RefactoringTool::RefactoringTool(const CompilationDatabase &Compilations,<br>
> - ArrayRef<std::string> SourcePaths)<br>
> - : ClangTool(Compilations, SourcePaths) {}<br>
> -<br>
> -Replacements &RefactoringTool::getReplacements() { return Replace; }<br>
> -<br>
> -int RefactoringTool::runAndSave(FrontendActionFactory *ActionFactory) {<br>
> - if (int Result = run(ActionFactory)) {<br>
> - return Result;<br>
> - }<br>
> -<br>
> - LangOptions DefaultLangOptions;<br>
> - IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();<br>
> - TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), &*DiagOpts);<br>
> - DiagnosticsEngine Diagnostics(<br>
> - IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()),<br>
> - &*DiagOpts, &DiagnosticPrinter, false);<br>
> - SourceManager Sources(Diagnostics, getFiles());<br>
> - Rewriter Rewrite(Sources, DefaultLangOptions);<br>
> -<br>
> - if (!applyAllReplacements(Rewrite)) {<br>
> - llvm::errs() << "Skipped some replacements.\n";<br>
> +bool applyAllReplacements(const Replacements &Replaces, Rewriter &Rewrite) {<br>
> + bool Result = true;<br>
> + for (Replacements::const_iterator I = Replaces.begin(),<br>
> + E = Replaces.end();<br>
> + I != E; ++I) {<br>
> + if (I->isApplicable()) {<br>
> + Result = I->apply(Rewrite) && Result;<br>
> + } else {<br>
> + Result = false;<br>
> + }<br>
> }<br>
> -<br>
> - return saveRewrittenFiles(Rewrite);<br>
> + return Result;<br>
> }<br>
><br>
> -bool RefactoringTool::applyAllReplacements(Rewriter &Rewrite) {<br>
> - return tooling::applyAllReplacements(Replace, Rewrite);<br>
> +// FIXME: Remove this function when Replacements is implemented as std::vector<br>
> +// instead of std::set.<br>
> +bool applyAllReplacements(const std::vector<Replacement> &Replaces,<br>
> + Rewriter &Rewrite) {<br>
> + bool Result = true;<br>
> + for (std::vector<Replacement>::const_iterator I = Replaces.begin(),<br>
> + E = Replaces.end();<br>
> + I != E; ++I) {<br>
> + if (I->isApplicable()) {<br>
> + Result = I->apply(Rewrite) && Result;<br>
> + } else {<br>
> + Result = false;<br>
> + }<br>
> + }<br>
> + return Result;<br>
> }<br>
><br>
> -int RefactoringTool::saveRewrittenFiles(Rewriter &Rewrite) {<br>
> - return Rewrite.overwriteChangedFiles() ? 1 : 0;<br>
> +std::string applyAllReplacements(StringRef Code, const Replacements &Replaces) {<br>
> + FileManager Files((FileSystemOptions()));<br>
> + DiagnosticsEngine Diagnostics(<br>
> + IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs),<br>
> + new DiagnosticOptions);<br>
> + SourceManager SourceMgr(Diagnostics, Files);<br>
> + Rewriter Rewrite(SourceMgr, LangOptions());<br>
> + std::unique_ptr<llvm::MemoryBuffer> Buf =<br>
> + llvm::MemoryBuffer::getMemBuffer(Code, "<stdin>");<br>
> + const clang::FileEntry *Entry =<br>
> + Files.getVirtualFile("<stdin>", Buf->getBufferSize(), 0);<br>
> + SourceMgr.overrideFileContents(Entry, std::move(Buf));<br>
> + FileID ID =<br>
> + SourceMgr.createFileID(Entry, SourceLocation(), clang::SrcMgr::C_User);<br>
> + for (Replacements::const_iterator I = Replaces.begin(), E = Replaces.end();<br>
> + I != E; ++I) {<br>
> + Replacement Replace("<stdin>", I->getOffset(), I->getLength(),<br>
> + I->getReplacementText());<br>
> + if (!Replace.apply(Rewrite))<br>
> + return "";<br>
> + }<br>
> + std::string Result;<br>
> + llvm::raw_string_ostream OS(Result);<br>
> + Rewrite.getEditBuffer(ID).write(OS);<br>
> + OS.flush();<br>
> + return Result;<br>
> }<br>
><br>
> } // end namespace tooling<br>
> } // end namespace clang<br>
> +<br>
><br>
> Modified: cfe/trunk/lib/Tooling/Makefile<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Makefile?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Makefile?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Tooling/Makefile (original)<br>
> +++ cfe/trunk/lib/Tooling/Makefile Wed Oct 29 13:55:09 2014<br>
> @@ -9,5 +9,6 @@<br>
><br>
> CLANG_LEVEL := ../..<br>
> LIBRARYNAME := clangTooling<br>
> +PARALLEL_DIRS := Core<br>
><br>
> include $(CLANG_LEVEL)/Makefile<br>
><br>
> Modified: cfe/trunk/lib/Tooling/Refactoring.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Refactoring.cpp?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Refactoring.cpp?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Tooling/Refactoring.cpp (original)<br>
> +++ cfe/trunk/lib/Tooling/Refactoring.cpp Wed Oct 29 13:55:09 2014<br>
> @@ -25,267 +25,6 @@<br>
> namespace clang {<br>
> namespace tooling {<br>
><br>
> -static const char * const InvalidLocation = "";<br>
> -<br>
> -Replacement::Replacement()<br>
> - : FilePath(InvalidLocation) {}<br>
> -<br>
> -Replacement::Replacement(StringRef FilePath, unsigned Offset, unsigned Length,<br>
> - StringRef ReplacementText)<br>
> - : FilePath(FilePath), ReplacementRange(Offset, Length),<br>
> - ReplacementText(ReplacementText) {}<br>
> -<br>
> -Replacement::Replacement(const SourceManager &Sources, SourceLocation Start,<br>
> - unsigned Length, StringRef ReplacementText) {<br>
> - setFromSourceLocation(Sources, Start, Length, ReplacementText);<br>
> -}<br>
> -<br>
> -Replacement::Replacement(const SourceManager &Sources,<br>
> - const CharSourceRange &Range,<br>
> - StringRef ReplacementText) {<br>
> - setFromSourceRange(Sources, Range, ReplacementText);<br>
> -}<br>
> -<br>
> -bool Replacement::isApplicable() const {<br>
> - return FilePath != InvalidLocation;<br>
> -}<br>
> -<br>
> -bool Replacement::apply(Rewriter &Rewrite) const {<br>
> - SourceManager &SM = Rewrite.getSourceMgr();<br>
> - const FileEntry *Entry = SM.getFileManager().getFile(FilePath);<br>
> - if (!Entry)<br>
> - return false;<br>
> - FileID ID;<br>
> - // FIXME: Use SM.translateFile directly.<br>
> - SourceLocation Location = SM.translateFileLineCol(Entry, 1, 1);<br>
> - ID = Location.isValid() ?<br>
> - SM.getFileID(Location) :<br>
> - SM.createFileID(Entry, SourceLocation(), SrcMgr::C_User);<br>
> - // FIXME: We cannot check whether Offset + Length is in the file, as<br>
> - // the remapping API is not public in the RewriteBuffer.<br>
> - const SourceLocation Start =<br>
> - SM.getLocForStartOfFile(ID).<br>
> - getLocWithOffset(ReplacementRange.getOffset());<br>
> - // ReplaceText returns false on success.<br>
> - // ReplaceText only fails if the source location is not a file location, in<br>
> - // which case we already returned false earlier.<br>
> - bool RewriteSucceeded = !Rewrite.ReplaceText(<br>
> - Start, ReplacementRange.getLength(), ReplacementText);<br>
> - assert(RewriteSucceeded);<br>
> - return RewriteSucceeded;<br>
> -}<br>
> -<br>
> -std::string Replacement::toString() const {<br>
> - std::string result;<br>
> - llvm::raw_string_ostream stream(result);<br>
> - stream << FilePath << ": " << ReplacementRange.getOffset() << ":+"<br>
> - << ReplacementRange.getLength() << ":\"" << ReplacementText << "\"";<br>
> - return result;<br>
> -}<br>
> -<br>
> -bool operator<(const Replacement &LHS, const Replacement &RHS) {<br>
> - if (LHS.getOffset() != RHS.getOffset())<br>
> - return LHS.getOffset() < RHS.getOffset();<br>
> - if (LHS.getLength() != RHS.getLength())<br>
> - return LHS.getLength() < RHS.getLength();<br>
> - if (LHS.getFilePath() != RHS.getFilePath())<br>
> - return LHS.getFilePath() < RHS.getFilePath();<br>
> - return LHS.getReplacementText() < RHS.getReplacementText();<br>
> -}<br>
> -<br>
> -bool operator==(const Replacement &LHS, const Replacement &RHS) {<br>
> - return LHS.getOffset() == RHS.getOffset() &&<br>
> - LHS.getLength() == RHS.getLength() &&<br>
> - LHS.getFilePath() == RHS.getFilePath() &&<br>
> - LHS.getReplacementText() == RHS.getReplacementText();<br>
> -}<br>
> -<br>
> -void Replacement::setFromSourceLocation(const SourceManager &Sources,<br>
> - SourceLocation Start, unsigned Length,<br>
> - StringRef ReplacementText) {<br>
> - const std::pair<FileID, unsigned> DecomposedLocation =<br>
> - Sources.getDecomposedLoc(Start);<br>
> - const FileEntry *Entry = Sources.getFileEntryForID(DecomposedLocation.first);<br>
> - if (Entry) {<br>
> - // Make FilePath absolute so replacements can be applied correctly when<br>
> - // relative paths for files are used.<br>
> - llvm::SmallString<256> FilePath(Entry->getName());<br>
> - std::error_code EC = llvm::sys::fs::make_absolute(FilePath);<br>
> - this->FilePath = EC ? FilePath.c_str() : Entry->getName();<br>
> - } else {<br>
> - this->FilePath = InvalidLocation;<br>
> - }<br>
> - this->ReplacementRange = Range(DecomposedLocation.second, Length);<br>
> - this->ReplacementText = ReplacementText;<br>
> -}<br>
> -<br>
> -// FIXME: This should go into the Lexer, but we need to figure out how<br>
> -// to handle ranges for refactoring in general first - there is no obvious<br>
> -// good way how to integrate this into the Lexer yet.<br>
> -static int getRangeSize(const SourceManager &Sources,<br>
> - const CharSourceRange &Range) {<br>
> - SourceLocation SpellingBegin = Sources.getSpellingLoc(Range.getBegin());<br>
> - SourceLocation SpellingEnd = Sources.getSpellingLoc(Range.getEnd());<br>
> - std::pair<FileID, unsigned> Start = Sources.getDecomposedLoc(SpellingBegin);<br>
> - std::pair<FileID, unsigned> End = Sources.getDecomposedLoc(SpellingEnd);<br>
> - if (Start.first != End.first) return -1;<br>
> - if (Range.isTokenRange())<br>
> - End.second += Lexer::MeasureTokenLength(SpellingEnd, Sources,<br>
> - LangOptions());<br>
> - return End.second - Start.second;<br>
> -}<br>
> -<br>
> -void Replacement::setFromSourceRange(const SourceManager &Sources,<br>
> - const CharSourceRange &Range,<br>
> - StringRef ReplacementText) {<br>
> - setFromSourceLocation(Sources, Sources.getSpellingLoc(Range.getBegin()),<br>
> - getRangeSize(Sources, Range), ReplacementText);<br>
> -}<br>
> -<br>
> -bool applyAllReplacements(const Replacements &Replaces, Rewriter &Rewrite) {<br>
> - bool Result = true;<br>
> - for (Replacements::const_iterator I = Replaces.begin(),<br>
> - E = Replaces.end();<br>
> - I != E; ++I) {<br>
> - if (I->isApplicable()) {<br>
> - Result = I->apply(Rewrite) && Result;<br>
> - } else {<br>
> - Result = false;<br>
> - }<br>
> - }<br>
> - return Result;<br>
> -}<br>
> -<br>
> -// FIXME: Remove this function when Replacements is implemented as std::vector<br>
> -// instead of std::set.<br>
> -bool applyAllReplacements(const std::vector<Replacement> &Replaces,<br>
> - Rewriter &Rewrite) {<br>
> - bool Result = true;<br>
> - for (std::vector<Replacement>::const_iterator I = Replaces.begin(),<br>
> - E = Replaces.end();<br>
> - I != E; ++I) {<br>
> - if (I->isApplicable()) {<br>
> - Result = I->apply(Rewrite) && Result;<br>
> - } else {<br>
> - Result = false;<br>
> - }<br>
> - }<br>
> - return Result;<br>
> -}<br>
> -<br>
> -std::string applyAllReplacements(StringRef Code, const Replacements &Replaces) {<br>
> - FileManager Files((FileSystemOptions()));<br>
> - DiagnosticsEngine Diagnostics(<br>
> - IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs),<br>
> - new DiagnosticOptions);<br>
> - Diagnostics.setClient(new TextDiagnosticPrinter(<br>
> - llvm::outs(), &Diagnostics.getDiagnosticOptions()));<br>
> - SourceManager SourceMgr(Diagnostics, Files);<br>
> - Rewriter Rewrite(SourceMgr, LangOptions());<br>
> - std::unique_ptr<llvm::MemoryBuffer> Buf =<br>
> - llvm::MemoryBuffer::getMemBuffer(Code, "<stdin>");<br>
> - const clang::FileEntry *Entry =<br>
> - Files.getVirtualFile("<stdin>", Buf->getBufferSize(), 0);<br>
> - SourceMgr.overrideFileContents(Entry, std::move(Buf));<br>
> - FileID ID =<br>
> - SourceMgr.createFileID(Entry, SourceLocation(), clang::SrcMgr::C_User);<br>
> - for (Replacements::const_iterator I = Replaces.begin(), E = Replaces.end();<br>
> - I != E; ++I) {<br>
> - Replacement Replace("<stdin>", I->getOffset(), I->getLength(),<br>
> - I->getReplacementText());<br>
> - if (!Replace.apply(Rewrite))<br>
> - return "";<br>
> - }<br>
> - std::string Result;<br>
> - llvm::raw_string_ostream OS(Result);<br>
> - Rewrite.getEditBuffer(ID).write(OS);<br>
> - OS.flush();<br>
> - return Result;<br>
> -}<br>
> -<br>
> -unsigned shiftedCodePosition(const Replacements &Replaces, unsigned Position) {<br>
> - unsigned NewPosition = Position;<br>
> - for (Replacements::iterator I = Replaces.begin(), E = Replaces.end(); I != E;<br>
> - ++I) {<br>
> - if (I->getOffset() >= Position)<br>
> - break;<br>
> - if (I->getOffset() + I->getLength() > Position)<br>
> - NewPosition += I->getOffset() + I->getLength() - Position;<br>
> - NewPosition += I->getReplacementText().size() - I->getLength();<br>
> - }<br>
> - return NewPosition;<br>
> -}<br>
> -<br>
> -// FIXME: Remove this function when Replacements is implemented as std::vector<br>
> -// instead of std::set.<br>
> -unsigned shiftedCodePosition(const std::vector<Replacement> &Replaces,<br>
> - unsigned Position) {<br>
> - unsigned NewPosition = Position;<br>
> - for (std::vector<Replacement>::const_iterator I = Replaces.begin(),<br>
> - E = Replaces.end();<br>
> - I != E; ++I) {<br>
> - if (I->getOffset() >= Position)<br>
> - break;<br>
> - if (I->getOffset() + I->getLength() > Position)<br>
> - NewPosition += I->getOffset() + I->getLength() - Position;<br>
> - NewPosition += I->getReplacementText().size() - I->getLength();<br>
> - }<br>
> - return NewPosition;<br>
> -}<br>
> -<br>
> -void deduplicate(std::vector<Replacement> &Replaces,<br>
> - std::vector<Range> &Conflicts) {<br>
> - if (Replaces.empty())<br>
> - return;<br>
> -<br>
> - auto LessNoPath = [](const Replacement &LHS, const Replacement &RHS) {<br>
> - if (LHS.getOffset() != RHS.getOffset())<br>
> - return LHS.getOffset() < RHS.getOffset();<br>
> - if (LHS.getLength() != RHS.getLength())<br>
> - return LHS.getLength() < RHS.getLength();<br>
> - return LHS.getReplacementText() < RHS.getReplacementText();<br>
> - };<br>
> -<br>
> - auto EqualNoPath = [](const Replacement &LHS, const Replacement &RHS) {<br>
> - return LHS.getOffset() == RHS.getOffset() &&<br>
> - LHS.getLength() == RHS.getLength() &&<br>
> - LHS.getReplacementText() == RHS.getReplacementText();<br>
> - };<br>
> -<br>
> - // Deduplicate. We don't want to deduplicate based on the path as we assume<br>
> - // that all replacements refer to the same file (or are symlinks).<br>
> - std::sort(Replaces.begin(), Replaces.end(), LessNoPath);<br>
> - Replaces.erase(std::unique(Replaces.begin(), Replaces.end(), EqualNoPath),<br>
> - Replaces.end());<br>
> -<br>
> - // Detect conflicts<br>
> - Range ConflictRange(Replaces.front().getOffset(),<br>
> - Replaces.front().getLength());<br>
> - unsigned ConflictStart = 0;<br>
> - unsigned ConflictLength = 1;<br>
> - for (unsigned i = 1; i < Replaces.size(); ++i) {<br>
> - Range Current(Replaces[i].getOffset(), Replaces[i].getLength());<br>
> - if (ConflictRange.overlapsWith(Current)) {<br>
> - // Extend conflicted range<br>
> - ConflictRange = Range(ConflictRange.getOffset(),<br>
> - std::max(ConflictRange.getLength(),<br>
> - Current.getOffset() + Current.getLength() -<br>
> - ConflictRange.getOffset()));<br>
> - ++ConflictLength;<br>
> - } else {<br>
> - if (ConflictLength > 1)<br>
> - Conflicts.push_back(Range(ConflictStart, ConflictLength));<br>
> - ConflictRange = Current;<br>
> - ConflictStart = i;<br>
> - ConflictLength = 1;<br>
> - }<br>
> - }<br>
> -<br>
> - if (ConflictLength > 1)<br>
> - Conflicts.push_back(Range(ConflictStart, ConflictLength));<br>
> -}<br>
> -<br>
> -<br>
> RefactoringTool::RefactoringTool(const CompilationDatabase &Compilations,<br>
> ArrayRef<std::string> SourcePaths)<br>
> : ClangTool(Compilations, SourcePaths) {}<br>
><br>
> Modified: cfe/trunk/tools/clang-format/CMakeLists.txt<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/tools/clang-format/CMakeLists.txt (original)<br>
> +++ cfe/trunk/tools/clang-format/CMakeLists.txt Wed Oct 29 13:55:09 2014<br>
> @@ -9,7 +9,6 @@ target_link_libraries(clang-format<br>
> clangFormat<br>
> clangLex<br>
> clangRewrite<br>
> - clangTooling<br>
> )<br>
><br>
> install(TARGETS clang-format RUNTIME DESTINATION bin)<br>
><br>
> Modified: cfe/trunk/tools/clang-format/Makefile<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/Makefile?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/Makefile?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/tools/clang-format/Makefile (original)<br>
> +++ cfe/trunk/tools/clang-format/Makefile Wed Oct 29 13:55:09 2014<br>
> @@ -16,9 +16,7 @@ TOOL_NO_EXPORTS = 1<br>
><br>
> include $(CLANG_LEVEL)/../../Makefile.config<br>
> LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option<br>
> -USEDLIBS = clangFormat.a clangTooling.a clangFrontend.a clangSerialization.a \<br>
> - clangDriver.a clangParse.a clangSema.a clangAnalysis.a \<br>
> - clangRewriteFrontend.a clangRewrite.a clangEdit.a clangAST.a \<br>
> +USEDLIBS = clangFormat.a clangToolingCore.a clangDriver.a clangRewrite.a \<br>
> clangLex.a clangBasic.a<br>
><br>
> include $(CLANG_LEVEL)/Makefile<br>
><br>
> Modified: cfe/trunk/tools/libclang/Makefile<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Makefile?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Makefile?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/tools/libclang/Makefile (original)<br>
> +++ cfe/trunk/tools/libclang/Makefile Wed Oct 29 13:55:09 2014<br>
> @@ -20,7 +20,7 @@ LINK_COMPONENTS := AsmParser BitReader C<br>
> USEDLIBS = clangIndex.a clangARCMigrate.a \<br>
> clangRewriteFrontend.a \<br>
> clangFormat.a \<br>
> - clangTooling.a \<br>
> + clangTooling.a clangToolingCore.a \<br>
> clangFrontend.a clangDriver.a \<br>
> clangSerialization.a \<br>
> clangParse.a clangSema.a \<br>
><br>
> Modified: cfe/trunk/unittests/Format/CMakeLists.txt<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/CMakeLists.txt?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/unittests/Format/CMakeLists.txt (original)<br>
> +++ cfe/trunk/unittests/Format/CMakeLists.txt Wed Oct 29 13:55:09 2014<br>
> @@ -11,5 +11,5 @@ add_clang_unittest(FormatTests<br>
><br>
> target_link_libraries(FormatTests<br>
> clangFormat<br>
> - clangTooling<br>
> + clangToolingCore<br>
> )<br>
><br>
> Modified: cfe/trunk/unittests/Format/Makefile<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/Makefile?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/Makefile?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/unittests/Format/Makefile (original)<br>
> +++ cfe/trunk/unittests/Format/Makefile Wed Oct 29 13:55:09 2014<br>
> @@ -11,8 +11,8 @@ CLANG_LEVEL = ../..<br>
> TESTNAME = Format<br>
> include $(CLANG_LEVEL)/../../Makefile.config<br>
> LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option<br>
> -USEDLIBS = clangFormat.a clangTooling.a clangFrontend.a clangSerialization.a \<br>
> - clangDriver.a clangParse.a clangRewrite.a \<br>
> +USEDLIBS = clangFormat.a clangTooling.a clangToolingCore.a clangFrontend.a \<br>
> + clangSerialization.a clangDriver.a clangParse.a clangRewrite.a \<br>
> clangRewriteFrontend.a clangSema.a clangAnalysis.a clangEdit.a \<br>
> clangAST.a clangASTMatchers.a clangLex.a clangBasic.a<br>
><br>
><br>
> Modified: cfe/trunk/unittests/Tooling/Makefile<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/Makefile?rev=220867&r1=220866&r2=220867&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/Makefile?rev=220867&r1=220866&r2=220867&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/unittests/Tooling/Makefile (original)<br>
> +++ cfe/trunk/unittests/Tooling/Makefile Wed Oct 29 13:55:09 2014<br>
> @@ -11,7 +11,8 @@ CLANG_LEVEL = ../..<br>
> TESTNAME = Tooling<br>
> include $(CLANG_LEVEL)/../../Makefile.config<br>
> LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option<br>
> -USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a \<br>
> +USEDLIBS = clangTooling.a clangToolingCore.a clangFrontend.a \<br>
> + clangSerialization.a clangDriver.a \<br>
> clangParse.a clangRewrite.a clangRewriteFrontend.a \<br>
> clangSema.a clangAnalysis.a clangEdit.a \<br>
> clangAST.a clangASTMatchers.a clangLex.a clangBasic.a<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div>