Let CJX_Object subclasses communicate typename to jse_define.h macros.

Remove some redundant naming in these macro invocations by
introducing a Type__ definition once in each class. In the
future, properties are going to need this information just
like methods, so avoid having to add hundreds of repeated
names then.

Change-Id: I32dcfea32e0a093b217056f558dc5b250440f780
Reviewed-on: https://pdfium-review.googlesource.com/c/48533
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cjx_boolean.h b/fxjs/xfa/cjx_boolean.h
index 0945913..8e90d62 100644
--- a/fxjs/xfa/cjx_boolean.h
+++ b/fxjs/xfa/cjx_boolean.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Boolean;
 };
 
 #endif  // FXJS_XFA_CJX_BOOLEAN_H_
diff --git a/fxjs/xfa/cjx_comb.h b/fxjs/xfa/cjx_comb.h
index f1e0f3d..b5140ec 100644
--- a/fxjs/xfa/cjx_comb.h
+++ b/fxjs/xfa/cjx_comb.h
@@ -18,6 +18,9 @@
   ~CJX_Comb() override;
 
   JSE_PROP(numberOfCells);
+
+ private:
+  using Type__ = CJX_Comb;
 };
 
 #endif  // FXJS_XFA_CJX_COMB_H_
diff --git a/fxjs/xfa/cjx_container.h b/fxjs/xfa/cjx_container.h
index 7bc6b0e..914056a 100644
--- a/fxjs/xfa/cjx_container.h
+++ b/fxjs/xfa/cjx_container.h
@@ -17,10 +17,12 @@
   explicit CJX_Container(CXFA_Node* node);
   ~CJX_Container() override;
 
-  JSE_METHOD(getDelta, CJX_Container);
-  JSE_METHOD(getDeltas, CJX_Container);
+  JSE_METHOD(getDelta);
+  JSE_METHOD(getDeltas);
 
  private:
+  using Type__ = CJX_Container;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_datavalue.h b/fxjs/xfa/cjx_datavalue.h
index a6f4474..6c48d93 100644
--- a/fxjs/xfa/cjx_datavalue.h
+++ b/fxjs/xfa/cjx_datavalue.h
@@ -20,6 +20,9 @@
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(isNull);
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_DataValue;
 };
 
 #endif  // FXJS_XFA_CJX_DATAVALUE_H_
diff --git a/fxjs/xfa/cjx_datawindow.h b/fxjs/xfa/cjx_datawindow.h
index 48cce93..75146ac 100644
--- a/fxjs/xfa/cjx_datawindow.h
+++ b/fxjs/xfa/cjx_datawindow.h
@@ -19,10 +19,10 @@
   explicit CJX_DataWindow(CScript_DataWindow* window);
   ~CJX_DataWindow() override;
 
-  JSE_METHOD(gotoRecord, CJX_DataWindow);
-  JSE_METHOD(isRecordGroup, CJX_DataWindow);
-  JSE_METHOD(moveCurrentRecord, CJX_DataWindow);
-  JSE_METHOD(record, CJX_DataWindow);
+  JSE_METHOD(gotoRecord);
+  JSE_METHOD(isRecordGroup);
+  JSE_METHOD(moveCurrentRecord);
+  JSE_METHOD(record);
 
   JSE_PROP(currentRecordNumber);
   JSE_PROP(isDefined);
@@ -30,6 +30,8 @@
   JSE_PROP(recordsBefore);
 
  private:
+  using Type__ = CJX_DataWindow;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_date.h b/fxjs/xfa/cjx_date.h
index 5a65620..52c4349 100644
--- a/fxjs/xfa/cjx_date.h
+++ b/fxjs/xfa/cjx_date.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Date;
 };
 
 #endif  // FXJS_XFA_CJX_DATE_H_
diff --git a/fxjs/xfa/cjx_datetime.h b/fxjs/xfa/cjx_datetime.h
index 8f508a1..df22909 100644
--- a/fxjs/xfa/cjx_datetime.h
+++ b/fxjs/xfa/cjx_datetime.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_DateTime;
 };
 
 #endif  // FXJS_XFA_CJX_DATETIME_H_
diff --git a/fxjs/xfa/cjx_decimal.h b/fxjs/xfa/cjx_decimal.h
index e8f8af7..8330a0e 100644
--- a/fxjs/xfa/cjx_decimal.h
+++ b/fxjs/xfa/cjx_decimal.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Decimal;
 };
 
 #endif  // FXJS_XFA_CJX_DECIMAL_H_
diff --git a/fxjs/xfa/cjx_delta.h b/fxjs/xfa/cjx_delta.h
index 971774b..0a358fd 100644
--- a/fxjs/xfa/cjx_delta.h
+++ b/fxjs/xfa/cjx_delta.h
@@ -17,13 +17,15 @@
   explicit CJX_Delta(CXFA_Delta* delta);
   ~CJX_Delta() override;
 
-  JSE_METHOD(restore, CJX_Delta);
+  JSE_METHOD(restore);
 
   JSE_PROP(currentValue);
   JSE_PROP(savedValue);
   JSE_PROP(target);
 
  private:
