Make CXFA_NodeHelper::NodeIsTransparent() a member of CXFA_Node.

Do the same for CXFA_NodeHelper::NodeIsProperty().

Change-Id: If1750c6db4e866db520009b54866fe299dd649b0
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52373
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index 49ad92d..c7e2645 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -758,15 +758,17 @@
 }
 
 size_t CFXJSE_Engine::GetIndexByName(CXFA_Node* refNode) {
+  if (!refNode)
+    return 0;
   return CXFA_NodeHelper::GetIndex(refNode, XFA_LOGIC_Transparent,
-                                   CXFA_NodeHelper::NodeIsProperty(refNode),
-                                   false);
+                                   refNode->IsProperty(), false);
 }
 
 size_t CFXJSE_Engine::GetIndexByClassName(CXFA_Node* refNode) {
+  if (!refNode)
+    return 0;
   return CXFA_NodeHelper::GetIndex(refNode, XFA_LOGIC_Transparent,
-                                   CXFA_NodeHelper::NodeIsProperty(refNode),
-                                   true);
+                                   refNode->IsProperty(), true);
 }
 
 WideString CFXJSE_Engine::GetSomExpression(CXFA_Node* refNode) {
diff --git a/fxjs/xfa/cfxjse_resolveprocessor.cpp b/fxjs/xfa/cfxjse_resolveprocessor.cpp
index 0426d5a..1331d85 100644
--- a/fxjs/xfa/cfxjse_resolveprocessor.cpp
+++ b/fxjs/xfa/cfxjse_resolveprocessor.cpp
@@ -313,8 +313,8 @@
         rnd.m_Objects.emplace_back(child);
       }
 
