                           (str message "\n#### Manual followup required. ####")
                           "The technology does not synchronize."))))
 
+(defn- perf02-judicious-use-of-indexed-properties
+  [source content-index]
+  (let [matches (filter #(= :perf02 (:regex-id %)) content-index)
+        message (str "Indexed content model properties:\n"
+                     (s/join "\n"
+                             (map #(str (subs (str (:file %)) (.length ^String source)) " line " (:line-number %) ": " (:line %))
+                                  matches)))]
+      (build-bookmark-map "PERF02"
+                          (empty? matches)
+                          (str message "\n#### Manual followup required. ####")
+                          "The technology does not index any content model properties.")))
+
 (defn validate
   "Runs all source-based validations."
   [source]

    :xml                    #".*\.xml"
    :web-script-descriptors #".*\.desc\.xml"
    :spring-app-context     #".*-context\.xml"
    :ant                    #"build\.xml"
    :maven                  #"pom\.xml"
    :gradle                 #"build\.gradle"

        file-index    (build-file-types-index files)
        content-index (build-content-index file-index)]
    (merge
      (detect-build-tools                         file-index)
      (module-versions                            content-index)
      (alfresco-min-versions                      content-index)
      (alfresco-max-versions                      content-index)
      (stb08-stb09-use-of-synchronized            source content-index)
      (api05-inject-serviceregistry-not-services  source content-index)
      (perf02-judicious-use-of-indexed-properties source content-index)
    )))
  