+  using Type__ = CJX_Delta;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_desc.h b/fxjs/xfa/cjx_desc.h
index 99c78d8..1e71f65 100644
--- a/fxjs/xfa/cjx_desc.h
+++ b/fxjs/xfa/cjx_desc.h
@@ -17,9 +17,11 @@
   explicit CJX_Desc(CXFA_Desc* desc);
   ~CJX_Desc() override;
 
-  JSE_METHOD(metadata, CJX_Desc);
+  JSE_METHOD(metadata);
 
  private:
+  using Type__ = CJX_Desc;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_draw.h b/fxjs/xfa/cjx_draw.h
index 099b449..134a1a0 100644
--- a/fxjs/xfa/cjx_draw.h
+++ b/fxjs/xfa/cjx_draw.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(rawValue);
+
+ private:
+  using Type__ = CJX_Draw;
 };
 
 #endif  // FXJS_XFA_CJX_DRAW_H_
diff --git a/fxjs/xfa/cjx_encrypt.h b/fxjs/xfa/cjx_encrypt.h
index 2d34eca..1bf4fe9 100644
--- a/fxjs/xfa/cjx_encrypt.h
+++ b/fxjs/xfa/cjx_encrypt.h
@@ -18,6 +18,9 @@
   ~CJX_Encrypt() override;
 
   JSE_PROP(format);
+
+ private:
+  using Type__ = CJX_Encrypt;
 };
 
 #endif  // FXJS_XFA_CJX_ENCRYPT_H_
diff --git a/fxjs/xfa/cjx_eventpseudomodel.h b/fxjs/xfa/cjx_eventpseudomodel.h
index 31d7dbe..6d13018 100644
--- a/fxjs/xfa/cjx_eventpseudomodel.h
+++ b/fxjs/xfa/cjx_eventpseudomodel.h
@@ -38,8 +38,8 @@
   explicit CJX_EventPseudoModel(CScript_EventPseudoModel* model);
   ~CJX_EventPseudoModel() override;
 
-  JSE_METHOD(emit, CJX_EventPseudoModel);
-  JSE_METHOD(reset, CJX_EventPseudoModel);
+  JSE_METHOD(emit);
+  JSE_METHOD(reset);
 
   JSE_PROP(cancelAction);
   JSE_PROP(change);
@@ -60,6 +60,8 @@
   JSE_PROP(target);
 
  private:
+  using Type__ = CJX_EventPseudoModel;
+
   void Property(CFXJSE_Value* pValue, XFA_Event dwFlag, bool bSetting);
 
   static const CJX_MethodSpec MethodSpecs[];
diff --git a/fxjs/xfa/cjx_exclgroup.h b/fxjs/xfa/cjx_exclgroup.h
index f03e399..f57fa86 100644
--- a/fxjs/xfa/cjx_exclgroup.h
+++ b/fxjs/xfa/cjx_exclgroup.h
@@ -17,11 +17,11 @@
   explicit CJX_ExclGroup(CXFA_ExclGroup* group);
   ~CJX_ExclGroup() override;
 
-  JSE_METHOD(execCalculate, CJX_ExclGroup);
-  JSE_METHOD(execEvent, CJX_ExclGroup);
-  JSE_METHOD(execInitialize, CJX_ExclGroup);
-  JSE_METHOD(execValidate, CJX_ExclGroup);
-  JSE_METHOD(selectedMember, CJX_ExclGroup);
+  JSE_METHOD(execCalculate);
+  JSE_METHOD(execEvent);
+  JSE_METHOD(execInitialize);
+  JSE_METHOD(execValidate);
+  JSE_METHOD(selectedMember);
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(borderColor);
@@ -34,6 +34,8 @@
   JSE_PROP(validationMessage);
 
  private:
+  using Type__ = CJX_ExclGroup;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_exdata.h b/fxjs/xfa/cjx_exdata.h
index 42b49f6..86d9219 100644
--- a/fxjs/xfa/cjx_exdata.h
+++ b/fxjs/xfa/cjx_exdata.h
@@ -18,6 +18,9 @@
   ~CJX_ExData() override;
 
   JSE_PROP(defaultValue); /* {default} */
+
+ private:
+  using Type__ = CJX_ExData;
 };
 
 #endif  // FXJS_XFA_CJX_EXDATA_H_
diff --git a/fxjs/xfa/cjx_extras.h b/fxjs/xfa/cjx_extras.h
index e6e2dc1..420bfe4 100644
--- a/fxjs/xfa/cjx_extras.h
+++ b/fxjs/xfa/cjx_extras.h
@@ -18,6 +18,9 @@
   ~CJX_Extras() override;
 
   JSE_PROP(type);
+
+ private:
+  using Type__ = CJX_Extras;
 };
 
 #endif  // FXJS_XFA_CJX_EXTRAS_H_
diff --git a/fxjs/xfa/cjx_field.h b/fxjs/xfa/cjx_field.h
index fa68495..72ded92 100644
--- a/fxjs/xfa/cjx_field.h
+++ b/fxjs/xfa/cjx_field.h
@@ -17,18 +17,18 @@
   explicit CJX_Field(CXFA_Field* field);
   ~CJX_Field() override;
 
