Implement "file:..." statement and directive

* See semantics and examples in updated syntax.md.
* Add new feature:
  * Accept new file: statement/directive in OwnersValidator.java
    but still not checking the content of included files.
  * Parser.FILE_DIRECTIVE defined as one pattern used in per-file.
  * Add Parser.IncludeStack to keep track of included project:file.
  * Factor out Parser.includeFile to handle all "include" and "file:"
    statements or directives.
* Reduce repeated inclusion and parsing:
  * Keep readFiles in OwnersDb to read one repository file only once.
  * Add Parser.savedResults to avoid parsing a file multiple times.
* Improve log and error messages:
  * Shorten log message: () for empty content, (...) for non-empty.
  * Keep Parser warnings and errors as sets to avoid duplication.
    Sort all unique warnings and errors before dump to logger.
  * Rename parseLine:skip messages to
    parseLine:errorRecursion and parseLine:useSaved
* Add documents and tests:
  * Add more JavaDoc comments to Parser.java.
  * Update syntax.md to include "file:" statement and directive.
  * Add test cases in FindOwnersIT, ParserTest, OwnersValidatorTest.
  * Reduce dependency on myProjectName

Change-Id: I235bbdd70ecaded4b20767eac0abbe27e6061b01
7 files changed
tree: c9869de124fe43d28c3e35dda9589097b0bc2754
  1. src/
  2. BUILD
  3. LICENSE
  4. OWNERS