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,