-  JSE_METHOD(addItem, CJX_Field);
-  JSE_METHOD(boundItem, CJX_Field);
-  JSE_METHOD(clearItems, CJX_Field);
-  JSE_METHOD(deleteItem, CJX_Field);
-  JSE_METHOD(execCalculate, CJX_Field);
-  JSE_METHOD(execEvent, CJX_Field);
-  JSE_METHOD(execInitialize, CJX_Field);
-  JSE_METHOD(execValidate, CJX_Field);
-  JSE_METHOD(getDisplayItem, CJX_Field);
-  JSE_METHOD(getItemState, CJX_Field);
-  JSE_METHOD(getSaveItem, CJX_Field);
-  JSE_METHOD(setItemState, CJX_Field);
+  JSE_METHOD(addItem);
+  JSE_METHOD(boundItem);
+  JSE_METHOD(clearItems);
+  JSE_METHOD(deleteItem);
+  JSE_METHOD(execCalculate);
+  JSE_METHOD(execEvent);
+  JSE_METHOD(execInitialize);
+  JSE_METHOD(execValidate);
+  JSE_METHOD(getDisplayItem);
+  JSE_METHOD(getItemState);
+  JSE_METHOD(getSaveItem);
+  JSE_METHOD(setItemState);
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(borderColor);
@@ -46,6 +46,8 @@
   JSE_PROP(validationMessage);
 
  private:
+  using Type__ = CJX_Field;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_float.h b/fxjs/xfa/cjx_float.h
index bd0a10b..c964339 100644
--- a/fxjs/xfa/cjx_float.h
+++ b/fxjs/xfa/cjx_float.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Float;
 };
 
 #endif  // FXJS_XFA_CJX_FLOAT_H_
diff --git a/fxjs/xfa/cjx_form.h b/fxjs/xfa/cjx_form.h
index 9558ad5..f477a1c 100644
--- a/fxjs/xfa/cjx_form.h
+++ b/fxjs/xfa/cjx_form.h
@@ -17,14 +17,16 @@
   explicit CJX_Form(CXFA_Form* form);
   ~CJX_Form() override;
 
-  JSE_METHOD(execCalculate, CJX_Form);
-  JSE_METHOD(execInitialize, CJX_Form);
-  JSE_METHOD(execValidate, CJX_Form);
-  JSE_METHOD(formNodes, CJX_Form);
-  JSE_METHOD(recalculate, CJX_Form);
-  JSE_METHOD(remerge, CJX_Form);
+  JSE_METHOD(execCalculate);
+  JSE_METHOD(execInitialize);
+  JSE_METHOD(execValidate);
+  JSE_METHOD(formNodes);
+  JSE_METHOD(recalculate);
+  JSE_METHOD(remerge);
 
  private:
+  using Type__ = CJX_Form;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_handler.h b/fxjs/xfa/cjx_handler.h
index 55357c7..a5ad537 100644
--- a/fxjs/xfa/cjx_handler.h
+++ b/fxjs/xfa/cjx_handler.h
@@ -18,6 +18,9 @@
   ~CJX_Handler() override;
 
   JSE_PROP(version);
+
+ private:
+  using Type__ = CJX_Handler;
 };
 
 #endif  // FXJS_XFA_CJX_HANDLER_H_
diff --git a/fxjs/xfa/cjx_hostpseudomodel.h b/fxjs/xfa/cjx_hostpseudomodel.h
index 92b20f8..956a2fa 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.h
+++ b/fxjs/xfa/cjx_hostpseudomodel.h
@@ -19,21 +19,21 @@
   explicit CJX_HostPseudoModel(CScript_HostPseudoModel* model);
   ~CJX_HostPseudoModel() override;
 
-  JSE_METHOD(beep, CJX_HostPseudoModel);
-  JSE_METHOD(documentCountInBatch, CJX_HostPseudoModel);
-  JSE_METHOD(documentInBatch, CJX_HostPseudoModel);
-  JSE_METHOD(exportData, CJX_HostPseudoModel);
-  JSE_METHOD(getFocus, CJX_HostPseudoModel);
-  JSE_METHOD(gotoURL, CJX_HostPseudoModel);
-  JSE_METHOD(importData, CJX_HostPseudoModel);
-  JSE_METHOD(messageBox, CJX_HostPseudoModel);
-  JSE_METHOD(openList, CJX_HostPseudoModel);
-  JSE_METHOD(pageDown, CJX_HostPseudoModel);
-  JSE_METHOD(pageUp, CJX_HostPseudoModel);
-  JSE_METHOD(print, CJX_HostPseudoModel);
-  JSE_METHOD(resetData, CJX_HostPseudoModel);
-  JSE_METHOD(response, CJX_HostPseudoModel);
-  JSE_METHOD(setFocus, CJX_HostPseudoModel);
+  JSE_METHOD(beep);
+  JSE_METHOD(documentCountInBatch);
+  JSE_METHOD(documentInBatch);
+  JSE_METHOD(exportData);
+  JSE_METHOD(getFocus);
+  JSE_METHOD(gotoURL);
+  JSE_METHOD(importData);
+  JSE_METHOD(messageBox);
+  JSE_METHOD(openList);
+  JSE_METHOD(pageDown);
+  JSE_METHOD(pageUp);
+  JSE_METHOD(print);
+  JSE_METHOD(resetData);
+  JSE_METHOD(response);
+  JSE_METHOD(setFocus);
 
   JSE_PROP(appType);
   JSE_PROP(calculationsEnabled);
