Remove CPDF_Object friends

This CL removes the friends from CPDF_Object and adds accessors as
needed. The m_GenNum was moved to a private member as none of the
overriding classes needed access.

Change-Id: If23a1a6752dea31eb80669a36694973f3c581123
Reviewed-on: https://pdfium-review.googlesource.com/15470
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
index 2a57411..42e312c 100644
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
@@ -52,7 +52,7 @@
     return nullptr;
   }
 
-  pNewObj->m_ObjNum = objnum;
+  pNewObj->SetObjNum(objnum);
   m_LastObjNum = std::max(m_LastObjNum, objnum);
   insert_result.first->second = std::move(pNewObj);
   return insert_result.first->second.get();
@@ -65,8 +65,8 @@
 
 CPDF_Object* CPDF_IndirectObjectHolder::AddIndirectObject(
     std::unique_ptr<CPDF_Object> pObj) {
-  CHECK(!pObj->m_ObjNum);
-  pObj->m_ObjNum = ++m_LastObjNum;
+  CHECK(!pObj->GetObjNum());
+  pObj->SetObjNum(++m_LastObjNum);
 
   auto& obj_holder = m_IndirectObjs[m_LastObjNum];
   if (obj_holder)
@@ -84,13 +84,11 @@
     return false;
 
   auto& obj_holder = m_IndirectObjs[objnum];
-
   const CPDF_Object* old_object = FilterInvalidObjNum(obj_holder.get());
-
   if (old_object && pObj->GetGenNum() <= old_object->GetGenNum())
     return false;
 
-  pObj->m_ObjNum = objnum;
+  pObj->SetObjNum(objnum);
   if (obj_holder)
     m_OrphanObjs.push_back(std::move(obj_holder));
 
diff --git a/core/fpdfapi/parser/cpdf_object.h b/core/fpdfapi/parser/cpdf_object.h
index 4d4279f..7a14492 100644
--- a/core/fpdfapi/parser/cpdf_object.h
+++ b/core/fpdfapi/parser/cpdf_object.h
@@ -44,7 +44,9 @@
 
   virtual Type GetType() const = 0;
   uint32_t GetObjNum() const { return m_ObjNum; }
+  void SetObjNum(uint32_t objnum) { m_ObjNum = objnum; }
   uint32_t GetGenNum() const { return m_GenNum; }
+  void SetGenNum(uint32_t gennum) { m_GenNum = gennum; }
   bool IsInline() const { return m_ObjNum == 0; }
 
   // Create a deep copy of the object.
@@ -92,18 +94,6 @@
 
   virtual bool WriteTo(IFX_ArchiveStream* archive) const = 0;
 
- protected:
-  friend class CPDF_Array;
-  friend class CPDF_Dictionary;
-  friend class CPDF_IndirectObjectHolder;
-  friend class CPDF_SyntaxParser;
-  friend class CPDF_Reference;
-  friend class CPDF_Stream;
-
-  CPDF_Object() : m_ObjNum(0), m_GenNum(0) {}
-
-  std::unique_ptr<CPDF_Object> CloneObjectNonCyclic(bool bDirect) const;
-
   // Create a deep copy of the object with the option to either
   // copy a reference object or directly copy the object it refers to
   // when |bDirect| is true.
@@ -114,11 +104,17 @@
       bool bDirect,
       std::set<const CPDF_Object*>* pVisited) const;
 
+ protected:
+  CPDF_Object() : m_ObjNum(0), m_GenNum(0) {}
+
+  std::unique_ptr<CPDF_Object> CloneObjectNonCyclic(bool bDirect) const;
+
   uint32_t m_ObjNum;
-  uint32_t m_GenNum;
 
  private:
   CPDF_Object(const CPDF_Object& src) {}
+
+  uint32_t m_GenNum;
 };
 
 template <typename T>
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index 0c483ac..f0ea5ac 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -500,8 +500,8 @@
   std::unique_ptr<CPDF_Object> pObj =
       GetObjectBodyInternal(pObjList, parse_type);
   if (pObj) {
-    pObj->m_ObjNum = parser_objnum;
-    pObj->m_GenNum = parser_gennum;
+    pObj->SetObjNum(parser_objnum);
+    pObj->SetGenNum(parser_gennum);
   }
 
   return GetValidator()->has_read_problems() ? nullptr : std::move(pObj);