diff --git a/core/fxcrt/extension.h b/core/fxcrt/extension.h
index 698bded..877f1ca 100644
--- a/core/fxcrt/extension.h
+++ b/core/fxcrt/extension.h
@@ -47,7 +47,7 @@
 
   IFX_FileAccess* Retain() override {
     m_RefCount++;
-    return (IFX_FileAccess*)this;
+    return this;
   }
 
   void GetPath(CFX_WideString& wsPath) override { wsPath = m_path; }
diff --git a/fpdfsdk/formfiller/cffl_iformfiller.cpp b/fpdfsdk/formfiller/cffl_iformfiller.cpp
index 107197f..c63ee0e 100644
--- a/fpdfsdk/formfiller/cffl_iformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_iformfiller.cpp
@@ -709,10 +709,8 @@
   if (!m_bNotifying) {
     ASSERT(pWidget);
     CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
-    CPDFSDK_InterForm* pInterForm =
-        (CPDFSDK_InterForm*)pDocument->GetInterForm();
+    CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
     pInterForm->OnCalculate(pWidget->GetFormField());
-
     m_bNotifying = FALSE;
   }
 }
@@ -724,8 +722,7 @@
   if (!m_bNotifying) {
     ASSERT(pWidget);
     CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
-    CPDFSDK_InterForm* pInterForm =
-        (CPDFSDK_InterForm*)pDocument->GetInterForm();
+    CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
 
     FX_BOOL bFormated = FALSE;
     CFX_WideString sValue =
diff --git a/fpdfsdk/fsdk_actionhandler.cpp b/fpdfsdk/fsdk_actionhandler.cpp
index bc6bd28..38e5bfe 100644
--- a/fpdfsdk/fsdk_actionhandler.cpp
+++ b/fpdfsdk/fsdk_actionhandler.cpp
@@ -604,7 +604,7 @@
 
 FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action,
                                                  CPDFSDK_Document* pDocument) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   if (pInterForm->DoAction_Hide(action)) {
     pDocument->SetChangeMark();
     return TRUE;
@@ -616,21 +616,21 @@
 FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm(
     const CPDF_Action& action,
     CPDFSDK_Document* pDocument) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   return pInterForm->DoAction_SubmitForm(action);
 }
 
 FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm(
     const CPDF_Action& action,
     CPDFSDK_Document* pDocument) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   return pInterForm->DoAction_ResetForm(action);
 }
 
 FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData(
     const CPDF_Action& action,
     CPDFSDK_Document* pDocument) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   if (pInterForm->DoAction_ImportData(action)) {
     pDocument->SetChangeMark();
     return TRUE;
diff --git a/fpdfsdk/fsdk_annothandler.cpp b/fpdfsdk/fsdk_annothandler.cpp
index eda3b49..ded04c9 100644
--- a/fpdfsdk/fsdk_annothandler.cpp
+++ b/fpdfsdk/fsdk_annothandler.cpp
@@ -423,7 +423,7 @@
 CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot,
                                                 CPDFSDK_PageView* pPage) {
   CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm();
   CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl(
       pInterForm->GetInterForm(), pAnnot->GetAnnotDict());
   if (!pCtrl)
@@ -729,7 +729,7 @@
 CPDFSDK_Annot* CPDFSDK_XFAAnnotHandler::NewAnnot(CXFA_FFWidget* pAnnot,
                                                  CPDFSDK_PageView* pPage) {
   CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm();
   CPDFSDK_XFAWidget* pWidget = new CPDFSDK_XFAWidget(pAnnot, pPage, pInterForm);
   pInterForm->AddXFAMap(pAnnot, pWidget);
   return pWidget;
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index 076e998..258dddb 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -379,8 +379,7 @@
   CFX_WideString cSubject = iLength > 4 ? params[4].ToCFXWideString() : L"";
   CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString() : L"";
 
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   CFX_ByteTextBuf textBuf;
   if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
     return FALSE;
@@ -478,12 +477,9 @@
   }
 
   CFX_WideString sFieldName = params[0].ToCFXWideString();
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
-
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   std::vector<CPDFSDK_Widget*> widgets;
   pInterForm->GetWidgets(sFieldName, &widgets);
-
   if (widgets.empty())
     return TRUE;
 
@@ -520,8 +516,7 @@
         m_pDocument->GetPermissions(FPDFPERM_FILL_FORM)))
     return FALSE;
 
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
   CJS_Runtime* pRuntime = CJS_Runtime::FromContext(cc);
   CJS_Array aName(pRuntime);