@@ -51,6 +51,8 @@
   JSE_PROP(name);
 
  private:
+  using Type__ = CJX_HostPseudoModel;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_image.h b/fxjs/xfa/cjx_image.h
index 298f123..fa0aa8d 100644
--- a/fxjs/xfa/cjx_image.h
+++ b/fxjs/xfa/cjx_image.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Image;
 };
 
 #endif  // FXJS_XFA_CJX_IMAGE_H_
diff --git a/fxjs/xfa/cjx_instancemanager.h b/fxjs/xfa/cjx_instancemanager.h
index 9881f60..5568232 100644
--- a/fxjs/xfa/cjx_instancemanager.h
+++ b/fxjs/xfa/cjx_instancemanager.h
@@ -17,11 +17,11 @@
   explicit CJX_InstanceManager(CXFA_InstanceManager* mgr);
   ~CJX_InstanceManager() override;
 
-  JSE_METHOD(addInstance, CJX_InstanceManager);
-  JSE_METHOD(insertInstance, CJX_InstanceManager);
-  JSE_METHOD(moveInstance, CJX_InstanceManager);
-  JSE_METHOD(removeInstance, CJX_InstanceManager);
-  JSE_METHOD(setInstances, CJX_InstanceManager);
+  JSE_METHOD(addInstance);
+  JSE_METHOD(insertInstance);
+  JSE_METHOD(moveInstance);
+  JSE_METHOD(removeInstance);
+  JSE_METHOD(setInstances);
 
   JSE_PROP(count);
   JSE_PROP(max);
@@ -30,6 +30,8 @@
   int32_t MoveInstance(int32_t iTo, int32_t iFrom);
 
  private:
+  using Type__ = CJX_InstanceManager;
+
   int32_t SetInstances(int32_t iDesired);
 
   static const CJX_MethodSpec MethodSpecs[];
diff --git a/fxjs/xfa/cjx_integer.h b/fxjs/xfa/cjx_integer.h
index c647fb3..608c8fd 100644
--- a/fxjs/xfa/cjx_integer.h
+++ b/fxjs/xfa/cjx_integer.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Integer;
 };
 
 #endif  // FXJS_XFA_CJX_INTEGER_H_
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.h b/fxjs/xfa/cjx_layoutpseudomodel.h
index 9bd74bf..cf2850f 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.h
+++ b/fxjs/xfa/cjx_layoutpseudomodel.h
@@ -29,29 +29,31 @@
   explicit CJX_LayoutPseudoModel(CScript_LayoutPseudoModel* model);
   ~CJX_LayoutPseudoModel() override;
 
-  JSE_METHOD(absPage, CJX_LayoutPseudoModel);
-  JSE_METHOD(absPageCount, CJX_LayoutPseudoModel);
-  JSE_METHOD(absPageCountInBatch, CJX_LayoutPseudoModel);
-  JSE_METHOD(absPageInBatch, CJX_LayoutPseudoModel);
-  JSE_METHOD(absPageSpan, CJX_LayoutPseudoModel);
-  JSE_METHOD(h, CJX_LayoutPseudoModel);
-  JSE_METHOD(page, CJX_LayoutPseudoModel);
-  JSE_METHOD(pageContent, CJX_LayoutPseudoModel);
-  JSE_METHOD(pageCount, CJX_LayoutPseudoModel);
-  JSE_METHOD(pageSpan, CJX_LayoutPseudoModel);
-  JSE_METHOD(relayout, CJX_LayoutPseudoModel);
-  JSE_METHOD(relayoutPageArea, CJX_LayoutPseudoModel);
-  JSE_METHOD(sheet, CJX_LayoutPseudoModel);
-  JSE_METHOD(sheetCount, CJX_LayoutPseudoModel);
-  JSE_METHOD(sheetCountInBatch, CJX_LayoutPseudoModel);
-  JSE_METHOD(sheetInBatch, CJX_LayoutPseudoModel);
-  JSE_METHOD(w, CJX_LayoutPseudoModel);
-  JSE_METHOD(x, CJX_LayoutPseudoModel);
-  JSE_METHOD(y, CJX_LayoutPseudoModel);
+  JSE_METHOD(absPage);
+  JSE_METHOD(absPageCount);
+  JSE_METHOD(absPageCountInBatch);
+  JSE_METHOD(absPageInBatch);
+  JSE_METHOD(absPageSpan);
+  JSE_METHOD(h);
+  JSE_METHOD(page);
+  JSE_METHOD(pageContent);
+  JSE_METHOD(pageCount);
+  JSE_METHOD(pageSpan);
+  JSE_METHOD(relayout);
+  JSE_METHOD(relayoutPageArea);
+  JSE_METHOD(sheet);
+  JSE_METHOD(sheetCount);
+  JSE_METHOD(sheetCountInBatch);
+  JSE_METHOD(sheetInBatch);
+  JSE_METHOD(w);
+  JSE_METHOD(x);
+  JSE_METHOD(y);
 
   JSE_PROP(ready);
 
  private:
