diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index 942d334..4e0b04e 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -18,6 +18,19 @@
 #include "core/fxge/include/cfx_pathdata.h"
 #include "core/fxge/include/cfx_renderdevice.h"
 
+namespace {
+
+bool ShouldGenerateAPForAnnotation(CPDF_Dictionary* pAnnotDict) {
+  // If AP dictionary exists, we use the appearance defined in the
+  // existing AP dictionary.
+  if (pAnnotDict->KeyExist("AP"))
+    return false;
+
+  return !CPDF_Annot::IsAnnotationHidden(pAnnotDict);
+}
+
+}  // namespace
+
 CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict,
                        CPDF_Document* pDocument,
                        bool bToOwnDict)
@@ -37,6 +50,9 @@
 }
 
 void CPDF_Annot::GenerateAPIfNeeded() {
+  if (!ShouldGenerateAPForAnnotation(m_pAnnotDict))
+    return;
+
   if (m_nSubtype == CPDF_Annot::Subtype::CIRCLE)
     CPVT_GenerateAP::GenerateCircleAP(m_pDocument, m_pAnnotDict);
   else if (m_nSubtype == CPDF_Annot::Subtype::HIGHLIGHT)
@@ -149,7 +165,7 @@
   return pForm;
 }
 
-// static
+// Static.
 bool CPDF_Annot::IsAnnotationHidden(CPDF_Dictionary* pAnnotDict) {
   return !!(pAnnotDict->GetIntegerBy("F") & ANNOTFLAG_HIDDEN);
 }
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index d19992e..be96d2d 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -674,15 +674,6 @@
   return sAppStream.MakeString();
 }
 
-bool ShouldGenerateAPForAnnotation(CPDF_Dictionary* pAnnotDict) {
-  // If AP dictionary exists, we use the appearance defined in the
-  // existing AP dictionary.
-  if (pAnnotDict->KeyExist("AP"))
-    return false;
-
-  return !CPDF_Annot::IsAnnotationHidden(pAnnotDict);
-}
-
 }  // namespace
 
 bool FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict) {
@@ -735,9 +726,6 @@
 
 bool CPVT_GenerateAP::GenerateCircleAP(CPDF_Document* pDoc,
                                        CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   CFX_ByteTextBuf sAppStream;
   CFX_ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
@@ -811,9 +799,6 @@
 
 bool CPVT_GenerateAP::GenerateHighlightAP(CPDF_Document* pDoc,
                                           CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   CFX_ByteTextBuf sAppStream;
   CFX_ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
@@ -841,9 +826,6 @@
 
 bool CPVT_GenerateAP::GenerateInkAP(CPDF_Document* pDoc,
                                     CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   FX_FLOAT fBorderWidth = GetBorderWidth(*pAnnotDict);
   bool bIsStroke = fBorderWidth > 0;
 
@@ -897,9 +879,6 @@
 
 bool CPVT_GenerateAP::GenerateTextAP(CPDF_Document* pDoc,
                                      CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   CFX_ByteTextBuf sAppStream;
   CFX_ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
@@ -922,9 +901,6 @@
 
 bool CPVT_GenerateAP::GenerateUnderlineAP(CPDF_Document* pDoc,
                                           CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   CFX_ByteTextBuf sAppStream;
   CFX_ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
@@ -989,9 +965,6 @@
 
 bool CPVT_GenerateAP::GenerateSquareAP(CPDF_Document* pDoc,
                                        CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   CFX_ByteTextBuf sAppStream;
   CFX_ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
@@ -1039,9 +1012,6 @@
 
 bool CPVT_GenerateAP::GenerateSquigglyAP(CPDF_Document* pDoc,
                                          CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   CFX_ByteTextBuf sAppStream;
   CFX_ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
@@ -1090,9 +1060,6 @@
 
 bool CPVT_GenerateAP::GenerateStrikeOutAP(CPDF_Document* pDoc,
                                           CPDF_Dictionary* pAnnotDict) {
-  if (!ShouldGenerateAPForAnnotation(pAnnotDict))
-    return false;
-
   CFX_ByteTextBuf sAppStream;
   CFX_ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