@@ -611,8 +606,7 @@
         CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToV8Array());
   }
 
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
   if (aFields.GetLength() == 0 && bEmpty) {
     if (pPDFInterForm->CheckRequiredFields(nullptr, true)) {
@@ -1028,9 +1022,7 @@
 FX_BOOL Document::calculate(IJS_Context* cc,
                             CJS_PropValue& vp,
                             CFX_WideString& sError) {
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
-
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   if (vp.IsGetting()) {
     if (pInterForm->IsCalculateEnabled())
       vp << true;
@@ -1311,8 +1303,7 @@
         m_pDocument->GetPermissions(FPDFPERM_FILL_FORM)))
     return FALSE;
 
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   pInterForm->OnCalculate();
   return TRUE;
 }
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index 43bc89e..ecf4f5a 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -213,7 +213,7 @@
                             FX_BOOL bResetAP,
                             FX_BOOL bRefresh) {
   std::vector<CPDFSDK_Widget*> widgets;
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   pInterForm->GetWidgets(pFormField, &widgets);
 
   if (bResetAP) {
@@ -249,7 +249,7 @@
                               FX_BOOL bRefresh) {
   ASSERT(pFormControl);
 
-  CPDFSDK_InterForm* pForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pForm = pDocument->GetInterForm();
   CPDFSDK_Widget* pWidget = pForm->GetWidget(pFormControl);
 
   if (pWidget) {
@@ -1193,8 +1193,7 @@
 
     CPDF_FormField* pFormField = FieldArray[0];
     ASSERT(pFormField);
-    CPDFSDK_InterForm* pInterForm =
-        (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+    CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
     CPDFSDK_Widget* pWidget =
         pInterForm->GetWidget(GetSmartFieldControl(pFormField));
     if (!pWidget)
@@ -1224,7 +1223,7 @@
                        const CFX_WideString& swFieldName,
                        int nControlIndex,
                        int number) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   std::vector<CPDF_FormField*> FieldArray =
       GetFormFields(pDocument, swFieldName);
   for (CPDF_FormField* pFormField : FieldArray) {
@@ -1509,8 +1508,7 @@
 
     CPDF_FormField* pFormField = FieldArray[0];
     ASSERT(pFormField);
-    CPDFSDK_InterForm* pInterForm =
-        (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+    CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
     CPDFSDK_Widget* pWidget =
         pInterForm->GetWidget(GetSmartFieldControl(pFormField));
     if (!pWidget)
@@ -1531,7 +1529,7 @@
                       const CFX_WideString& swFieldName,
                       int nControlIndex,
                       bool b) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   std::vector<CPDF_FormField*> FieldArray =
       GetFormFields(pDocument, swFieldName);
   for (CPDF_FormField* pFormField : FieldArray) {
@@ -1679,8 +1677,7 @@
     if (!pFormControl)
       return FALSE;
 
-    CPDFSDK_InterForm* pInterForm =
-        (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+    CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
     if (!pFormField->CountControls())
       return FALSE;
 
@@ -1698,8 +1695,7 @@
                          const CFX_WideString& swFieldName,
                          int nControlIndex,
                          int number) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
-
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   std::vector<CPDF_FormField*> FieldArray =
       GetFormFields(pDocument, swFieldName);
   for (CPDF_FormField* pFormField : FieldArray) {
@@ -1936,8 +1932,7 @@
 FX_BOOL Field::print(IJS_Context* cc,
                      CJS_PropValue& vp,
                      CFX_WideString& sError) {
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return FALSE;
@@ -2101,8 +2096,7 @@
       return FALSE;
 
     CPDF_FormField* pFormField = FieldArray[0];
-    CPDFSDK_InterForm* pInterForm =
-        (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+    CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
     CPDFSDK_Widget* pWidget =
         pInterForm->GetWidget(GetSmartFieldControl(pFormField));
     if (!pWidget)
@@ -2128,8 +2122,7 @@
                     const CFX_WideString& swFieldName,
                     int nControlIndex,
                     const CFX_FloatRect& rect) {
-  CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
-
+  CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
   std::vector<CPDF_FormField*> FieldArray =
       GetFormFields(pDocument, swFieldName);
   for (CPDF_FormField* pFormField : FieldArray) {
@@ -3252,8 +3245,7 @@
   if (nCount < 1)
     return FALSE;
 
-  CPDFSDK_InterForm* pInterForm =
-      (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+  CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
   CPDFSDK_Widget* pWidget = nullptr;
   if (nCount == 1) {
     pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