+  using Type__ = CJX_LayoutPseudoModel;
+
   CJS_Result NumberedPageCount(CFX_V8* runtime, bool bNumbered);
   CJS_Result HWXY(CFX_V8* runtime,
                   const std::vector<v8::Local<v8::Value>>& params,
diff --git a/fxjs/xfa/cjx_list.h b/fxjs/xfa/cjx_list.h
index 8f2e39e..c0cfecd 100644
--- a/fxjs/xfa/cjx_list.h
+++ b/fxjs/xfa/cjx_list.h
@@ -17,14 +17,16 @@
   explicit CJX_List(CXFA_List* list);
   ~CJX_List() override;
 
-  JSE_METHOD(append, CJX_List);
-  JSE_METHOD(insert, CJX_List);
-  JSE_METHOD(item, CJX_List);
-  JSE_METHOD(remove, CJX_List);
+  JSE_METHOD(append);
+  JSE_METHOD(insert);
+  JSE_METHOD(item);
+  JSE_METHOD(remove);
 
   JSE_PROP(length);
 
  private:
+  using Type__ = CJX_List;
+
   CXFA_List* GetXFAList();
 
   static const CJX_MethodSpec MethodSpecs[];
diff --git a/fxjs/xfa/cjx_logpseudomodel.h b/fxjs/xfa/cjx_logpseudomodel.h
index 4e9cb35..876917e 100644
--- a/fxjs/xfa/cjx_logpseudomodel.h
+++ b/fxjs/xfa/cjx_logpseudomodel.h
@@ -19,13 +19,15 @@
   explicit CJX_LogPseudoModel(CScript_LogPseudoModel* model);
   ~CJX_LogPseudoModel() override;
 
-  JSE_METHOD(message, CJX_LogPseudoModel);
-  JSE_METHOD(traceEnabled, CJX_LogPseudoModel);
-  JSE_METHOD(traceActivate, CJX_LogPseudoModel);
-  JSE_METHOD(traceDeactivate, CJX_LogPseudoModel);
-  JSE_METHOD(trace, CJX_LogPseudoModel);
+  JSE_METHOD(message);
+  JSE_METHOD(traceEnabled);
+  JSE_METHOD(traceActivate);
+  JSE_METHOD(traceDeactivate);
+  JSE_METHOD(trace);
 
  private:
+  using Type__ = CJX_LogPseudoModel;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_manifest.h b/fxjs/xfa/cjx_manifest.h
index b60911f..2d81576 100644
--- a/fxjs/xfa/cjx_manifest.h
+++ b/fxjs/xfa/cjx_manifest.h
@@ -17,11 +17,13 @@
   explicit CJX_Manifest(CXFA_Manifest* manifest);
   ~CJX_Manifest() override;
 
-  JSE_METHOD(evaluate, CJX_Manifest);
+  JSE_METHOD(evaluate);
 
   JSE_PROP(defaultValue); /* {default} */
 
  private:
+  using Type__ = CJX_Manifest;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_model.h b/fxjs/xfa/cjx_model.h
index c2f2f7c..b6b92f3 100644
--- a/fxjs/xfa/cjx_model.h
+++ b/fxjs/xfa/cjx_model.h
@@ -17,14 +17,16 @@
   explicit CJX_Model(CXFA_Node* obj);
   ~CJX_Model() override;
 
-  JSE_METHOD(clearErrorList, CJX_Model);
-  JSE_METHOD(createNode, CJX_Model);
-  JSE_METHOD(isCompatibleNS, CJX_Model);
+  JSE_METHOD(clearErrorList);
+  JSE_METHOD(createNode);
+  JSE_METHOD(isCompatibleNS);
 
   JSE_PROP(aliasNode);
   JSE_PROP(context);
 
  private:
+  using Type__ = CJX_Model;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_node.h b/fxjs/xfa/cjx_node.h
index dc4ba0b..d26e7a0 100644
--- a/fxjs/xfa/cjx_node.h
+++ b/fxjs/xfa/cjx_node.h
@@ -18,17 +18,17 @@
   explicit CJX_Node(CXFA_Node* node);
   ~CJX_Node() override;
 
-  JSE_METHOD(applyXSL, CJX_Node);
-  JSE_METHOD(assignNode, CJX_Node);
-  JSE_METHOD(clone, CJX_Node);
-  JSE_METHOD(getAttribute, CJX_Node);
-  JSE_METHOD(getElement, CJX_Node);
-  JSE_METHOD(isPropertySpecified, CJX_Node);
-  JSE_METHOD(loadXML, CJX_Node);
-  JSE_METHOD(saveFilteredXML, CJX_Node);
-  JSE_METHOD(saveXML, CJX_Node);
-  JSE_METHOD(setAttribute, CJX_Node);
-  JSE_METHOD(setElement, CJX_Node);
+  JSE_METHOD(applyXSL);
+  JSE_METHOD(assignNode);
+  JSE_METHOD(clone);
+  JSE_METHOD(getAttribute);
+  JSE_METHOD(getElement);
+  JSE_METHOD(isPropertySpecified);
+  JSE_METHOD(loadXML);
+  JSE_METHOD(saveFilteredXML);
+  JSE_METHOD(saveXML);
+  JSE_METHOD(setAttribute);
+  JSE_METHOD(setElement);
 
   JSE_PROP(isContainer);
   JSE_PROP(isNull);
@@ -42,6 +42,8 @@
   int32_t execSingleEventByName(WideStringView wsEventName, XFA_Element eType);
 
  private:
+  using Type__ = CJX_Node;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 4bbd35f..cdb6907 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -222,6 +222,8 @@
   void ThrowException(const WideString& str) const;
 
  private:
+  using Type__ = CJX_Object;
+
   std::pair<CXFA_Node*, int32_t> GetPropertyInternal(int32_t index,
                                                      XFA_Element eType) const;
   CXFA_Node* GetOrCreatePropertyInternal(int32_t index, XFA_Element eType);
diff --git a/fxjs/xfa/cjx_occur.h b/fxjs/xfa/cjx_occur.h
index b6745a5..87f6043 100644
--- a/fxjs/xfa/cjx_occur.h
+++ b/fxjs/xfa/cjx_occur.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(max);
   JSE_PROP(min);
+
+ private:
+  using Type__ = CJX_Occur;
 };
 
 #endif  // FXJS_XFA_CJX_OCCUR_H_
