Rework some CPDFSDK_Annot methods.

Mark two methods as pure virtual, so we don't need to implement
unreachable stubs. Then make constructor protected, since we can't
(and don't) instantiate this abstract class.

De-virtualize one method since it is only called on the subclass
that can support it in the first place.


Change-Id: Ib217f475960ccbb02d7dbd313111c700c98f2ac4
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/85350
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annot.cpp b/fpdfsdk/cpdfsdk_annot.cpp
index 8ac6df1..f8f8839 100644
--- a/fpdfsdk/cpdfsdk_annot.cpp
+++ b/fpdfsdk/cpdfsdk_annot.cpp
@@ -40,20 +40,10 @@
   return nullptr;
 }
 
-CPDF_Annot::Subtype CPDFSDK_Annot::GetAnnotSubtype() const {
-  return CPDF_Annot::Subtype::UNKNOWN;
-}
-
 bool CPDFSDK_Annot::IsSignatureWidget() const {
   return false;
 }
 
-void CPDFSDK_Annot::SetRect(const CFX_FloatRect& rect) {}
-
-CFX_FloatRect CPDFSDK_Annot::GetRect() const {
-  return CFX_FloatRect();
-}
-
 IPDF_Page* CPDFSDK_Annot::GetPage() {
 #ifdef PDF_ENABLE_XFA
   IPDF_Page* pXFAPage = GetXFAPage();
diff --git a/fpdfsdk/cpdfsdk_annot.h b/fpdfsdk/cpdfsdk_annot.h
index 666befc..2b40449 100644
--- a/fpdfsdk/cpdfsdk_annot.h
+++ b/fpdfsdk/cpdfsdk_annot.h
@@ -20,7 +20,6 @@
 
 class CPDFSDK_Annot : public Observable {
  public:
-  explicit CPDFSDK_Annot(CPDFSDK_PageView* pPageView);
   virtual ~CPDFSDK_Annot();
 
   virtual CPDFSDK_BAAnnot* AsBAAnnot();
@@ -28,10 +27,9 @@
 
   virtual int GetLayoutOrder() const;
   virtual CPDF_Annot* GetPDFAnnot() const;
-  virtual CPDF_Annot::Subtype GetAnnotSubtype() const;
   virtual bool IsSignatureWidget() const;
-  virtual CFX_FloatRect GetRect() const;
-  virtual void SetRect(const CFX_FloatRect& rect);
+  virtual CPDF_Annot::Subtype GetAnnotSubtype() const = 0;
+  virtual CFX_FloatRect GetRect() const = 0;
 
   // Three cases: PDF page only, XFA page only, or XFA page backed by PDF page.
   IPDF_Page* GetPage();     // Returns XFA Page if possible, else PDF page.
@@ -42,6 +40,8 @@
   CPDFSDK_PageView* GetPageView() const { return m_pPageView.Get(); }
 
  protected:
+  explicit CPDFSDK_Annot(CPDFSDK_PageView* pPageView);
+
   UnownedPtr<CPDFSDK_PageView> const m_pPageView;
 };
 
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp
index dc3f891..84b6200 100644
--- a/fpdfsdk/cpdfsdk_baannot.cpp
+++ b/fpdfsdk/cpdfsdk_baannot.cpp
@@ -50,12 +50,6 @@
   return GetAnnotDict()->SetNewFor<CPDF_Dictionary>(pdfium::annotation::kAP);
 }
 
-void CPDFSDK_BAAnnot::SetRect(const CFX_FloatRect& rect) {
-  DCHECK(rect.right - rect.left >= 1.0f);
-  DCHECK(rect.top - rect.bottom >= 1.0f);
-  GetAnnotDict()->SetRectFor(pdfium::annotation::kRect, rect);
-}
-
 CFX_FloatRect CPDFSDK_BAAnnot::GetRect() const {
   return m_pAnnot->GetRect();
 }
diff --git a/fpdfsdk/cpdfsdk_baannot.h b/fpdfsdk/cpdfsdk_baannot.h
index 20eb2e6..ac6b82a 100644
--- a/fpdfsdk/cpdfsdk_baannot.h
+++ b/fpdfsdk/cpdfsdk_baannot.h
@@ -26,10 +26,9 @@
   CPDFSDK_BAAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
   ~CPDFSDK_BAAnnot() override;
 
-  // CPDFSDK_Annot
+  // CPDFSDK_Annot:
   CPDFSDK_BAAnnot* AsBAAnnot() override;
   CPDF_Annot::Subtype GetAnnotSubtype() const override;
-  void SetRect(const CFX_FloatRect& rect) override;
   CFX_FloatRect GetRect() const override;
   CPDF_Annot* GetPDFAnnot() const override;
   int GetLayoutOrder() const override;
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 9e10615..54fb453 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -379,6 +379,12 @@
   return pField ? pField->GetFieldType() : FormFieldType::kUnknown;
 }
 
+void CPDFSDK_Widget::SetRect(const CFX_FloatRect& rect) {
+  DCHECK(rect.right - rect.left >= 1.0f);
+  DCHECK(rect.top - rect.bottom >= 1.0f);
+  GetAnnotDict()->SetRectFor(pdfium::annotation::kRect, rect);
+}
+
 bool CPDFSDK_Widget::IsAppearanceValid() {
 #ifdef PDF_ENABLE_XFA
   CPDF_Document::Extension* pContext =
diff --git a/fpdfsdk/cpdfsdk_widget.h b/fpdfsdk/cpdfsdk_widget.h
index e3f3852..b5fbea5 100644
--- a/fpdfsdk/cpdfsdk_widget.h
+++ b/fpdfsdk/cpdfsdk_widget.h
@@ -57,6 +57,7 @@
   // CPDFSDK_Annot:
   int GetLayoutOrder() const override;
 
+  void SetRect(const CFX_FloatRect& rect);
   FormFieldType GetFieldType() const;
   int GetFieldFlags() const;
   int GetRotate() const;