-      if (CXFA_NodeHelper::NodeIsTransparent(child) &&
-          child->GetElementType() != XFA_Element::PageSet) {
+      if (child->GetElementType() != XFA_Element::PageSet &&
+          child->IsTransparent()) {
         if (!bSetFlag) {
           SetStylesForChild(dwStyles, rndFind);
           bSetFlag = true;
@@ -332,7 +332,7 @@
     if (rnd.m_Objects.size() > nNum) {
       if (!(dwStyles & XFA_RESOLVENODE_ALL)) {
         std::vector<CXFA_Node*> upArrayNodes;
-        if (CXFA_NodeHelper::NodeIsTransparent(ToNode(curNode))) {
+        if (curNode->IsTransparent()) {
           upArrayNodes = CXFA_NodeHelper::GetSiblings(
               ToNode(rnd.m_Objects.front().Get()), XFA_LOGIC_Transparent,
               !!(dwStyles & XFA_RESOLVENODE_TagName));
@@ -392,7 +392,7 @@
     }
   }
 
-  CXFA_Node* parentNode = curNode->GetParent();
+  CXFA_Node* const parentNode = curNode->GetParent();
   uint32_t uCurClassHash = curNode->GetClassHashCode();
   if (!parentNode) {
     if (uCurClassHash == uNameHash) {
@@ -446,7 +446,7 @@
              child->GetElementType() == XFA_Element::PageSet)) {
           bInnerSearch = true;
         }
-      } else if (CXFA_NodeHelper::NodeIsTransparent(child)) {
+      } else if (child->IsTransparent()) {
         bInnerSearch = true;
       }
       if (bInnerSearch) {
@@ -464,7 +464,7 @@
       child = child->GetNextSibling();
     }
     if (rnd.m_Objects.size() > nNum) {
-      if (CXFA_NodeHelper::NodeIsTransparent(parentNode)) {
+      if (parentNode->IsTransparent()) {
         std::vector<CXFA_Node*> upArrayNodes = CXFA_NodeHelper::GetSiblings(
             ToNode(rnd.m_Objects.front().Get()), XFA_LOGIC_Transparent,
             !!(dwStyles & XFA_RESOLVENODE_TagName));
@@ -652,7 +652,7 @@
   const std::vector<CXFA_Node*>* pArray = pRnd->m_pSC->GetUpObjectArray();
   if (!pArray->empty()) {
     CXFA_Node* curNode = pArray->back();
-    bool bIsProperty = CXFA_NodeHelper::NodeIsProperty(curNode);
+    bool bIsProperty = curNode->IsProperty();
     bool bIsClassIndex =
         curNode->IsUnnamed() ||
         (bIsProperty && curNode->GetElementType() != XFA_Element::PageSet);
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 851532a..8d5f313 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -4974,6 +4974,17 @@
   return wsRet;
 }
 
+bool CXFA_Node::IsTransparent() const {
+  XFA_Element type = GetElementType();
+  return type == XFA_Element::SubformSet || type == XFA_Element::Area ||
+         type == XFA_Element::Proto || (IsUnnamed() && IsContainerNode());
+}
+
+bool CXFA_Node::IsProperty() const {
+  CXFA_Node* parent = GetParent();
+  return parent && parent->HasProperty(GetElementType());
+}
+
 bool CXFA_Node::PresenceRequiresSpace() const {
   auto value = JSObject()->TryEnum(XFA_Attribute::Presence, true);
   XFA_AttributeValue ePresence = value.value_or(XFA_AttributeValue::Visible);
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index e7767af..f8e60fa 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -376,6 +376,9 @@
 
   WideString NumericLimit(const WideString& wsValue);
 
+  bool IsTransparent() const;
+  bool IsProperty() const;
+
  protected:
   CXFA_Node(CXFA_Document* pDoc,
             XFA_PacketType ePacket,
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.cpp b/xfa/fxfa/parser/cxfa_nodehelper.cpp
index b99e3f6..9d0305c 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.cpp
+++ b/xfa/fxfa/parser/cxfa_nodehelper.cpp
@@ -68,7 +68,7 @@
     if (eLogicType == XFA_LOGIC_NoTransparent)
       continue;
 
-    if (CXFA_NodeHelper::NodeIsTransparent(child) &&
+    if (child->IsTransparent() &&
         child->GetElementType() != XFA_Element::PageSet) {
       TraverseSiblings(child, dwNameHash, pSiblings, eLogicType, bIsClassName,
                        false);
@@ -79,7 +79,7 @@
 
 WideString GetNameExpressionSinglePath(CXFA_Node* refNode) {
   WideString ws;
-  bool bIsProperty = CXFA_NodeHelper::NodeIsProperty(refNode);
+  bool bIsProperty = refNode->IsProperty();
   if (refNode->IsUnnamed() ||
       (bIsProperty && refNode->GetElementType() != XFA_Element::PageSet)) {
     ws = WideString::FromASCII(refNode->GetClassName());
@@ -177,17 +177,6 @@
   return wsName;
 }
 
-// static
-bool CXFA_NodeHelper::NodeIsTransparent(CXFA_Node* refNode) {
-  if (!refNode)
-    return false;
-
-  XFA_Element refNodeType = refNode->GetElementType();
-  return (refNode->IsUnnamed() && refNode->IsContainerNode()) ||
-         refNodeType == XFA_Element::SubformSet ||
-         refNodeType == XFA_Element::Area || refNodeType == XFA_Element::Proto;
-}
-
 bool CXFA_NodeHelper::CreateNodeForCondition(const WideString& wsCondition) {
   size_t szLen = wsCondition.GetLength();
   WideString wsIndex(L"0");
@@ -303,9 +292,3 @@
     m_eLastCreateType = XFA_Element::DataValue;
   }
 }
-
-// static
-bool CXFA_NodeHelper::NodeIsProperty(CXFA_Node* refNode) {
-  CXFA_Node* parent = refNode ? refNode->GetParent() : nullptr;
-  return parent && parent->HasProperty(refNode->GetElementType());
-}
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.h b/xfa/fxfa/parser/cxfa_nodehelper.h
index d4f973e..90b9c72 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.h
+++ b/xfa/fxfa/parser/cxfa_nodehelper.h
@@ -34,8 +34,6 @@
                          bool bIsProperty,
                          bool bIsClassIndex);
   static WideString GetNameExpression(CXFA_Node* refNode);
-  static bool NodeIsTransparent(CXFA_Node* refNode);
-  static bool NodeIsProperty(CXFA_Node* refNode);
 
   bool CreateNode(const WideString& wsName,
                   const WideString& wsCondition,