diff --git a/fxjs/xfa/cjx_packet.h b/fxjs/xfa/cjx_packet.h
index 0becac6..9853ac4 100644
--- a/fxjs/xfa/cjx_packet.h
+++ b/fxjs/xfa/cjx_packet.h
@@ -17,13 +17,15 @@
   explicit CJX_Packet(CXFA_Packet* packet);
   ~CJX_Packet() override;
 
-  JSE_METHOD(getAttribute, CJX_Packet);
-  JSE_METHOD(removeAttribute, CJX_Packet);
-  JSE_METHOD(setAttribute, CJX_Packet);
+  JSE_METHOD(getAttribute);
+  JSE_METHOD(removeAttribute);
+  JSE_METHOD(setAttribute);
 
   JSE_PROP(content);
 
  private:
+  using Type__ = CJX_Packet;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_picture.h b/fxjs/xfa/cjx_picture.h
index fe3afb8..1fa3688 100644
--- a/fxjs/xfa/cjx_picture.h
+++ b/fxjs/xfa/cjx_picture.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Picture;
 };
 
 #endif  // FXJS_XFA_CJX_PICTURE_H_
diff --git a/fxjs/xfa/cjx_script.h b/fxjs/xfa/cjx_script.h
index 52fc6fc..337497d 100644
--- a/fxjs/xfa/cjx_script.h
+++ b/fxjs/xfa/cjx_script.h
@@ -20,6 +20,9 @@
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(stateless);
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Script;
 };
 
 #endif  // FXJS_XFA_CJX_SCRIPT_H_
diff --git a/fxjs/xfa/cjx_signaturepseudomodel.h b/fxjs/xfa/cjx_signaturepseudomodel.h
index 865e27a..d830e4b 100644
--- a/fxjs/xfa/cjx_signaturepseudomodel.h
+++ b/fxjs/xfa/cjx_signaturepseudomodel.h
@@ -17,12 +17,14 @@
   explicit CJX_SignaturePseudoModel(CScript_SignaturePseudoModel* model);
   ~CJX_SignaturePseudoModel() override;
 
-  JSE_METHOD(verifySignature /*verify*/, CJX_SignaturePseudoModel);
-  JSE_METHOD(sign, CJX_SignaturePseudoModel);
-  JSE_METHOD(enumerate, CJX_SignaturePseudoModel);
-  JSE_METHOD(clear, CJX_SignaturePseudoModel);
+  JSE_METHOD(verifySignature /*verify*/);
+  JSE_METHOD(sign);
+  JSE_METHOD(enumerate);
+  JSE_METHOD(clear);
 
  private:
+  using Type__ = CJX_SignaturePseudoModel;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_source.h b/fxjs/xfa/cjx_source.h
index e2dd405..7948279 100644
--- a/fxjs/xfa/cjx_source.h
+++ b/fxjs/xfa/cjx_source.h
@@ -17,27 +17,29 @@
   explicit CJX_Source(CXFA_Source* src);
   ~CJX_Source() override;
 
