Add even more CXFA_*::FromNode() static methods

Change-Id: I1b2207cb8e2e00a2dd56bcf6fef2c8d1308e59b5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/94133
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/parser/cxfa_arc.cpp b/xfa/fxfa/parser/cxfa_arc.cpp
index 78c1fb1..dcb164c 100644
--- a/xfa/fxfa/parser/cxfa_arc.cpp
+++ b/xfa/fxfa/parser/cxfa_arc.cpp
@@ -29,6 +29,13 @@
 
 }  // namespace
 
+// static
+CXFA_Arc* CXFA_Arc::FromNode(CXFA_Node* pNode) {
+  return pNode && pNode->GetElementType() == XFA_Element::Arc
+             ? static_cast<CXFA_Arc*>(pNode)
+             : nullptr;
+}
+
 CXFA_Arc::CXFA_Arc(CXFA_Document* doc, XFA_PacketType packet)
     : CXFA_Box(doc,
                packet,
diff --git a/xfa/fxfa/parser/cxfa_arc.h b/xfa/fxfa/parser/cxfa_arc.h
index dee205b..e5e763c 100644
--- a/xfa/fxfa/parser/cxfa_arc.h
+++ b/xfa/fxfa/parser/cxfa_arc.h
@@ -11,6 +11,8 @@
 
 class CXFA_Arc final : public CXFA_Box {
  public:
+  static CXFA_Arc* FromNode(CXFA_Node* pNode);
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   ~CXFA_Arc() override;
 
diff --git a/xfa/fxfa/parser/cxfa_exdata.cpp b/xfa/fxfa/parser/cxfa_exdata.cpp
index 2811d32..865b10d 100644
--- a/xfa/fxfa/parser/cxfa_exdata.cpp
+++ b/xfa/fxfa/parser/cxfa_exdata.cpp
@@ -26,6 +26,13 @@
 
 }  // namespace
 
+// static
+CXFA_ExData* CXFA_ExData::FromNode(CXFA_Node* pNode) {
+  return pNode && pNode->GetElementType() == XFA_Element::ExData
+             ? static_cast<CXFA_ExData*>(pNode)
+             : nullptr;
+}
+
 CXFA_ExData::CXFA_ExData(CXFA_Document* doc, XFA_PacketType packet)
     : CXFA_Node(doc,
                 packet,
diff --git a/xfa/fxfa/parser/cxfa_exdata.h b/xfa/fxfa/parser/cxfa_exdata.h
index 27c5fb2..d5d513a 100644
--- a/xfa/fxfa/parser/cxfa_exdata.h
+++ b/xfa/fxfa/parser/cxfa_exdata.h
@@ -11,6 +11,8 @@
 
 class CXFA_ExData final : public CXFA_Node {
  public:
+  static CXFA_ExData* FromNode(CXFA_Node* pNode);
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   ~CXFA_ExData() override;
 
diff --git a/xfa/fxfa/parser/cxfa_image.cpp b/xfa/fxfa/parser/cxfa_image.cpp
index 1cc0402..7f38394 100644
--- a/xfa/fxfa/parser/cxfa_image.cpp
+++ b/xfa/fxfa/parser/cxfa_image.cpp
@@ -26,6 +26,13 @@
 
 }  // namespace
 
+// static
+CXFA_Image* CXFA_Image::FromNode(CXFA_Node* pNode) {
+  return pNode && pNode->GetElementType() == XFA_Element::Image
+             ? static_cast<CXFA_Image*>(pNode)
+             : nullptr;
+}
+
 CXFA_Image::CXFA_Image(CXFA_Document* doc, XFA_PacketType packet)
     : CXFA_Node(doc,
                 packet,
diff --git a/xfa/fxfa/parser/cxfa_image.h b/xfa/fxfa/parser/cxfa_image.h
index bf84c93..035656c 100644
--- a/xfa/fxfa/parser/cxfa_image.h
+++ b/xfa/fxfa/parser/cxfa_image.h
@@ -11,6 +11,8 @@
 
 class CXFA_Image final : public CXFA_Node {
  public:
+  static CXFA_Image* FromNode(CXFA_Node* pNode);
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   ~CXFA_Image() override;
 
diff --git a/xfa/fxfa/parser/cxfa_line.cpp b/xfa/fxfa/parser/cxfa_line.cpp
index c7166b0..24b72e3 100644
--- a/xfa/fxfa/parser/cxfa_line.cpp
+++ b/xfa/fxfa/parser/cxfa_line.cpp
@@ -29,6 +29,13 @@
 
 }  // namespace
 
+// static
+CXFA_Line* CXFA_Line::FromNode(CXFA_Node* pNode) {
+  return pNode && pNode->GetElementType() == XFA_Element::Line
+             ? static_cast<CXFA_Line*>(pNode)
+             : nullptr;
+}
+
 CXFA_Line::CXFA_Line(CXFA_Document* doc, XFA_PacketType packet)
     : CXFA_Node(doc,
                 packet,
diff --git a/xfa/fxfa/parser/cxfa_line.h b/xfa/fxfa/parser/cxfa_line.h
index 9c63c95..deb647a 100644
--- a/xfa/fxfa/parser/cxfa_line.h
+++ b/xfa/fxfa/parser/cxfa_line.h
@@ -13,6 +13,8 @@
 
 class CXFA_Line final : public CXFA_Node {
  public:
+  static CXFA_Line* FromNode(CXFA_Node* pNode);
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   ~CXFA_Line() override;
 
diff --git a/xfa/fxfa/parser/cxfa_rectangle.cpp b/xfa/fxfa/parser/cxfa_rectangle.cpp
index f9b2874..ed43d3f 100644
--- a/xfa/fxfa/parser/cxfa_rectangle.cpp
+++ b/xfa/fxfa/parser/cxfa_rectangle.cpp
@@ -36,6 +36,13 @@
 
 }  // namespace
 
+// static
+CXFA_Rectangle* CXFA_Rectangle::FromNode(CXFA_Node* pNode) {
+  return pNode && pNode->GetElementType() == XFA_Element::Rectangle
+             ? static_cast<CXFA_Rectangle*>(pNode)
+             : nullptr;
+}
+
 CXFA_Rectangle::CXFA_Rectangle(CXFA_Document* doc, XFA_PacketType packet)
     : CXFA_Box(doc,
                packet,
diff --git a/xfa/fxfa/parser/cxfa_rectangle.h b/xfa/fxfa/parser/cxfa_rectangle.h
index f5b9680..0004df5 100644
--- a/xfa/fxfa/parser/cxfa_rectangle.h
+++ b/xfa/fxfa/parser/cxfa_rectangle.h
@@ -14,6 +14,8 @@
 
 class CXFA_Rectangle : public CXFA_Box {
  public:
+  static CXFA_Rectangle* FromNode(CXFA_Node* pNode);
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   ~CXFA_Rectangle() override;
 
diff --git a/xfa/fxfa/parser/cxfa_text.cpp b/xfa/fxfa/parser/cxfa_text.cpp
index e10f853..ab62485 100644
--- a/xfa/fxfa/parser/cxfa_text.cpp
+++ b/xfa/fxfa/parser/cxfa_text.cpp
@@ -22,6 +22,13 @@
 
 }  // namespace
 
+// static
+CXFA_Text* CXFA_Text::FromNode(CXFA_Node* pNode) {
+  return pNode && pNode->GetElementType() == XFA_Element::Text
+             ? static_cast<CXFA_Text*>(pNode)
+             : nullptr;
+}
+
 CXFA_Text::CXFA_Text(CXFA_Document* doc, XFA_PacketType packet)
     : CXFA_Node(doc,
                 packet,
diff --git a/xfa/fxfa/parser/cxfa_text.h b/xfa/fxfa/parser/cxfa_text.h
index ad42509..e115891 100644
--- a/xfa/fxfa/parser/cxfa_text.h
+++ b/xfa/fxfa/parser/cxfa_text.h
@@ -12,6 +12,8 @@
 
 class CXFA_Text final : public CXFA_Node {
  public:
+  static CXFA_Text* FromNode(CXFA_Node* pNode);
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   ~CXFA_Text() override;
 
diff --git a/xfa/fxfa/parser/cxfa_value.cpp b/xfa/fxfa/parser/cxfa_value.cpp
index ac9df46..787de2e 100644
--- a/xfa/fxfa/parser/cxfa_value.cpp
+++ b/xfa/fxfa/parser/cxfa_value.cpp
@@ -70,43 +70,25 @@
 }
 
 CXFA_Arc* CXFA_Value::GetArcIfExists() const {
-  CXFA_Node* node = GetFirstChild();
-  if (!node || node->GetElementType() != XFA_Element::Arc)
-    return nullptr;
-  return static_cast<CXFA_Arc*>(node);
+  return CXFA_Arc::FromNode(GetFirstChild());
 }
 
 CXFA_Line* CXFA_Value::GetLineIfExists() const {
-  CXFA_Node* node = GetFirstChild();
-  if (!node || node->GetElementType() != XFA_Element::Line)
-    return nullptr;
-  return static_cast<CXFA_Line*>(node);
+  return CXFA_Line::FromNode(GetFirstChild());
 }
 
 CXFA_Rectangle* CXFA_Value::GetRectangleIfExists() const {
-  CXFA_Node* node = GetFirstChild();
-  if (!node || node->GetElementType() != XFA_Element::Rectangle)
-    return nullptr;
-  return static_cast<CXFA_Rectangle*>(node);
+  return CXFA_Rectangle::FromNode(GetFirstChild());
 }
 
 CXFA_Text* CXFA_Value::GetTextIfExists() const {
-  CXFA_Node* node = GetFirstChild();
-  if (!node || node->GetElementType() != XFA_Element::Text)
-    return nullptr;
-  return static_cast<CXFA_Text*>(node);
+  return CXFA_Text::FromNode(GetFirstChild());
 }
 
 CXFA_ExData* CXFA_Value::GetExDataIfExists() const {
-  CXFA_Node* node = GetFirstChild();
-  if (!node || node->GetElementType() != XFA_Element::ExData)
-    return nullptr;
-  return static_cast<CXFA_ExData*>(node);
+  return CXFA_ExData::FromNode(GetFirstChild());
 }
 
 CXFA_Image* CXFA_Value::GetImageIfExists() const {
-  CXFA_Node* node = GetFirstChild();
-  if (!node || node->GetElementType() != XFA_Element::Image)
-    return nullptr;
-  return static_cast<CXFA_Image*>(node);
+  return CXFA_Image::FromNode(GetFirstChild());
 }