Add a presubmit check that catches |const NSString*| and friends.

BUG=TEST=none

Review URL: http://codereview.chromium.org/3082016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54925 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 4fd988d..4c0aff1 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -30,6 +30,27 @@
 )
 
 
+def _CheckConstNSObject(input_api, output_api, source_file_filter):
+  """Checks to make sure no objective-c files have |const NSSomeClass*|."""
+  pattern = input_api.re.compile(r'const\s+NS\w*\s*\*')
+  files = []
+  for f in input_api.AffectedSourceFiles(source_file_filter):
+    if f.LocalPath().endswith('.h') or f.LocalPath().endswith('.mm'):
+      contents = input_api.ReadFile(f)
+      if pattern.search(contents):
+        files.append(f)
+
+  if len(files):
+    if input_api.is_committing:
+      res_type = output_api.PresubmitPromptWarning
+    else:
+      res_type = output_api.PresubmitNotifyResult
+    return [ res_type('|const NSClass*| is wrong, see ' +
+                      'http://dev.chromium.org/developers/clang-mac',
+                      files) ]
+  return []
+
+
 def _CommonChecks(input_api, output_api):
   results = []
   # What does this code do?
@@ -58,6 +79,8 @@
       input_api, output_api))
   results.extend(input_api.canned_checks.CheckLicense(
       input_api, output_api, _LICENSE_HEADER, source_file_filter=sources))
+  results.extend(_CheckConstNSObject(
+      input_api, output_api, source_file_filter=sources))
   return results