-  JSE_METHOD(addNew, CJX_Source);
-  JSE_METHOD(cancel, CJX_Source);
-  JSE_METHOD(cancelBatch, CJX_Source);
-  JSE_METHOD(close, CJX_Source);
-  JSE_METHOD(deleteItem /*delete*/, CJX_Source);
-  JSE_METHOD(first, CJX_Source);
-  JSE_METHOD(hasDataChanged, CJX_Source);
-  JSE_METHOD(isBOF, CJX_Source);
-  JSE_METHOD(isEOF, CJX_Source);
-  JSE_METHOD(last, CJX_Source);
-  JSE_METHOD(next, CJX_Source);
-  JSE_METHOD(open, CJX_Source);
-  JSE_METHOD(previous, CJX_Source);
-  JSE_METHOD(requery, CJX_Source);
-  JSE_METHOD(resync, CJX_Source);
-  JSE_METHOD(update, CJX_Source);
-  JSE_METHOD(updateBatch, CJX_Source);
+  JSE_METHOD(addNew);
+  JSE_METHOD(cancel);
+  JSE_METHOD(cancelBatch);
+  JSE_METHOD(close);
+  JSE_METHOD(deleteItem /*delete*/);
+  JSE_METHOD(first);
+  JSE_METHOD(hasDataChanged);
+  JSE_METHOD(isBOF);
+  JSE_METHOD(isEOF);
+  JSE_METHOD(last);
+  JSE_METHOD(next);
+  JSE_METHOD(open);
+  JSE_METHOD(previous);
+  JSE_METHOD(requery);
+  JSE_METHOD(resync);
+  JSE_METHOD(update);
+  JSE_METHOD(updateBatch);
 
   JSE_PROP(db);
 
  private:
+  using Type__ = CJX_Source;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_subform.h b/fxjs/xfa/cjx_subform.h
index 96a1f2b..8f72880 100644
--- a/fxjs/xfa/cjx_subform.h
+++ b/fxjs/xfa/cjx_subform.h
@@ -17,10 +17,10 @@
   explicit CJX_Subform(CXFA_Node* container);
   ~CJX_Subform() override;
 
-  JSE_METHOD(execCalculate, CJX_Subform);
-  JSE_METHOD(execEvent, CJX_Subform);
-  JSE_METHOD(execInitialize, CJX_Subform);
-  JSE_METHOD(execValidate, CJX_Subform);
+  JSE_METHOD(execCalculate);
+  JSE_METHOD(execEvent);
+  JSE_METHOD(execInitialize);
+  JSE_METHOD(execValidate);
 
   JSE_PROP(instanceIndex);
   JSE_PROP(layout);
@@ -28,6 +28,8 @@
   JSE_PROP(validationMessage);
 
  private:
+  using Type__ = CJX_Subform;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_subformset.h b/fxjs/xfa/cjx_subformset.h
index f71f7c3..a60b560 100644
--- a/fxjs/xfa/cjx_subformset.h
+++ b/fxjs/xfa/cjx_subformset.h
@@ -18,6 +18,9 @@
   ~CJX_SubformSet() override;
 
   JSE_PROP(instanceIndex);
+
+ private:
+  using Type__ = CJX_SubformSet;
 };
 
 #endif  // FXJS_XFA_CJX_SUBFORMSET_H_
diff --git a/fxjs/xfa/cjx_template.h b/fxjs/xfa/cjx_template.h
index 6d5f50b..e4c819c 100644
--- a/fxjs/xfa/cjx_template.h
+++ b/fxjs/xfa/cjx_template.h
@@ -20,14 +20,16 @@
   /* The docs list a |createNode| method on Template but that method already
    * exists on Model, also the |createNode| docs say it exists on Model not
    * on Template so I'm leaving |createNode| out of the template methods. */
-  JSE_METHOD(execCalculate, CJX_Template);
-  JSE_METHOD(execInitialize, CJX_Template);
-  JSE_METHOD(execValidate, CJX_Template);
-  JSE_METHOD(formNodes, CJX_Template);
-  JSE_METHOD(recalculate, CJX_Template);
-  JSE_METHOD(remerge, CJX_Template);
+  JSE_METHOD(execCalculate);
+  JSE_METHOD(execInitialize);
+  JSE_METHOD(execValidate);
+  JSE_METHOD(formNodes);
+  JSE_METHOD(recalculate);
+  JSE_METHOD(remerge);
 
  private:
+  using Type__ = CJX_Template;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_text.h b/fxjs/xfa/cjx_text.h
index 49ec35e..5925f14 100644
--- a/fxjs/xfa/cjx_text.h
+++ b/fxjs/xfa/cjx_text.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Text;
 };
 
 #endif  // FXJS_XFA_CJX_TEXT_H_
diff --git a/fxjs/xfa/cjx_textnode.h b/fxjs/xfa/cjx_textnode.h
index 9ef8a3f..bf9ff14 100644
--- a/fxjs/xfa/cjx_textnode.h
+++ b/fxjs/xfa/cjx_textnode.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_TextNode;
 };
 
 #endif  // FXJS_XFA_CJX_TEXTNODE_H_
