Cherry-pick from master: AAPT2: Fix JavaDoc first sentence extraction.

The old algorithm for detecting the first sentence of a JavaDoc comment
looked for the first occurence of '.'. This does not work when code or a
{@link android.R.styleable} link is encountered in the first sentence.

Switch to checking for whitespace characters after the '.' character.

Bug: 62900335
Test: make aapt2_tests , make ds-docs
Original change-Id: I8238f6a6304c9c2f92e2e576ca8962a59c2b20ea

Change-Id: Ie272d0d793d157f2a30f3ead20b2b53976661d33
This commit is contained in:
Adam Lesinski
2017-07-24 18:19:36 -07:00
committed by Andrew Solovay
parent 7ceb8eff19
commit 18dc03a9fd
10 changed files with 119 additions and 39 deletions

View File

@@ -299,24 +299,16 @@ void JavaClassGenerator::ProcessStyleable(const ResourceNameRef& name, const Res
}
const ResourceName& attr_name = entry.attr_ref->name.value();
styleable_comment << "<tr><td>";
styleable_comment << "<code>{@link #" << entry.field_name << " "
<< (!attr_name.package.empty()
? attr_name.package
: context_->GetCompilationPackage())
<< ":" << attr_name.entry << "}</code>";
styleable_comment << "</td>";
styleable_comment << "<td>";
styleable_comment << "<tr><td><code>{@link #" << entry.field_name << " "
<< (!attr_name.package.empty() ? attr_name.package
: context_->GetCompilationPackage())
<< ":" << attr_name.entry << "}</code></td>";
// Only use the comment up until the first '.'. This is to stay compatible with
// the way old AAPT did it (presumably to keep it short and to avoid including
// annotations like @hide which would affect this Styleable).
auto iter = std::find(attr_comment_line.begin(), attr_comment_line.end(), '.');
if (iter != attr_comment_line.end()) {
attr_comment_line = attr_comment_line.substr(0, (iter - attr_comment_line.begin()) + 1);
}
styleable_comment << attr_comment_line << "</td></tr>\n";
styleable_comment << "<td>" << AnnotationProcessor::ExtractFirstSentence(attr_comment_line)
<< "</td></tr>\n";
}
styleable_comment << "</table>\n";