Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Unified Diff: tools/clang/plugins/ChromeClassTester.cpp

Issue 1504033010: Follow macro invocations when checking if a violation happened in a .cc file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Check every file in the macro instantiation chain. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/clang/plugins/ChromeClassTester.cpp
diff --git a/tools/clang/plugins/ChromeClassTester.cpp b/tools/clang/plugins/ChromeClassTester.cpp
index 8d0b22d0cce786dc2953c4fadf6647a59debbbc5..b39e14a0e2b08cfa8de907a4894c7af244cf1973 100644
--- a/tools/clang/plugins/ChromeClassTester.cpp
+++ b/tools/clang/plugins/ChromeClassTester.cpp
@@ -189,12 +189,31 @@ std::string ChromeClassTester::GetNamespace(const Decl* record) {
bool ChromeClassTester::InImplementationFile(SourceLocation record_location) {
std::string filename;
- if (!GetFilename(record_location, &filename))
- return false;
- if (ends_with(filename, ".cc") || ends_with(filename, ".cpp") ||
- ends_with(filename, ".mm")) {
- return true;
+ if (options_.follow_macro_expansion) {
+ // If |record_location| is a macro, check the whole chain of expansions.
+ const SourceManager& source_manager = instance_.getSourceManager();
+ while (true) {
+ if (GetFilename(record_location, &filename)) {
+ if (ends_with(filename, ".cc") || ends_with(filename, ".cpp") ||
+ ends_with(filename, ".mm")) {
+ return true;
+ }
+ }
+ if (!record_location.isMacroID()) {
+ break;
+ }
+ record_location =
+ source_manager.getImmediateExpansionRange(record_location).first;
+ }
+ } else {
+ if (!GetFilename(record_location, &filename))
+ return false;
+
+ if (ends_with(filename, ".cc") || ends_with(filename, ".cpp") ||
+ ends_with(filename, ".mm")) {
+ return true;
+ }
}
return false;
« no previous file with comments | « no previous file | tools/clang/plugins/FindBadConstructsAction.cpp » ('j') | tools/clang/plugins/tests/inline_ctor.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698