diff --git a/fxjs/xfa/cjx_time.h b/fxjs/xfa/cjx_time.h
index 6d9fe61..2b55eb4 100644
--- a/fxjs/xfa/cjx_time.h
+++ b/fxjs/xfa/cjx_time.h
@@ -19,6 +19,9 @@
 
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(value);
+
+ private:
+  using Type__ = CJX_Time;
 };
 
 #endif  // FXJS_XFA_CJX_TIME_H_
diff --git a/fxjs/xfa/cjx_tree.h b/fxjs/xfa/cjx_tree.h
index a30464f..8b6e918 100644
--- a/fxjs/xfa/cjx_tree.h
+++ b/fxjs/xfa/cjx_tree.h
@@ -18,8 +18,8 @@
   explicit CJX_Tree(CXFA_Object* obj);
   ~CJX_Tree() override;
 
-  JSE_METHOD(resolveNode, CJX_Tree);
-  JSE_METHOD(resolveNodes, CJX_Tree);
+  JSE_METHOD(resolveNode);
+  JSE_METHOD(resolveNodes);
 
   JSE_PROP(all);
   JSE_PROP(classAll);
@@ -30,6 +30,8 @@
   JSE_PROP(somExpression);
 
  private:
+  using Type__ = CJX_Tree;
+
   void ResolveNodeList(CFXJSE_Value* pValue,
                        WideString wsExpression,
                        uint32_t dwFlag,
diff --git a/fxjs/xfa/cjx_treelist.h b/fxjs/xfa/cjx_treelist.h
index 6ae9518..89551c5 100644
--- a/fxjs/xfa/cjx_treelist.h
+++ b/fxjs/xfa/cjx_treelist.h
@@ -17,9 +17,11 @@
   explicit CJX_TreeList(CXFA_TreeList* list);
   ~CJX_TreeList() override;
 
-  JSE_METHOD(namedItem, CJX_TreeList);
+  JSE_METHOD(namedItem);
 
  private:
+  using Type__ = CJX_TreeList;
+
   CXFA_TreeList* GetXFATreeList();
 
   static const CJX_MethodSpec MethodSpecs[];
diff --git a/fxjs/xfa/cjx_value.h b/fxjs/xfa/cjx_value.h
index 23ee567..b6f717f 100644
--- a/fxjs/xfa/cjx_value.h
+++ b/fxjs/xfa/cjx_value.h
@@ -18,6 +18,9 @@
   ~CJX_Value() override;
 
   JSE_PROP(override);
+
+ private:
+  using Type__ = CJX_Value;
 };
 
 #endif  // FXJS_XFA_CJX_VALUE_H_
diff --git a/fxjs/xfa/cjx_wsdlconnection.h b/fxjs/xfa/cjx_wsdlconnection.h
index 5b563b8..12f2b7e 100644
--- a/fxjs/xfa/cjx_wsdlconnection.h
+++ b/fxjs/xfa/cjx_wsdlconnection.h
@@ -17,9 +17,11 @@
   explicit CJX_WsdlConnection(CXFA_WsdlConnection* connection);
   ~CJX_WsdlConnection() override;
 
-  JSE_METHOD(execute, CJX_WsdlConnection);
+  JSE_METHOD(execute);
 
  private:
+  using Type__ = CJX_WsdlConnection;
+
   static const CJX_MethodSpec MethodSpecs[];
 };
 
diff --git a/fxjs/xfa/cjx_xfa.h b/fxjs/xfa/cjx_xfa.h
index 882ee52..8f4b949 100644
--- a/fxjs/xfa/cjx_xfa.h
+++ b/fxjs/xfa/cjx_xfa.h
@@ -18,6 +18,9 @@
   ~CJX_Xfa() override;
 
   JSE_PROP(thisValue); /* this */
+
+ private:
+  using Type__ = CJX_Xfa;
 };
 
 #endif  // FXJS_XFA_CJX_XFA_H_
diff --git a/fxjs/xfa/jse_define.h b/fxjs/xfa/jse_define.h
index 73f246d..5a63e72 100644
--- a/fxjs/xfa/jse_define.h
+++ b/fxjs/xfa/jse_define.h
@@ -22,14 +22,14 @@
   return (node->*M)(runtime, params);
 }
 
-#define JSE_METHOD(method_name, class_name)                 \
-  static CJS_Result method_name##_static(                   \
-      CJX_Object* node, CFX_V8* runtime,                    \
-      const std::vector<v8::Local<v8::Value>>& params) {    \
-    return JSEMethod<class_name, &class_name::method_name>( \
-        static_cast<class_name*>(node), runtime, params);   \
-  }                                                         \
-  CJS_Result method_name(CFX_V8* runtime,                   \
+#define JSE_METHOD(method_name)                                                \
+  static CJS_Result method_name##_static(                                      \
+      CJX_Object* node, CFX_V8* runtime,                                       \
+      const std::vector<v8::Local<v8::Value>>& params) {                       \
+    return JSEMethod<Type__, &Type__::method_name>(static_cast<Type__*>(node), \
+                                                   runtime, params);           \
+  }                                                                            \
+  CJS_Result method_name(CFX_V8* runtime,                                      \
                          const std::vector<v8::Local<v8::Value>>& params)
 
 #define JSE_PROP(prop_name) \