dexlayout: ProcessOffset in WriteHiddenapiClassData

WriteHiddenapiClassData would not call ProcessOffset before starting to
write data. This is only a problem if compute_offsets_ is false as it
would continue writing where previous section left off and that place
not being the end of the file.

This fixes dexlayout_test gtest.

Bug: 123150330
Test: m test-art-host-gtest-dexlayout_test
Change-Id: I552122d0968584db4a53d7219986f9693210b1e1
diff --git a/dexlayout/dex_writer.cc b/dexlayout/dex_writer.cc
index 143f5b0..268abe4 100644
--- a/dexlayout/dex_writer.cc
+++ b/dexlayout/dex_writer.cc
@@ -469,6 +469,7 @@
   DCHECK_EQ(header_->HiddenapiClassDatas().Size(), header_->ClassDefs().Size());
 
   stream->AlignTo(SectionAlignment(DexFile::kDexTypeHiddenapiClassData));
+  ProcessOffset(stream, &header_->HiddenapiClassDatas());
   const uint32_t start = stream->Tell();
 
   // Compute offsets for each class def and write the header.
@@ -989,6 +990,15 @@
   }
 }
 
+void DexWriter::ProcessOffset(Stream* stream, dex_ir::CollectionBase* item) {
+  if (compute_offsets_) {
+    item->SetOffset(stream->Tell());
+  } else {
+    // Not computing offsets, just use the one in the item.
+    stream->Seek(item->GetOffset());
+  }
+}
+
 std::unique_ptr<DexContainer> DexWriter::CreateDexContainer() const {
   return std::unique_ptr<DexContainer>(new DexWriter::Container);
 }
diff --git a/dexlayout/dex_writer.h b/dexlayout/dex_writer.h
index 98041d3..62247ec 100644
--- a/dexlayout/dex_writer.h
+++ b/dexlayout/dex_writer.h
@@ -271,6 +271,7 @@
   // Process an offset, if compute_offset is set, write into the dex ir item, otherwise read the
   // existing offset and use that for writing.
   void ProcessOffset(Stream* stream, dex_ir::Item* item);
+  void ProcessOffset(Stream* stream, dex_ir::CollectionBase* item);
 
   dex_ir::Header* const header_;
   DexLayout* const dex_layout_;