public class ClassDefinition extends java.lang.Object implements ProgressParserTokenTypes
Provides support for the following namespaces:
| Modifier and Type | Class and Description |
|---|---|
protected static class |
ClassDefinition.DataStoreType
Data store identifier.
|
| Modifier and Type | Field and Description |
|---|---|
private boolean |
builtin
Flag marking if this is a built-in Progress class.
|
private java.util.Set<java.lang.String> |
directDotNet
Direct .NET references.
|
private boolean |
dotnet
Flag to differentiate between 4GL classes and .NET classes.
|
private java.util.Set<java.lang.String> |
dotnetDerived
.NET classes in the parent hierarchy.
|
private java.util.Set<ClassDefinition> |
dotnetProcessed
Classes for which we've already calculated .NET dependencies.
|
private java.lang.String |
filename
The filename of the .cls that defined this class/interface.
|
private FuzzyMethodCvt |
fuzzy
The fuzzy method lookup.
|
private java.util.Set<java.lang.String> |
ifaces
List of implemented interfaces.
|
private java.util.Map<java.lang.String,java.util.Map<SignatureKey,MemberData>> |
imethods
Instance methods mapped by name.
|
private java.util.Set<java.lang.String> |
indirectDotNet
Indirect .NET references.
|
private ClassDefinition[] |
interfaces
Implemented interfaces.
|
private java.util.Map<ClassDefinition.DataStoreType,java.util.Map<java.lang.String,MemberData>> |
istores
Instance data stores.
|
private java.lang.String |
javaClassName
Simple Java class name, without any package prefix.
|
private java.util.Map<java.lang.String,java.lang.String> |
javaEnumNames
The Java field names for skeleton enums.
|
private java.util.Set<java.lang.String> |
javaMethodCollisions
A set of existing Java signatures to detect when there is a method overloading conflict (more than one
method with the same java name and signature).
|
private java.lang.String |
javaPackage
Full Java package in dotted notation (no class name).
|
private java.util.Map<java.lang.String,java.lang.String> |
legacyToJavaMethod
Lookup of the Java name (known to be unique) from the legacy signature (which also is be unique).
|
private java.util.Set<java.lang.String> |
loadedProperties
A set of already loaded properties - as a class is parsed during both prescan and full-scan.
|
private java.lang.Object |
lock
Internal lock object.
|
private static ConversionStatus |
LOG
Logger.
|
private java.lang.String |
name
Fully qualified name of the class or interface.
|
static NameConverter |
nconvert
The converter to use for generating Java names.
|
private OOType |
otype
Flag marking the type of this OO 4GL compile unit.
|
private ClassDefinition[] |
parents
Super class definition.
|
private boolean |
processed
Flag indicating that this class was processed (fully parsed) after it was pre-scanned.
|
private SchemaDictionary |
schemaDict
Provides schema lookup for this class' scope.
|
private java.util.Map<java.lang.String,java.util.Map<SignatureKey,MemberData>> |
smethods
Static methods mapped by name.
|
private java.util.Map<ClassDefinition.DataStoreType,java.util.Map<java.lang.String,MemberData>> |
sstores
Static data stores.
|
private int |
tempIdx
Temporary ID number (before AST IDs are assigned).
|
ABBREVIATED, AGGREGATE, ALTER_TABLE, AMBIGUOUS, ANNOTATION, ANY_LOCK, AREA, ARGUMENTS, AS_BUTTON, ASSIGN, ASSIGNMENT, AST_NODE, AT, ATTR_CHAR, ATTR_CLASS, ATTR_COM_HANDLE, ATTR_DATE, ATTR_DATETIME, ATTR_DATETIME_TZ, ATTR_DEC, ATTR_HANDLE, ATTR_INT, ATTR_INT64, ATTR_LOGICAL, ATTR_LONGCHAR, ATTR_MEMPTR, ATTR_POLY, ATTR_RAW, ATTR_RECID, ATTR_ROWID, BACKSLASH, BEGIN_ATTR, BEGIN_ATTR_METH, BEGIN_BUFFERTYPES, BEGIN_CALLGRAPH, BEGIN_FIELDTYPES, BEGIN_FUNCTYPES, BEGIN_FWD_EXTENSION, BEGIN_INDEX_MATCH_TYPES, BEGIN_LVALUE, BEGIN_METATYPES, BEGIN_METH, BEGIN_MULTIWORD, BEGIN_NATIVE_VARTYPES, BEGIN_OO_METH, BEGIN_RECORDTYPES, BEGIN_RESERVED, BEGIN_SCHEMA, BEGIN_SCHEMAKW, BEGIN_UNRESERVED, BEGIN_VARTYPES, BEGIN_WIDGETS, BEGINS_MATCH, BITWISE_AND, BITWISE_NOT, BITWISE_OR, BITWISE_XOR, BLOCK, BOGUS, BOOL_FALSE, BOOL_TRUE, BROKEN_PREPROC_ARG, BUFFER, BUFFER_SCOPE, CARET, CATEGORY, CHILD_PROCESS, CLASS_DEF, CLASS_EVENT, CLASS_NAME, CLIENT_WHERE, CLIENT_WHERE_SUBST, CLOSE_CURSOR, CLOSE_QUERY, CLOSE_STORED_PROCEDURE, CMT_CLOSE, CMT_OPEN, COLON, COLOR_PHRASE, COLUMN_LIST, COLUMN_REF, COM_INVOCATION, COM_METHOD, COM_OBJECT, COM_PARAMETER, COM_PROPERTY, COMMA, COMMAND_TEXT, COMMAND_TOKENS, COMMENT, CONNECT_OPTIONS, CONNECT_TEXT, CONSTRUCTOR, CONTENT_ARRAY, COPY_FROM_SB, COPY_TO_SB, CREATE_ALIAS, CREATE_BROWSE, CREATE_BUFFER, CREATE_CALL, CREATE_CLIENT_PRINCIPAL, CREATE_DATA_SOURCE, CREATE_DATABASE, CREATE_DATASET, CREATE_GENERIC_OCX, CREATE_INDEX, CREATE_OBJECT, CREATE_QUERY, CREATE_REPORT, CREATE_SAX_ATTRIBUTES, CREATE_SAX_READER, CREATE_SAX_WRITER, CREATE_SERVER, CREATE_SMTP_EMAIL, CREATE_SOAP_HEADER, CREATE_SOAP_HEADER_ENTRYREF, CREATE_SOCKET, CREATE_SRV_SOCKET, CREATE_TABLE, CREATE_TEMP_TABLE, CREATE_TIMER, CREATE_VIEW, CREATE_WIDGET, CREATE_WIDGET_POOL, CREATE_X_DOCUMENT, CREATE_X_NODEREF, CUSTOMER_SPECIFIC, CYCLE_ON_LIMIT, DATA_RELATION, DATA_SET, DATA_SOURCE, DATA_SOURCE_BUFFER, DATA_SOURCE_QUERY, DATABASE, DATE_LITERAL, DATETIME_LITERAL, DATETIME_TZ_LITERAL, DB_EVENT, DB_REF_NON_STATIC, DB_SYMBOL, DDE_ADVISE, DDE_EXECUTE, DDE_GET, DDE_INITIATE, DDE_REQUEST, DDE_SEND, DDE_SERVER, DDE_TERMINATE, DEC_LITERAL, DECLARE_CURSOR, DEFINE_BROWSE, DEFINE_BUFFER, DEFINE_BUTTON, DEFINE_DATA_SOURCE, DEFINE_DATASET, DEFINE_ENUM, DEFINE_EVENT, DEFINE_FIELD, DEFINE_FRAME, DEFINE_IMAGE, DEFINE_MENU, DEFINE_PARAMETER, DEFINE_PROPERTY, DEFINE_PROPERTY_GET, DEFINE_PROPERTY_SET, DEFINE_QUERY, DEFINE_RECTANGLE, DEFINE_STREAM, DEFINE_SUB_MENU, DEFINE_TEMP_TABLE, DEFINE_VARIABLE, DEFINE_WORK_TABLE, DELETE_ALIAS, DELETE_FROM, DELETE_OBJECT, DELETE_PROCEDURE, DELETE_WIDGET, DELETE_WIDGET_POOL, DESCRIPTION, DESTRUCTOR, DIGIT, DISABLE_TRIGGERS, DIVIDE, DLL_CALL_TYPE_LITERAL, DOT, DOTNET_DELEGATE, DROP_INDEX, DROP_TABLE, DROP_VIEW, DSTRING, DUMP_NAME, DYNAMIC, EDITING_BLOCK, EMBEDDED_ASSIGNMENT, EMBEDDED_SQL, EMPTY_TEMP_TABLE, END_ATTR, END_ATTR_METH, END_BUFFERTYPES, END_CALLGRAPH, END_FIELDTYPES, END_FUNCTYPES, END_FWD_EXTENSION, END_INDEX_MATCH_TYPES, END_LVALUE, END_METATYPES, END_METH, END_MULTIWORD, END_NATIVE_VARTYPES, END_OO_METH, END_RECORDTYPES, END_RESERVED, END_SCHEMA, END_SCHEMAKW, END_UNRESERVED, END_VARTYPES, END_WIDGETS, ENUM_DEF, ENUM_VALUE, EOF, EQUALITY_MATCH, EQUALS, EVENT, EVENT_LIST, EVENT_SIGNATURE, EXCLUSIVE_LOCK_LITERAL, EXPANDED_SCOPE, EXPORT_FIELD, EXPRESSION, EXTERNAL_PROCEDURE, FIELD_BIGINT, FIELD_BLOB, FIELD_BYTE, FIELD_CHAR, FIELD_CLASS, FIELD_CLOB, FIELD_COM_HANDLE, FIELD_DATE, FIELD_DATETIME, FIELD_DATETIME_TZ, FIELD_DEC, FIELD_DOUBLE, FIELD_FIXCHAR, FIELD_FLOAT, FIELD_HANDLE, FIELD_INT, FIELD_INT64, FIELD_LOGICAL, FIELD_RAW, FIELD_RECID, FIELD_ROWID, FIELD_SHORT, FIELD_TIME, FIELD_TIMESTAMP, FILE_RESOURCE, FILENAME, FILEROOT, FILTER_SPEC, FORM_ITEM, FORMAT_PHRASE, FRAME_ALLOC, FRAME_ELEMENT, FRAME_LOCK, FRAME_PHRASE, FRAME_SCOPE, FRAME_UNLOCK, FREE_REFERENCE, FROZEN, FUNC_CALL_TYPE_LITERAL, FUNC_CHAR, FUNC_CLASS, FUNC_COM_HANDLE, FUNC_DATE, FUNC_DATETIME, FUNC_DATETIME_TZ, FUNC_DEC, FUNC_HANDLE, FUNC_INT, FUNC_INT64, FUNC_LOGICAL, FUNC_LONGCHAR, FUNC_MEMPTR, FUNC_POLY, FUNC_RAW, FUNC_RECID, FUNC_ROWID, FUNCTION, FUNCTION_CALL, GET_ATTR_CTYPE_LITERAL, GROUP_BY, GT, GTE, HANDLE_TO, HEX_DIGIT, HEX_LITERAL, HIDDEN, IMPORT_FIELD, IN_WIDGET_POOL, INCLUDE_FILE, INCLUDES, INCREMENT, INDEX, INDEX_FIELD, INLINE_VAR_DEF, INLINE_VAR_DEF_ARRAY, INNER_BLOCK, INNER_JOIN, INPUT_CLEAR, INPUT_CLOSE, INPUT_FROM, INPUT_OUTPUT_CLOSE, INPUT_OUTPUT_THRU, INPUT_THRU, INSERT_INTO, INT_PROC, INTERFACE_DEF, INTERNAL_PROCEDURE, IO_OPTIONS, IPC_RESOURCE, IS_NOT_NULL, IS_NULL, JUNK, KEY_FIELD, KEY_FUNCTION, KW_3D, KW_ABBV, KW_ABORT, KW_ABS, KW_ABSTRACT, KW_ACC_CHG, KW_ACC_RCHG, KW_ACCEL, KW_ACCUM, KW_ACT_FORM, KW_ACT_WIN, KW_ACTIVATE, KW_ACTIVE, KW_ACTOR, KW_ADD, KW_ADD_1ST, KW_ADD_BCCA, KW_ADD_BUF, KW_ADD_C_C, KW_ADD_C_F, KW_ADD_C_N, KW_ADD_CC_A, KW_ADD_EVTP, KW_ADD_F_F, KW_ADD_F_N, KW_ADD_HENT, KW_ADD_IDXF, KW_ADD_IMG, KW_ADD_INVL, KW_ADD_L_C, KW_ADD_L_N, KW_ADD_LAST, KW_ADD_LIKF, KW_ADD_LIKI, KW_ADD_N_N, KW_ADD_NEWF, KW_ADD_NEWI, KW_ADD_PREL, KW_ADD_REL, KW_ADD_SLOC, KW_ADD_SRCB, KW_ADD_SUP, KW_ADD_TAB, KW_ADD_TO_A, KW_ADM_DATA, KW_ADM_TO, KW_ADVISE, KW_AFT_BUFF, KW_AFT_FILL, KW_AFT_R_F, KW_AFT_ROID, KW_AFT_TBL, KW_ALERT_BX, KW_ALIAS, KW_ALIGN, KW_ALL, KW_ALLW_C_S, KW_ALLW_REP, KW_ALT_KEY, KW_ALTER, KW_ALW_ON_T, KW_AMBIG, KW_ANALYZ, KW_AND, KW_ANSI_ONL, KW_ANY, KW_ANY_KEY, KW_ANY_PRT, KW_ANYWHERE, KW_APP_INFO, KW_APP_PW, KW_APP_UID, KW_APPEND, KW_APPEND_C, KW_APPEND_L, KW_APPL, KW_APPL_A_B, KW_APPL_CBK, KW_APPL_CID, KW_APPLY, KW_AREA, KW_ARR_MSG, KW_AS, KW_AS_THRD, KW_ASC, KW_ASCEND, KW_ASCII_2H, KW_ASK_OVER, KW_ASSEMBLY, KW_ASSIGN, KW_AST_ACTI, KW_ASYNC, KW_ASYNC_RC, KW_ASYNC_RH, KW_AT, KW_AT_W_BRW, KW_ATT_DSRC, KW_ATT_FILE, KW_ATT_PLST, KW_ATT_URL, KW_ATTR, KW_ATTR_NAM, KW_AUD_CTRL, KW_AUD_ENAB, KW_AUD_EV_C, KW_AUD_POL, KW_AUTHBLOB, KW_AUTHEN_F, KW_AUTHORZN, KW_AUTO_COM, KW_AUTO_D_X, KW_AUTO_DEL, KW_AUTO_END, KW_AUTO_GO, KW_AUTO_IND, KW_AUTO_RES, KW_AUTO_RET, KW_AUTO_SYN, KW_AUTO_VAL, KW_AUTO_ZAP, KW_AUTOMATC, KW_AVAIL, KW_AVERAGE, KW_AVG, KW_AVL_FMTS, KW_AVL_MSGS, KW_B_ENDIAN, KW_B4_BUFF, KW_B4_FILL, KW_B4_HIDE, KW_B4_R_F, KW_B4_ROWID, KW_B4_TABLE, KW_BACK_TAB, KW_BACKGRND, KW_BACKSP, KW_BACKWARD, KW_BAS_LOGG, KW_BASE_ADE, KW_BASE_KEY, KW_BASE64_D, KW_BASE64_E, KW_BATCH_MO, KW_BATCH_SZ, KW_BEG_EV_G, KW_BEGINS, KW_BELL, KW_BETWEEN, KW_BGCOLOR, KW_BGCOLRGB, KW_BIGINT, KW_BINARY, KW_BIND, KW_BIND_WH, KW_BL_BTNFN, KW_BL_CGR_K, KW_BL_CURGR, KW_BL_G_KEY, KW_BL_GADD, KW_BL_GCLR, KW_BL_GIFP, KW_BL_GIKEY, KW_BL_IADD, KW_BL_ITMFN, KW_BLANK, KW_BLK_IT_D, KW_BLK_LVL, KW_BLOB, KW_BLOCK, KW_BORD_B_C, KW_BORD_B_P, KW_BORD_L_C, KW_BORD_L_P, KW_BORD_R_C, KW_BORD_R_P, KW_BORD_T_C, KW_BORD_T_P, KW_BOTH, KW_BOTTOM, KW_BOTTOM_C, KW_BOX, KW_BOX_SEL, KW_BR_AGENT, KW_BR_IP, KW_BR_PORT, KW_BR_TZ, KW_BREAK, KW_BREAK_L, KW_BROWSE, KW_BTN_LIST, KW_BTOS, KW_BUF_COMP, KW_BUF_COPY, KW_BUF_CREA, KW_BUF_DEL, KW_BUF_FLD, KW_BUF_GRPI, KW_BUF_GRPN, KW_BUF_HNDL, KW_BUF_NAME, KW_BUF_PARI, KW_BUF_REL, KW_BUF_TENI, KW_BUF_TENN, KW_BUF_VAL, KW_BUF_VLID, KW_BUFFER, KW_BUFFER_C, KW_BUFFER_L, KW_BUFPOOL, KW_BUFRPOOL, KW_BUILD_TR, KW_BUTTON, KW_BY, KW_BY_PTR, KW_BY_REF, KW_BY_VALUE, KW_BY_VAR_P, KW_BYTE, KW_BYTES_R, KW_BYTES_W, KW_C_NOD_D, KW_C_T_V_N, KW_CACHE, KW_CACHE_SZ, KW_CALBGCLR, KW_CALCUFMT, KW_CALENDAR, KW_CALFGCLR, KW_CALFMTST, KW_CALL, KW_CALL_NAM, KW_CALL_TYP, KW_CALLBACK, KW_CALTITBG, KW_CALTITFG, KW_CALTRLFG, KW_CALUPDWN, KW_CALVALUE, KW_CAN_CREA, KW_CAN_DEL, KW_CAN_DO, KW_CAN_DUMP, KW_CAN_FIND, KW_CAN_LOAD, KW_CAN_QRY, KW_CAN_READ, KW_CAN_SET, KW_CAN_WRT, KW_CANC_BRK, KW_CANCEL_B, KW_CANCEL_P, KW_CANCEL_R, KW_CANCELLD, KW_CAPFNT, KW_CAPFNTSZ, KW_CAPS, KW_CARE_PNT, KW_CASE, KW_CASE_SEN, KW_CAST, KW_CATCH, KW_CATEGORY, KW_CBIT, KW_CDECL, KW_CEASE, KW_CENTER, KW_CFG_NAME, KW_CHAINED, KW_CHAR, KW_CHAR_LEN, KW_CHARSET, KW_CHART, KW_CHECK, KW_CHECK_AM, KW_CHECK_BO, KW_CHECKED, KW_CHLD_BUF, KW_CHLD_NUM, KW_CHOICES, KW_CHOOSE, KW_CHR, KW_CLASS, KW_CLEA_TAB, KW_CLEA_WIN, KW_CLEAR, KW_CLIP, KW_CLN_IP, KW_CLN_PORT, KW_CLN_TIME, KW_CLN_TZ, KW_CLNT_C_I, KW_CLNT_DIS, KW_CLNT_PRL, KW_CLNT_TTY, KW_CLNT_TYP, KW_CLNT_WS, KW_CLOB, KW_CLOB_COL, KW_CLOB_CP, KW_CLOB_TYP, KW_CLONE_ND, KW_CLOSE, KW_CLOSE_AP, KW_CLOSE_LG, KW_CLR_ALL, KW_CLR_AP_C, KW_CLR_ATTL, KW_CLR_BCCL, KW_CLR_CC_L, KW_CLR_EMBL, KW_CLR_LOG, KW_CLR_NIML, KW_CLR_NODS, KW_CLR_S_AR, KW_CLR_SEL, KW_CLR_TABS, KW_CLR_TO_L, KW_CLS_TYPE, KW_CNCL_R_A, KW_CNTRL_BX, KW_CNTRL_FR, KW_CNTRL_NM, KW_CODE, KW_CODEBASE, KW_COL, KW_COL_BGC, KW_COL_CP, KW_COL_DC, KW_COL_FGC, KW_COL_FONT, KW_COL_L_SA, KW_COL_LAB, KW_COL_MOV, KW_COL_NODE, KW_COL_OF, KW_COL_PFC, KW_COL_R_O, KW_COL_RES, KW_COL_SCR, KW_COL_SRT, KW_COLL_A_E, KW_COLL_ALL, KW_COLLATE, KW_COLON, KW_COLON_AL, KW_COLOR, KW_COLR_TAB, KW_COLUMNS, KW_COM_DATA, KW_COM_HNDL, KW_COM_SELF, KW_COMBO_BX, KW_COMMAND, KW_COMPARE, KW_COMPARES, KW_COMPILE, KW_COMPILER, KW_COMPLETE, KW_CONN, KW_CONN_ED, KW_CONNTYPE, KW_CONSTRUC, KW_CONTAINS, KW_CONTENTS, KW_CONTROL, KW_CONTROLS, KW_CONVERT, KW_COOKIE_D, KW_COPY, KW_COUNT, KW_COUNT_OF, KW_COVERAGE, KW_CP, KW_CP_CVT, KW_CPCASE, KW_CPCOLL, KW_CPINTERN, KW_CPLOG, KW_CPPRINT, KW_CPRCODEI, KW_CPRCODEO, KW_CPSTREAM, KW_CPTERM, KW_CPY_DSET, KW_CPY_LOB, KW_CPY_SATR, KW_CPY_TTBL, KW_CR_LK_SQ, KW_CRC, KW_CRC_VAL, KW_CRE_IMAG, KW_CREAT_LK, KW_CREAT_ND, KW_CREAT_NN, KW_CREAT_OA, KW_CREAT_RL, KW_CREAT_SN, KW_CREAT_TF, KW_CREATE, KW_CRT_COL, KW_CRT_MIMG, KW_CTOS, KW_CTX, KW_CTX_H, KW_CTX_H_F, KW_CTX_H_ID, KW_CTX_PATH, KW_CTX_POP, KW_CUR_CHAR, KW_CUR_CHG, KW_CUR_COL, KW_CUR_DATE, KW_CUR_DOWN, KW_CUR_ENV, KW_CUR_ITER, KW_CUR_LANG, KW_CUR_LEFT, KW_CUR_LINE, KW_CUR_OFF, KW_CUR_QRY, KW_CUR_R_M, KW_CUR_RES, KW_CUR_RGHT, KW_CUR_RQI, KW_CUR_RSI, KW_CUR_UP, KW_CUR_VAL, KW_CUR_WIN, KW_CURR_TAB, KW_CURRENCY, KW_CURRENT, KW_CURSOR, KW_CUT, KW_CVT_2OFF, KW_CVT_3D_C, KW_CVT_DT, KW_CYCLE, KW_DATA_BND, KW_DATA_E_R, KW_DATA_REL, KW_DATA_SCM, KW_DATA_SM, KW_DATA_SRC, KW_DATA_SRI, KW_DATABASE, KW_DATASET, KW_DATASRV, KW_DATATYPE, KW_DATE, KW_DATE_FMT, KW_DATE_SEP, KW_DATE_TZ, KW_DATETIME, KW_DAY, KW_DB_CTXT, KW_DB_LIST, KW_DB_REF, KW_DB_REM_H, KW_DBCOLL, KW_DBCP, KW_DBG_ALRT, KW_DBG_LST, KW_DBNAME, KW_DBPARAM, KW_DBREST, KW_DBTASKID, KW_DBTYPE, KW_DBVERS, KW_DCLK_EXP, KW_DCOLOR, KW_DD_OTREE, KW_DDE, KW_DDE_ERR, KW_DDE_ID, KW_DDE_ITEM, KW_DDE_NAME, KW_DDE_NOTI, KW_DDE_TOPI, KW_DE_REGIS, KW_DEBLANK, KW_DEBUG, KW_DEBUGGER, KW_DEC, KW_DEC_SEP, KW_DECIMALS, KW_DECL_NSP, KW_DECLARE, KW_DECRYPT, KW_DEF_ACTN, KW_DEF_BUFH, KW_DEF_COMM, KW_DEF_EXTN, KW_DEF_NOXL, KW_DEF_POP, KW_DEF_STR, KW_DEF_UEVM, KW_DEF_VAL, KW_DEF_WIN, KW_DEFAULT, KW_DEFINE, KW_DEFLT_BN, KW_DEL_C_R, KW_DEL_CHAR, KW_DEL_COL, KW_DEL_COOK, KW_DEL_E_L, KW_DEL_FLD, KW_DEL_H_EN, KW_DEL_LINE, KW_DEL_NODE, KW_DEL_PROC, KW_DEL_R_L, KW_DEL_S_C, KW_DEL_S_R, KW_DEL_S_RS, KW_DEL_WORD, KW_DELEGATE, KW_DELETE, KW_DELIMIT, KW_DESCEND, KW_DESCR, KW_DESEL_FR, KW_DESEL_R, KW_DESEL_SR, KW_DESELCTN, KW_DESTRUCT, KW_DET_DSRC, KW_DEVICEID, KW_DIALOG, KW_DICT, KW_DIR, KW_DIRECTRY, KW_DIS_A_ZA, KW_DIS_CEDT, KW_DIS_D_TR, KW_DIS_L_TR, KW_DIS_REDR, KW_DIS_STRP, KW_DISABL_C, KW_DISABLE, KW_DISABLED, KW_DISCONN, KW_DISP, KW_DISP_MSG, KW_DISP_TYP, KW_DISP_TZ, KW_DISPATCH, KW_DISTINCT, KW_DLL_C_T, KW_DMP_NAME, KW_DO, KW_DOMAIN_D, KW_DOMAIN_N, KW_DOMAIN_T, KW_DOS, KW_DOUBLE, KW_DOWN, KW_DRAG_EN, KW_DRAG_NOD, KW_DRAG_OVR, KW_DRAGDROP, KW_DROP, KW_DROP_DWN, KW_DROP_FN, KW_DROP_LST, KW_DROP_TAR, KW_DSET_HND, KW_DSL_MGR, KW_DUMP, KW_DUMP_LGN, KW_DYN_CAST, KW_DYN_CURV, KW_DYN_ENUM, KW_DYN_FUNC, KW_DYN_INVK, KW_DYN_NEW, KW_DYN_NEXV, KW_DYN_PROP, KW_DYNAMIC, KW_E_PROC_C, KW_EACH, KW_ECHO, KW_EDGE_C, KW_EDGE_P, KW_EDIT_B_T, KW_EDIT_C_P, KW_EDIT_C_U, KW_EDIT_CLR, KW_EDIT_CPY, KW_EDIT_CUT, KW_EDIT_PAS, KW_EDIT_TAB, KW_EDIT_UND, KW_EDITING, KW_EDITOR, KW_EH_FL, KW_EH_SR, KW_ELSE, KW_EMB_FILE, KW_EMB_URL, KW_EMPTY, KW_EMPTY_DS, KW_EMPTY_SN, KW_EMPTY_TT, KW_ENABLE, KW_ENABLE_C, KW_ENABLE_E, KW_ENABLED, KW_ENC_AMK, KW_ENC_SALT, KW_ENCODE, KW_ENCODING, KW_ENCRYPT, KW_END, KW_END_B_SN, KW_END_DOC, KW_END_ELEM, KW_END_ERR, KW_END_EV_G, KW_END_F_D, KW_END_MOV, KW_END_RESZ, KW_END_RRES, KW_END_SEAR, KW_END_USER, KW_ENDKEY, KW_ENS_N_V, KW_ENT_EX_L, KW_ENT_TLST, KW_ENTER_MB, KW_ENTERED, KW_ENTRY, KW_ENUM, KW_EQ, KW_ERR_CODE, KW_ERR_COL, KW_ERR_OBJD, KW_ERR_ROW, KW_ERR_S_T, KW_ERR_STAT, KW_ERR_STR, KW_ERROR, KW_ESCAPE, KW_ETIME, KW_EVENTS, KW_EVT_ACTI, KW_EVT_GRID, KW_EVT_PROC, KW_EVT_TYPE, KW_EXC_LOCK, KW_EXCEPT, KW_EXCL_ID, KW_EXCL_WEB, KW_EXEC_LOG, KW_EXECUTE, KW_EXISTS, KW_EXIT, KW_EXITCODE, KW_EXP, KW_EXP_N_IC, KW_EXP_NODE, KW_EXP_ON_E, KW_EXP_SCLK, KW_EXPA_ALL, KW_EXPAND, KW_EXPANDBL, KW_EXPLICIT, KW_EXPORT, KW_EXPORT_P, KW_EXTENDED, KW_EXTENT, KW_EXTERN, KW_F_KEY_H, KW_FETCH, KW_FETCH_SR, KW_FGCOLOR, KW_FGCOLRGB, KW_FIELD, KW_FIL_C_D, KW_FIL_C_T, KW_FIL_INFO, KW_FIL_M_D, KW_FIL_M_T, KW_FIL_NAME, KW_FIL_OFF, KW_FIL_SIZE, KW_FIL_TYPE, KW_FILE, KW_FILL, KW_FILL_IN, KW_FILL_MOD, KW_FILL_WST, KW_FILLED, KW_FILTERS, KW_FINAL, KW_FINALLY, KW_FIND, KW_FIND_1ST, KW_FIND_BR, KW_FIND_CS, KW_FIND_CUR, KW_FIND_FD, KW_FIND_GLO, KW_FIND_LST, KW_FIND_NO, KW_FIND_NOD, KW_FIND_NXT, KW_FIND_PO, KW_FIND_PRV, KW_FIND_SEL, KW_FIND_UNI, KW_FIND_WA, KW_FINDER, KW_FIR_DSET, KW_FIRST, KW_FIRST_AR, KW_FIRST_BU, KW_FIRST_CH, KW_FIRST_CO, KW_FIRST_DS, KW_FIRST_FM, KW_FIRST_N, KW_FIRST_OB, KW_FIRST_OF, KW_FIRST_PR, KW_FIRST_QR, KW_FIRST_SO, KW_FIRST_SR, KW_FIRST_SS, KW_FIRST_TI, KW_FIT_LCOL, KW_FIX_C_L, KW_FIX_CP, KW_FIXCHAR, KW_FIXD_ONL, KW_FLAGS, KW_FLAT_BUT, KW_FLD_TRG, KW_FLOAT, KW_FLTR_MAP, KW_FMT_DT, KW_FMT_SA, KW_FNT_BOLD, KW_FNT_ITAL, KW_FNT_NAME, KW_FNT_SIZE, KW_FNT_UNDL, KW_FOC_ASEL, KW_FOC_NKEY, KW_FOC_NODE, KW_FOCUS, KW_FOCUS_R, KW_FOCUS_RS, KW_FONT, KW_FONT_TAB, KW_FOR, KW_FORCE_F, KW_FORE, KW_FORM, KW_FORM_INP, KW_FORM_LIN, KW_FORMAT, KW_FORMATTE, KW_FORWARD, KW_FR_COL, KW_FR_DB, KW_FR_DOWN, KW_FR_FIELD, KW_FR_FILE, KW_FR_INDEX, KW_FR_LINE, KW_FR_NAME, KW_FR_ROW, KW_FR_SPACE, KW_FR_VAL, KW_FR_X, KW_FR_Y, KW_FRAGMENT, KW_FRAME, KW_FREQ, KW_FROM, KW_FROM_CHR, KW_FROM_CUR, KW_FROM_PIX, KW_FROZEN, KW_FS_NKEY, KW_FS_NODE, KW_FULL_H_C, KW_FULL_H_P, KW_FULL_W_C, KW_FULL_W_P, KW_FULLPATH, KW_FUNC_C_T, KW_FUNCT, KW_FV_NODE, KW_FWD_DRIV, KW_FWD_LOGF, KW_FWD_ONLY, KW_G_C_BGCO, KW_G_C_FGCO, KW_G_COL_P, KW_G_COL_W, KW_GEN_MD5, KW_GEN_PBEK, KW_GEN_PBES, KW_GEN_RNDK, KW_GEN_UUID, KW_GET, KW_GET_1ST, KW_GET_A_CT, KW_GET_A_N, KW_GET_ATTL, KW_GET_ATTR, KW_GET_B_A, KW_GET_B_OR, KW_GET_BCCL, KW_GET_BDAT, KW_GET_BITS, KW_GET_BLUE, KW_GET_BR_C, KW_GET_BUFH, KW_GET_BYTE, KW_GET_BYTS, KW_GET_C_S, KW_GET_CBPC, KW_GET_CBPN, KW_GET_CC_L, KW_GET_CFG, KW_GET_CFGV, KW_GET_CGI, KW_GET_CGIL, KW_GET_CGIV, KW_GET_CGL, KW_GET_CGLV, KW_GET_CHG, KW_GET_CHLD, KW_GET_CLL, KW_GET_CLNT, KW_GET_CODP, KW_GET_COLL, KW_GET_COOK, KW_GET_CREL, KW_GET_CUR, KW_GET_D_E, KW_GET_D_F, KW_GET_DBCL, KW_GET_DBL, KW_GET_DIR, KW_GET_DS_B, KW_GET_DYN, KW_GET_EMBL, KW_GET_ERRC, KW_GET_ERRR, KW_GET_FCN, KW_GET_FILE, KW_GET_FLD, KW_GET_FLT, KW_GET_FNAM, KW_GET_FOFF, KW_GET_GRN, KW_GET_HD_E, KW_GET_I64, KW_GET_IBNN, KW_GET_IBQN, KW_GET_ITER, KW_GET_K_V, KW_GET_L_V, KW_GET_LAST, KW_GET_LIC, KW_GET_LNBI, KW_GET_LONG, KW_GET_LPRM, KW_GET_MOP, KW_GET_MSG, KW_GET_MSGG, KW_GET_MSGS, KW_GET_N_AT, KW_GET_N_BG, KW_GET_N_FG, KW_GET_N_HC, KW_GET_N_N, KW_GET_NEXT, KW_GET_NLEV, KW_GET_NODE, KW_GET_NSN, KW_GET_NTXT, KW_GET_NUM, KW_GET_NVV, KW_GET_PAR, KW_GET_PARN, KW_GET_PREV, KW_GET_PROP, KW_GET_PRT, KW_GET_PSN, KW_GET_PTR, KW_GET_QNBI, KW_GET_R_R, KW_GET_RED, KW_GET_REL, KW_GET_RGB, KW_GET_S_O, KW_GET_SELW, KW_GET_SER, KW_GET_SHRT, KW_GET_SIG, KW_GET_SIMG, KW_GET_SNC, KW_GET_SRCB, KW_GET_STR, KW_GET_SZ, KW_GET_T_S, KW_GET_TBI, KW_GET_TBNN, KW_GET_TBQN, KW_GET_THCH, KW_GET_THPX, KW_GET_TI, KW_GET_TNOD, KW_GET_TO_L, KW_GET_TOPB, KW_GET_TWCH, KW_GET_TWPX, KW_GET_U_F, KW_GET_UBI, KW_GET_UL, KW_GET_USHT, KW_GET_VAL, KW_GET_VBI, KW_GET_VBNN, KW_GET_VBQN, KW_GET_WAIT, KW_GET_WKDR, KW_GETATTRI, KW_GETCLASS, KW_GLOBAL, KW_GO, KW_GO_ON, KW_GO_PEND, KW_GOTO, KW_GRANT, KW_GRAPHIC, KW_GRD_F_H, KW_GRD_F_V, KW_GRD_SNAP, KW_GRD_UHC, KW_GRD_UHP, KW_GRD_UWC, KW_GRD_UWP, KW_GRD_VIS, KW_GROUP, KW_GROUP_BX, KW_GT, KW_GTE, KW_GUID, KW_GW, KW_H_SCRL_P, KW_HANDLE, KW_HANDLER, KW_HAS_LOBS, KW_HAS_REC, KW_HAVING, KW_HEADER, KW_HEIGHT_C, KW_HEIGHT_P, KW_HELP, KW_HELP_SA, KW_HELP_TOP, KW_HEX_DECD, KW_HEX_ENCD, KW_HID_FLD, KW_HID_FLDL, KW_HIDDEN, KW_HIDE, KW_HINT, KW_HIT_TEST, KW_HIT_TFWD, KW_HOME, KW_HONOR_PK, KW_HONOR_RK, KW_HORIZ, KW_HOST_B_O, KW_HTML_BWS, KW_HTML_CHS, KW_HTML_ENC, KW_HTML_EOL, KW_HTML_EOP, KW_HTML_FRB, KW_HTML_FRE, KW_HTML_H_B, KW_HTML_H_E, KW_HTML_T_B, KW_HTML_T_E, KW_HTMLERR, KW_HWND, KW_HYPERLNK, KW_ICFPARM, KW_ICON, KW_IDEPHWND, KW_IDEWNTYP, KW_IDX_FLD, KW_IDX_HINT, KW_IDX_INFO, KW_IDX_REPO, KW_IF, KW_IGN_CMOD, KW_IL_BGCOL, KW_IL_HEIGH, KW_IL_IMG, KW_IL_LIST, KW_IL_MASK, KW_IL_OVER, KW_IL_UMASK, KW_IL_WIDTH, KW_IMAGE, KW_IMG_DOWN, KW_IMG_INS, KW_IMG_LIST, KW_IMG_ONLY, KW_IMG_SZ, KW_IMG_SZ_C, KW_IMG_SZ_P, KW_IMG_UP, KW_IMM_DISP, KW_IMP_NODE, KW_IMP_PRNC, KW_IMPLEMTS, KW_IMPORT, KW_IN, KW_IN_HNDL, KW_IN_OUT, KW_INACTIVE, KW_INC_EX_I, KW_INCR, KW_INDENT, KW_INDEX, KW_INDICAT, KW_INFO, KW_INH_BGC, KW_INH_FGC, KW_INHERITS, KW_INIT, KW_INIT_C_P, KW_INIT_D_T, KW_INIT_DIR, KW_INIT_FLT, KW_INIT_SA, KW_INIT_SES, KW_INITIATE, KW_INNER, KW_INNER_C, KW_INNER_L, KW_INPT_VAL, KW_INPUT, KW_INS_ATTR, KW_INS_B4, KW_INS_BTAB, KW_INS_COL, KW_INS_FILE, KW_INS_FLD, KW_INS_FLDD, KW_INS_FLDL, KW_INS_MODE, KW_INS_ROW, KW_INS_STR, KW_INS_TAB, KW_INSERT, KW_INST_PRC, KW_INT, KW_INT_ENT, KW_INT64, KW_INTERFAC, KW_INTERVAL, KW_INTO, KW_INVOKE, KW_IP_TIME, KW_IS, KW_IS_ATTR, KW_IS_C_VIS, KW_IS_CLASS, KW_IS_COLCP, KW_IS_CP_FX, KW_IS_DB_MT, KW_IS_JSON, KW_IS_LEAD, KW_IS_M_TEN, KW_IS_MSEL, KW_IS_N_EXP, KW_IS_OPEN, KW_IS_P_SET, KW_IS_PART, KW_IS_R_SEL, KW_IS_SEL, KW_IS_XML, KW_ISO_DATE, KW_ITEM, KW_ITEM_ROW, KW_ITER_CHG, KW_IUNKNOWN, KW_JAVA, KW_JOIN, KW_JOIN_BY, KW_KBLABEL, KW_KEEP_CON, KW_KEEP_MSG, KW_KEEP_SEC, KW_KEEP_TAB, KW_KEEP_ZOR, KW_KEY, KW_KEYCODE, KW_KEYFUNC, KW_KEYLAB, KW_KEYS, KW_KPAD_CLE, KW_KPAD_HOT, KW_KPAD_QRY, KW_KW, KW_KW_ALL, KW_L_ENDIAN, KW_L_TRIM, KW_LAB_BGC, KW_LAB_DC, KW_LAB_FGC, KW_LAB_FONT, KW_LAB_H_C, KW_LAB_PFC, KW_LABEL, KW_LABEL_SA, KW_LABELS, KW_LANDSCAP, KW_LANGUAGE, KW_LARGE, KW_LAST, KW_LAST_AR, KW_LAST_BAT, KW_LAST_CH, KW_LAST_EVT, KW_LAST_FRM, KW_LAST_OBJ, KW_LAST_OF, KW_LAST_PRC, KW_LAST_SOC, KW_LAST_SRV, KW_LAST_SS, KW_LAST_TI, KW_LASTKEY, KW_LC, KW_LCD_REFR, KW_LCD_SWIN, KW_LCD_WSTR, KW_LCHR_2NV, KW_LDBNAME, KW_LEAVE, KW_LEFT, KW_LEFT_AL, KW_LEFT_END, KW_LEFT_MC, KW_LEFT_MD, KW_LEFT_MDC, KW_LEFT_MU, KW_LENGTH, KW_LG_2_SM, KW_LIB, KW_LIB_C_C, KW_LIKE, KW_LIKE_SEQ, KW_LINE, KW_LINE_CNT, KW_LIST_ITM, KW_LIST_PNM, KW_LISTING, KW_LISTINGS, KW_LIT_QSTN, KW_LOAD, KW_LOAD_DMN, KW_LOAD_I_D, KW_LOAD_I_I, KW_LOAD_I_U, KW_LOAD_ICO, KW_LOAD_IMG, KW_LOAD_M_P, KW_LOAD_PIC, KW_LOAD_S_I, KW_LOADCTRL, KW_LOB_AREA, KW_LOB_BYTE, KW_LOB_DIR, KW_LOB_SIZE, KW_LOC_C_N, KW_LOC_HOST, KW_LOC_L_N, KW_LOC_NAME, KW_LOC_P_ID, KW_LOC_PORT, KW_LOC_S_ID, KW_LOC_TYPE, KW_LOC_V_I, KW_LOCK_REG, KW_LOCKED, KW_LOG, KW_LOG_A_EV, KW_LOG_E_TS, KW_LOG_EN_T, KW_LOG_HOST, KW_LOG_ID, KW_LOG_MGR, KW_LOG_STAT, KW_LOG_THRS, KW_LOGF_NAM, KW_LOGG_LEV, KW_LOGICAL, KW_LOGOUT, KW_LONG, KW_LONGCHAR, KW_LOOKAHD, KW_LOOKUP, KW_LST_EVNT, KW_LST_PAIR, KW_LST_QRY, KW_LST_SET, KW_LST_WID, KW_LT, KW_LTE, KW_M_D_I_P, KW_M_U_I_P, KW_MACH_CLS, KW_MAINMENU, KW_MAN_HIGH, KW_MAND, KW_MAP, KW_MARG_EX, KW_MARG_H_C, KW_MARG_H_P, KW_MARG_W_C, KW_MARG_W_P, KW_MARK_NEW, KW_MARK_RS, KW_MATCHES, KW_MAX, KW_MAX_BTN, KW_MAX_CHAR, KW_MAX_D_G, KW_MAX_H_C, KW_MAX_H_P, KW_MAX_HT, KW_MAX_LVL, KW_MAX_ROWS, KW_MAX_SZ, KW_MAX_VAL, KW_MAX_W_C, KW_MAX_W_P, KW_MAX_WID, KW_MAXIMIZE, KW_MD5_DIG, KW_MD5_VAL, KW_MDL_MC, KW_MDL_MD, KW_MDL_MDC, KW_MDL_MU, KW_MEMBER, KW_MEMPTR, KW_MENU, KW_MENU_BAR, KW_MENU_DRP, KW_MENU_ITM, KW_MENU_KEY, KW_MENU_MOU, KW_MERGE_BF, KW_MERGE_CH, KW_MERGE_RC, KW_MESSAGES, KW_METHOD, KW_MF_DFR, KW_MF_DI, KW_MF_DIP, KW_MF_DL, KW_MF_DR, KW_MF_DT, KW_MF_DTAX, KW_MF_DTAXL, KW_MF_DTAXR, KW_MF_DTB, KW_MF_DTBL, KW_MF_DTBR, KW_MF_DTSX, KW_MF_GF, KW_MF_GFH, KW_MF_GFSD, KW_MF_GFSR, KW_MF_GPH, KW_MF_GPN, KW_MF_GPW, KW_MF_GTW, KW_MF_GXY, KW_MF_GZF, KW_MF_INIT, KW_MF_IR, KW_MF_MPDF, KW_MF_P2MU, KW_MF_RP, KW_MF_SF, KW_MF_SFC, KW_MF_SFH, KW_MF_SI, KW_MF_SIA, KW_MF_SLA, KW_MF_SLC, KW_MF_SLM, KW_MF_SLS, KW_MF_SNP, KW_MF_SNTL, KW_MF_SPF, KW_MF_SPN, KW_MF_SPNP, KW_MF_SPNT, KW_MF_SPO, KW_MF_SR, KW_MF_STA, KW_MF_STC, KW_MF_STS, KW_MF_SXY, KW_MF_SZF, KW_MIN, KW_MIN_BTN, KW_MIN_CWCH, KW_MIN_CWPX, KW_MIN_H_C, KW_MIN_H_P, KW_MIN_SCHM, KW_MIN_SZ, KW_MIN_VAL, KW_MIN_W_C, KW_MIN_W_P, KW_MNEMON, KW_MOD, KW_MODIFIED, KW_MODIFIRS, KW_MONTH, KW_MOU_MC, KW_MOU_MD, KW_MOU_MDC, KW_MOU_MU, KW_MOU_MVC, KW_MOU_MVD, KW_MOU_MVDC, KW_MOU_MVU, KW_MOU_PTR, KW_MOU_SC, KW_MOU_SD, KW_MOU_SDC, KW_MOU_SU, KW_MOU_XC, KW_MOU_XD, KW_MOU_XDC, KW_MOU_XU, KW_MOUSE, KW_MOV_2_B, KW_MOV_2_T, KW_MOV_2EOF, KW_MOV_A_T, KW_MOV_B_T, KW_MOV_COL, KW_MOVABLE, KW_MOVE, KW_MPE, KW_MPTR_2NV, KW_MS_CLICK, KW_MS_DBCLK, KW_MS_DOWN, KW_MS_MOVE, KW_MS_UP, KW_MSG, KW_MSG_AFNT, KW_MSG_AMSG, KW_MSG_AREA, KW_MSG_DIG, KW_MSG_LINE, KW_MSICON, KW_MSPNTNUM, KW_MTIME, KW_MULT_CMP, KW_MULT_KEY, KW_MULTI_IN, KW_MULTIPLE, KW_MUST_EXI, KW_MUST_UND, KW_N_AEDIT, KW_N_BEDIT, KW_N_CLICK, KW_N_COLED, KW_N_COLING, KW_N_EXPED, KW_N_EXPING, KW_N_HEIGHT, KW_N_KEY_ID, KW_NAME, KW_NAMESP_P, KW_NAMESP_U, KW_NATIVE, KW_NE, KW_NEEDS_AP, KW_NEEDS_PR, KW_NESTED, KW_NEW, KW_NEW_INST, KW_NEW_LBL, KW_NEW_LINE, KW_NEW_ROW, KW_NEW_SESS, KW_NEXT, KW_NEXT_COL, KW_NEXT_ERR, KW_NEXT_FR, KW_NEXT_PMT, KW_NEXT_RID, KW_NEXT_SIB, KW_NEXT_TAB, KW_NEXT_VAL, KW_NEXTWORD, KW_NNMSP_SL, KW_NO_APPLY, KW_NO_ARMSG, KW_NO_ASSGN, KW_NO_ATTR, KW_NO_ATTRL, KW_NO_AUTOV, KW_NO_BIND, KW_NO_BOX, KW_NO_COLS, KW_NO_CONS, KW_NO_CUR_V, KW_NO_CV_3D, KW_NO_CVT, KW_NO_DEBUG, KW_NO_DRAG, KW_NO_ECHO, KW_NO_EH_FL, KW_NO_EH_SR, KW_NO_EM_SP, KW_NO_EMBED, KW_NO_ERROR, KW_NO_FILL, KW_NO_FOCUS, KW_NO_HELP, KW_NO_HIDE, KW_NO_IDX_H, KW_NO_INHBG, KW_NO_INHFG, KW_NO_JOIN, KW_NO_LABEL, KW_NO_LOBS, KW_NO_LOCK, KW_NO_LOOKA, KW_NO_MAP, KW_NO_MSG, KW_NO_OVRRD, KW_NO_PAUSE, KW_NO_PRE, KW_NO_RET_V, KW_NO_ROW_M, KW_NO_SCH_M, KW_NO_SCR_V, KW_NO_SEP_C, KW_NO_SEPS, KW_NO_TAB_S, KW_NO_UNDL, KW_NO_UNDO, KW_NO_VALID, KW_NO_WAIT, KW_NO_WRAP, KW_NODE_BLD, KW_NODE_CHE, KW_NODE_CNT, KW_NODE_EXP, KW_NODE_ICO, KW_NODE_ID, KW_NODE_IDX, KW_NODE_KEY, KW_NODE_PAR, KW_NODE_TXT, KW_NODE_V2M, KW_NODE_VAL, KW_NODES, KW_NODV_2LC, KW_NON_SER, KW_NONE, KW_NORMAL, KW_NORMALZE, KW_NOT, KW_NOT_ACTV, KW_NOT_CS, KW_NOW, KW_NULL, KW_NULLALWD, KW_NUM_2RTN, KW_NUM_ALIA, KW_NUM_BUFF, KW_NUM_BUTT, KW_NUM_CH_R, KW_NUM_CHLN, KW_NUM_COL, KW_NUM_COPY, KW_NUM_D_P, KW_NUM_DBS, KW_NUM_DROP, KW_NUM_ENT, KW_NUM_FLD, KW_NUM_FMT, KW_NUM_FMTS, KW_NUM_HD_E, KW_NUM_ITER, KW_NUM_ITMS, KW_NUM_LK_C, KW_NUM_LNS, KW_NUM_LOGF, KW_NUM_MSG, KW_NUM_PARM, KW_NUM_PNTS, KW_NUM_REF, KW_NUM_REL, KW_NUM_REPL, KW_NUM_RES, KW_NUM_SEP, KW_NUM_SR, KW_NUM_SRCB, KW_NUM_SW, KW_NUM_TABS, KW_NUM_TOPB, KW_NUM_V_C, KW_NUMERIC, KW_OBJECT, KW_OCT_LEN, KW_OCX_MBTN, KW_OCX_MSHT, KW_OCX_MSX, KW_OCX_MSY, KW_OF, KW_OFF, KW_OFF_END, KW_OFF_HOME, KW_OK, KW_OK_CAN, KW_OLD, KW_OLE_AEFF, KW_OLE_CDRG, KW_OLE_DATF, KW_OLE_DD, KW_OLE_DEFC, KW_OLE_DGMD, KW_OLE_DGOV, KW_OLE_DRAG, KW_OLE_DRMD, KW_OLE_EFFE, KW_OLE_GIVF, KW_OLE_INVL, KW_OLE_NAML, KW_OLE_SETD, KW_OLE_STAT, KW_OLE_STDG, KW_OLE_X, KW_OLE_Y, KW_ON, KW_ON_FR_B, KW_ONLY, KW_OPEN, KW_OPEN_L_A, KW_OPEN_URL, KW_OPENHTML, KW_OPENMIME, KW_OPENPAGE, KW_OPENPOPU, KW_OPSYS, KW_OPTION, KW_OPTIONS, KW_OPTIONSF, KW_OR, KW_ORD_JOIN, KW_ORDER, KW_ORDINAL, KW_ORG_HAND, KW_ORG_ROID, KW_OS_APPND, KW_OS_CMD, KW_OS_COPY, KW_OS_DEL, KW_OS_DIR, KW_OS_DRV, KW_OS_ERR, KW_OS_G_ENV, KW_OS_MKDIR, KW_OS_REN, KW_OS_UID, KW_OS2, KW_OTHER, KW_OUT_HDR, KW_OUT_HH, KW_OUT_JOIN, KW_OUT_MSGS, KW_OUTER, KW_OUTPUT, KW_OUTPUTCT, KW_OVERLAY, KW_OVERRIDE, KW_OWN_DOC, KW_OWNER, KW_P2J_RC, KW_PAGE, KW_PAGE_B, KW_PAGE_DWN, KW_PAGE_LFT, KW_PAGE_NUM, KW_PAGE_RT, KW_PAGE_SZ, KW_PAGE_T, KW_PAGE_UP, KW_PAGE_WID, KW_PAGED, KW_PAR_BUFF, KW_PAR_FLDA, KW_PAR_FLDB, KW_PAR_IFLD, KW_PAR_IREL, KW_PAR_REL, KW_PAR_W_C, KW_PARENT, KW_PARM, KW_PARSE_ST, KW_PART_KEY, KW_PASCAL, KW_PASSWD_F, KW_PASTE, KW_PATHNAME, KW_PAUSE, KW_PB_APPEA, KW_PB_BRSTY, KW_PB_ENABL, KW_PB_MAX, KW_PB_MIN, KW_PB_ORIEN, KW_PB_SCROL, KW_PB_VALUE, KW_PBE_H_AL, KW_PBE_KEYR, KW_PDBNAME, KW_PERF, KW_PERSIST, KW_PFCOLOR, KW_PICK, KW_PICK_ARE, KW_PICK_BTH, KW_PIX_COL, KW_PIX_ROW, KW_PIXELS, KW_PK_PRIV, KW_PK_PROT, KW_POLY, KW_POP_MENU, KW_POP_ONLY, KW_PORTRAIT, KW_POS, KW_POSTMSG, KW_PRE_LBL, KW_PRECISN, KW_PREF_DS, KW_PREP_STR, KW_PREPARED, KW_PREPROC, KW_PRESEL, KW_PREV, KW_PREV_COL, KW_PREV_FR, KW_PREV_SIB, KW_PREV_T_I, KW_PREVWORD, KW_PRIM_P_P, KW_PRIMARY, KW_PRINT, KW_PRINTER, KW_PRIV_DAT, KW_PRIVATE, KW_PRIVILEG, KW_PRMT_FOR, KW_PRO_ARCH, KW_PROC, KW_PROC_C_T, KW_PROC_COM, KW_PROC_HND, KW_PROC_ST, KW_PROC_T_B, KW_PROC_TXT, KW_PROC_W_R, KW_PROCESS, KW_PROCNAME, KW_PROCTYPE, KW_PRODATAS, KW_PROFILER, KW_PROFILNG, KW_PROG_BAR, KW_PROG_SRC, KW_PROGNAME, KW_PROGRESS, KW_PROMPT, KW_PROMSGS, KW_PROPATH, KW_PROPERTY, KW_PROTECTD, KW_PROVER, KW_PROX_PWD, KW_PROX_UID, KW_PROXY, KW_PRS_C_D, KW_PRS_PROC, KW_PRT_C_H, KW_PRT_HDC, KW_PRT_NAME, KW_PRT_PORT, KW_PRT_SET, KW_PSC, KW_PUB_EVTS, KW_PUB_ID, KW_PUBLIC, KW_PUBLISH, KW_PUT, KW_PUT_BITS, KW_PUT_BYTE, KW_PUT_BYTS, KW_PUT_DBL, KW_PUT_FLT, KW_PUT_I64, KW_PUT_K_V, KW_PUT_LONG, KW_PUT_SHT, KW_PUT_STR, KW_PUT_UL, KW_PUT_USHT, KW_QRY_CLOS, KW_QRY_OFF, KW_QRY_OPEN, KW_QRY_PREP, KW_QRY_TUNE, KW_QUAL_UID, KW_QUE_MSG, KW_QUERY, KW_QUEST, KW_QUIT, KW_QUOTER, KW_R_INDEX, KW_R_TRIM, KW_RADIO_B, KW_RADIO_S, KW_RANDOM, KW_RAW, KW_RAW_TRAN, KW_RCOD_INF, KW_READ, KW_READ_AVL, KW_READ_E_N, KW_READ_FIL, KW_READ_JSN, KW_READ_ONL, KW_READ_RES, KW_READ_XML, KW_READ_XSC, KW_READKEY, KW_REAL, KW_REC_LEN, KW_RECALL, KW_RECID, KW_RECT, KW_RECURSE, KW_REF_ONLY, KW_REFR_A_P, KW_REFRABLE, KW_REFRESH, KW_REG_DMN, KW_REGISTER, KW_REJ_CHGS, KW_REJ_RCHG, KW_REJECTED, KW_REL_FLDS, KW_RELEASE, KW_RELS_ACT, KW_RELSESID, KW_REM_ATTR, KW_REM_CHLD, KW_REM_EVTP, KW_REM_HOST, KW_REM_NOCO, KW_REM_NODE, KW_REM_PORT, KW_REM_SUP, KW_REMOTE, KW_REP_CHLD, KW_REP_STXT, KW_REPEAT, KW_REPL_CRE, KW_REPL_DEL, KW_REPL_WRI, KW_REPLACE, KW_REPORT, KW_REPORTS, KW_REPOS, KW_REPOS_2I, KW_REPOS_2R, KW_REPOS_B, KW_REPOS_F, KW_REPOS_M, KW_REQ_INFO, KW_REQUEST, KW_RES_BASE, KW_RESET, KW_RESIZABL, KW_RESIZE, KW_RESORT, KW_REST_RID, KW_REST_ROW, KW_RESULT, KW_RESUME_D, KW_RET_2SD, KW_RET_INS, KW_RET_SHAP, KW_RET_VAL, KW_RET_VDT, KW_RET_VLT, KW_RETAIN, KW_RETRY, KW_RETRY_C, KW_RETURN, KW_RETURNS, KW_REV_FROM, KW_REVERT, KW_REVOKE, KW_RFRSH_UI, KW_RGB_VAL, KW_RIGHT, KW_RIGHT_AL, KW_ROLE, KW_ROLES, KW_ROUND, KW_ROUNDED, KW_ROUTINEL, KW_ROW, KW_ROW_CRT, KW_ROW_CRTD, KW_ROW_DEL, KW_ROW_DELD, KW_ROW_DISP, KW_ROW_ENTR, KW_ROW_H_C, KW_ROW_H_P, KW_ROW_LEAV, KW_ROW_MARK, KW_ROW_MODD, KW_ROW_OF, KW_ROW_RESZ, KW_ROW_STAT, KW_ROW_UMOD, KW_ROW_UPD, KW_ROWID, KW_RPT_ADDC, KW_RPT_CAP, KW_RPT_CSV, KW_RPT_DOCX, KW_RPT_DSGN, KW_RPT_GSRC, KW_RPT_GSRR, KW_RPT_HTML, KW_RPT_ICSV, KW_RPT_PDF, KW_RPT_RTF, KW_RPT_SRC, KW_RPT_XLS, KW_RPT_XLSX, KW_RSP_INFO, KW_RT_END, KW_RT_MC, KW_RT_MD, KW_RT_MDC, KW_RT_MU, KW_RTOPSYS, KW_RULE, KW_RULE_ROW, KW_RULE_Y, KW_RUN, KW_RUN_PROC, KW_RUN_W_O, KW_S_C_BGCO, KW_S_C_FGCO, KW_S_COL_C, KW_S_COL_W, KW_SAVE, KW_SAVE_AS, KW_SAVE_FIL, KW_SAVE_RCH, KW_SAVE_WST, KW_SAX_ATTR, KW_SAX_COMP, KW_SAX_PARE, KW_SAX_PARF, KW_SAX_PARN, KW_SAX_PARS, KW_SAX_READ, KW_SAX_RUNN, KW_SAX_UNIN, KW_SAX_WBEG, KW_SAX_WCOM, KW_SAX_WCON, KW_SAX_WELM, KW_SAX_WERR, KW_SAX_WIDL, KW_SAX_WRIT, KW_SAX_WTAG, KW_SCH_CHG, KW_SCH_LOC, KW_SCH_MARS, KW_SCH_PATH, KW_SCHEMA, KW_SCR_2CR, KW_SCR_2ITM, KW_SCR_2SR, KW_SCR_COL, KW_SCR_DELT, KW_SCR_HGHT, KW_SCR_LEFT, KW_SCR_MODE, KW_SCR_NODC, KW_SCR_NOT, KW_SCR_NTOP, KW_SCR_OFFS, KW_SCR_RPOS, KW_SCR_RT, KW_SCR_SCAL, KW_SCR_VERT, KW_SCR_WDTH, KW_SCR_WLNS, KW_SCREEN, KW_SCRN_IO, KW_SCRN_LNS, KW_SCRN_VAL, KW_SCROLL, KW_SCROLL_H, KW_SCROLL_V, KW_SCROLLBA, KW_SCROLLBL, KW_SCROLLIN, KW_SDBNAME, KW_SEAL, KW_SEAL_TST, KW_SEAR_SLF, KW_SEAR_TRG, KW_SEARCH, KW_SECTION, KW_SECUR_P, KW_SEEK, KW_SEL_ALL, KW_SEL_END, KW_SEL_FOCR, KW_SEL_LST, KW_SEL_NEXT, KW_SEL_NID, KW_SEL_NKEY, KW_SEL_NODE, KW_SEL_PREV, KW_SEL_ROW, KW_SEL_SFVN, KW_SEL_STRT, KW_SEL_TXT, KW_SELECT, KW_SELECTBL, KW_SELECTED, KW_SELECTN, KW_SELF, KW_SEND, KW_SEND_SQL, KW_SENSITIV, KW_SEP_CONN, KW_SEP_FGC, KW_SEPS, KW_SEQUENCE, KW_SERIALAB, KW_SERIALZH, KW_SERIALZN, KW_SERIALZR, KW_SERVER, KW_SESS_END, KW_SESSION, KW_SESSN_ID, KW_SET, KW_SET_A_CT, KW_SET_A_L, KW_SET_A_N, KW_SET_ACTR, KW_SET_ACTX, KW_SET_ATTR, KW_SET_B_OR, KW_SET_BLUE, KW_SET_BRK, KW_SET_BUF, KW_SET_C_IC, KW_SET_C_P, KW_SET_C_S, KW_SET_C_VI, KW_SET_CB_P, KW_SET_CBAC, KW_SET_CLNT, KW_SET_COMM, KW_SET_CONT, KW_SET_COOK, KW_SET_CPTM, KW_SET_DBCL, KW_SET_DYN, KW_SET_EVMO, KW_SET_F_D, KW_SET_GRN, KW_SET_IMGF, KW_SET_IMGH, KW_SET_IMGW, KW_SET_ISRC, KW_SET_JMOD, KW_SET_JSTX, KW_SET_JSTY, KW_SET_LSTK, KW_SET_M_UN, KW_SET_MSEL, KW_SET_N_BG, KW_SET_N_F, KW_SET_N_FG, KW_SET_N_HC, KW_SET_NODE, KW_SET_NTXT, KW_SET_ODST, KW_SET_OPT, KW_SET_PARM, KW_SET_PENW, KW_SET_PROP, KW_SET_PTR, KW_SET_R_P, KW_SET_RED, KW_SET_RGB, KW_SET_ROLL, KW_SET_RPOS, KW_SET_RRP, KW_SET_S_AR, KW_SET_S_O, KW_SET_SEL, KW_SET_SERD, KW_SET_SNC, KW_SET_SWIN, KW_SET_SZ, KW_SET_T_S, KW_SET_TBME, KW_SET_TN_I, KW_SET_TSTA, KW_SET_U_F, KW_SET_W_S, KW_SET_WAIT, KW_SET_WKDR, KW_SETTINGS, KW_SETUSER, KW_SH_LOCK, KW_SHA1_DIG, KW_SHARED, KW_SHORT, KW_SHOW_BUT, KW_SHOW_HDR, KW_SHOW_ITB, KW_SHOW_ST, KW_SHR_D_F, KW_SIDE_L, KW_SIDE_L_H, KW_SIGNATUR, KW_SILENT, KW_SIMPLE, KW_SING_RUN, KW_SINGLE, KW_SINGLTON, KW_SIZE, KW_SIZE_C, KW_SIZE_P, KW_SKIP, KW_SKIP_D_R, KW_SLIDER, KW_SMAL_ICO, KW_SMAL_TTL, KW_SMALLINT, KW_SMTP_EML, KW_SMTP_PW, KW_SMTP_VAL, KW_SMTPFROM, KW_SMTPHOST, KW_SMTPHTML, KW_SMTPPORT, KW_SMTPREPL, KW_SMTPSUBJ, KW_SMTPTEXT, KW_SMTPUSER, KW_SOAP_F, KW_SOAP_F_A, KW_SOAP_F_C, KW_SOAP_F_D, KW_SOAP_F_N, KW_SOAP_F_R, KW_SOAP_F_S, KW_SOAP_FMH, KW_SOAP_FSC, KW_SOAP_HDR, KW_SOAP_HER, KW_SOAP_VER, KW_SOCKET, KW_SOME, KW_SOR_C_C, KW_SOR_COLS, KW_SORT, KW_SORT_ASC, KW_SORT_MAP, KW_SORT_NUM, KW_SOURCE, KW_SPACE, KW_SPRSHEET, KW_SQL, KW_SQL_WID, KW_SQRT, KW_SRC_PROC, KW_SRV_C_B, KW_SRV_C_BR, KW_SRV_C_C, KW_SRV_C_I, KW_SRV_OP_M, KW_SRV_SOCK, KW_SSL_SRVN, KW_ST_2_FIT, KW_STANDALN, KW_START, KW_START_BS, KW_START_DC, KW_START_EL, KW_START_MV, KW_START_RR, KW_START_RS, KW_START_SC, KW_STARTING, KW_STAT_A_F, KW_STAT_DET, KW_STATIC, KW_STATUS, KW_STATUS_A, KW_STDCALL, KW_STOP, KW_STOP_AFT, KW_STOP_D, KW_STOP_PRS, KW_STOPPED, KW_STORPROC, KW_STR_VAL, KW_STR_XREF, KW_STREAM, KW_STRIC_ER, KW_STRICT, KW_STRING, KW_STRM_HND, KW_STRM_IO, KW_STUP_PAR, KW_SUB_AVG, KW_SUB_CNT, KW_SUB_M_H, KW_SUB_MAX, KW_SUB_MENU, KW_SUB_MIN, KW_SUB_TOT, KW_SUBSCRIB, KW_SUBSTIT, KW_SUBSTR, KW_SUBTYPE, KW_SUM, KW_SUP_NS_P, KW_SUP_PROC, KW_SUP_WARN, KW_SUPER, KW_SUPW_LST, KW_SYM_EN_A, KW_SYM_EN_I, KW_SYM_EN_K, KW_SYM_SUPP, KW_SYNCHRON, KW_SYS_A_B, KW_SYS_DLG, KW_SYS_HELP, KW_SYS_ID, KW_TAB, KW_TAB_CRCL, KW_TAB_HAND, KW_TAB_IDX, KW_TAB_LIST, KW_TAB_ML, KW_TAB_MOD, KW_TAB_NUM, KW_TAB_POS, KW_TAB_SCAN, KW_TAB_SHOW, KW_TAB_STOP, KW_TAB_TRG, KW_TABLE, KW_TABS, KW_TABSET, KW_TAG, KW_TAR_PROC, KW_TARGET, KW_TEMP_DIR, KW_TEMP_TAB, KW_TEN_ID, KW_TENNAME, KW_TERM, KW_TERM_HK, KW_TERMINAT, KW_TEXT, KW_TEXTEDIT, KW_THEN, KW_THIS_OBJ, KW_THIS_PRC, KW_THO_SEP, KW_THR_SAFE, KW_THROUGH, KW_THROW, KW_TIC_MARK, KW_TIME, KW_TIME_SRC, KW_TIMER, KW_TIMESTMP, KW_TIMEZONE, KW_TITL_BGC, KW_TITL_DC, KW_TITL_FGC, KW_TITL_FON, KW_TITLE, KW_TN_TOID, KW_TNOD_VAL, KW_TO, KW_TO_ROWID, KW_TODAY, KW_TOGGL_BX, KW_TOOLTIP, KW_TOOLTIPS, KW_TOP, KW_TOP_COL, KW_TOP_NAVQ, KW_TOP_ONLY, KW_TOPIC, KW_TOTAL, KW_TRAC_CHG, KW_TRACING, KW_TRAILING, KW_TRAN_I_P, KW_TRAN_MOD, KW_TRANS, KW_TRANSPAR, KW_TRC_FILT, KW_TREE_R_H, KW_TREELIST, KW_TREEVIEW, KW_TRIG_COL, KW_TRIG_NOD, KW_TRIGGER, KW_TRIGGERS, KW_TRIM, KW_TRUNC, KW_TT_PREP, KW_TTCP, KW_TXT_CURS, KW_TXT_SEG, KW_TXT_SEL, KW_TYPE, KW_TYPE_OF, KW_U_CTRL, KW_U_MSG, KW_U_PCTRL, KW_U_SERIAL, KW_UNBOX, KW_UNBUF, KW_UNDERLIN, KW_UNDO, KW_UNDO_T_S, KW_UNFORMAT, KW_UNION, KW_UNIQ_ID, KW_UNIQ_KEY, KW_UNIQ_MAT, KW_UNIQUE, KW_UNIX, KW_UNIX_END, KW_UNL_HID, KW_UNLOAD, KW_UNS_BYTE, KW_UNS_LONG, KW_UNS_SHRT, KW_UNSUBSCR, KW_UP, KW_UPD_ATTR, KW_UPDATE, KW_UPLOAD, KW_URL, KW_URL_DECO, KW_URL_ENCO, KW_URL_FLD, KW_URL_FLDL, KW_URL_FMT, KW_URL_PW, KW_URL_UID, KW_USE, KW_USE_DCT, KW_USE_FIL, KW_USE_IDX, KW_USE_REV, KW_USE_TXT, KW_USE_UND, KW_USE_WIDP, KW_USER_ID, KW_USERID, KW_USING, KW_USR_DATA, KW_UTC_OFF, KW_V_N_CNT, KW_V_R_CNT, KW_V_SCRL_P, KW_V6DISP, KW_V6FRAME, KW_VAL_CHG, KW_VAL_ENAB, KW_VAL_EVT, KW_VAL_EXPR, KW_VAL_HND, KW_VAL_MSG, KW_VAL_OBJ, KW_VAL_SEAL, KW_VAL_XML, KW_VALEXP, KW_VALIDATE, KW_VALMG_SA, KW_VALMSG, KW_VALUE, KW_VALUES, KW_VAR, KW_VERBOSE, KW_VERSION, KW_VERT, KW_VIEW, KW_VIEW_AS, KW_VIEW_FCR, KW_VIRT_HC, KW_VIRT_HP, KW_VIRT_WC, KW_VIRT_WP, KW_VISIBLE, KW_VMS, KW_VOID, KW_WA_H_P, KW_WA_W_P, KW_WA_X, KW_WA_Y, KW_WAIT, KW_WAIT_FOR, KW_WARN, KW_WC_AD_AP, KW_WEB, KW_WEB_CTX, KW_WEB_FUP, KW_WEB_OUT, KW_WEEK, KW_WHEN, KW_WHERE, KW_WHERE_ST, KW_WHILE, KW_WID_ENT, KW_WID_HAND, KW_WID_ID, KW_WID_LEAV, KW_WID_POOL, KW_WIDGET, KW_WIDTH, KW_WIDTH_C, KW_WIDTH_P, KW_WIN_CLOS, KW_WIN_DMIN, KW_WIN_MAX, KW_WIN_MIN, KW_WIN_NAME, KW_WIN_NORM, KW_WIN_RESI, KW_WIN_REST, KW_WIN_STAT, KW_WIN_SYS, KW_WINDOW, KW_WITH, KW_WORD_IDX, KW_WORD_WRP, KW_WORK_TAB, KW_WR_CDATA, KW_WR_CHARS, KW_WR_CMNT, KW_WR_D_ELM, KW_WR_DATA, KW_WR_E_ELM, KW_WR_ENT_R, KW_WR_EXDTD, KW_WR_FRAGM, KW_WR_JSON, KW_WR_MSG, KW_WR_PRINS, KW_WR_STAT, KW_WR_XML, KW_WR_XMLSC, KW_WRITE, KW_WUPL_ERR, KW_WUPL_FLS, KW_X, KW_X_DOC, KW_X_NODE, KW_X_OF, KW_XCODE, KW_XML_DTYP, KW_XML_E_EL, KW_XML_NNAM, KW_XML_NTYP, KW_XML_S_ER, KW_XML_SCHP, KW_XML_SNSP, KW_XOR, KW_XPR2PDF, KW_XREF, KW_XREF_XML, KW_Y, KW_Y_OF, KW_YEAR, KW_YEAR_OFF, KW_YES_NO, KW_YES_NO_C, LABEL, LABEL_DEF, LANGUAGES, LBRACKET, LEFT_OUTER_JOIN, LETTER, LIBRARY_PROCEDURE, LIBRARY_REF, LPARENS, LT, LTE, MANDATORY, MANY_TO_ONE, METH_CHAR, METH_CLASS, METH_COM_HANDLE, METH_DATE, METH_DATETIME, METH_DATETIME_TZ, METH_DEC, METH_HANDLE, METH_INT, METH_INT64, METH_LOGICAL, METH_LONGCHAR, METH_MEMPTR, METH_POLY, METH_RAW, METH_RECID, METH_ROWID, METH_VOID, METHOD_DEF, METHOD_INVOCATION, MINUS, MISSING, MONTH_TRASH_MODE, MORE, MULTIPLY, NATIVE_API, NATIVE_PROCESS, NATIVE_PROGRAM_RESOURCE, NETWORK_CONNECTION, NO_LOCK_LITERAL, NO_MATCH, NO_REFERENCE, NO_TRANSACTION, NO_WAIT_LITERAL, NOT_BETWEEN, NOT_ENTERED, NOT_EQ, NOT_EXISTS, NOT_IN, NOT_LIKE, NOT_NULL, NULL_TREE_LOOKAHEAD, NUM_LITERAL, OBJECT_INVOCATION, OCX_CONTROL, ONE_TO_MANY, ONE_TO_ONE, OO_METH_CHAR, OO_METH_CLASS, OO_METH_COM_HANDLE, OO_METH_DATE, OO_METH_DATETIME, OO_METH_DATETIME_TZ, OO_METH_DEC, OO_METH_HANDLE, OO_METH_INT, OO_METH_INT64, OO_METH_LOGICAL, OO_METH_LONGCHAR, OO_METH_MEMPTR, OO_METH_POLY, OO_METH_RAW, OO_METH_RECID, OO_METH_ROWID, OO_METH_VOID, OPEN_CURSOR, OPEN_QUERY, OPTION, ORDER, ORDER_BY, OUTPUT_CLOSE, OUTPUT_THRU, OUTPUT_TO, PARAMETER, PARENT_CHILD_RELATION, PARENT_ID_RELATION, PLUS, PORT_TYPE, POSITION, PROC_CALL_TYPE_LITERAL, PROCEDURE, PROCEDURE_FILE, PROCESS_EVENTS, PROPERTIES, PROPERTY_INVOCATION, PUT_CURSOR, PUT_FIELD, PUT_SCREEN, QUERY, QUERY_SUBST, RANGE_MATCH, RAW_STRING, RBRACKET, READ_AVAILABLE_LITERAL, READ_EXACT_NUM_LITERAL, RECORD_PHRASE, RELEASE_EXTERNAL, RELEASE_OBJECT, RIGHT_OUTER_JOIN, RPARENS, RSTRING, RUN_FILENAME, RUN_FILENAME_ON_SERVER, RUN_INT_PROC, RUN_INT_PROC_ON_SERVER, RUN_LIBRARY_REF, RUN_LIBRARY_REF_ON_SERVER, RUN_PORT_TYPE_ON_SERVER, RUN_PORT_TYPE_VALUE_ON_SERVER, RUN_STORED_PROCEDURE, RUN_SUPER, RUN_VALUE, RUN_VALUE_ON_SERVER, RUNTIME_BROWSE_OPTIONS, RUNTIME_FRAME_OPTIONS, SAVE_CACHE, SCHEMA_FILE, SEARCH_SELF_LITERAL, SEARCH_TARGET_LITERAL, SELF_REFERENCE, SEQUENCE, SET_ATTR_CTYPE_LITERAL, SHARE_LOCK_LITERAL, SHARED_LIBRARY, SLASH_SLASH, SORT_MATCH, SQL_WIDTH, SSTRING, STATEMENT, STATIC_WRAPPER, STR_OPTIONS, STREAM, STRING, STRONG_REFERENCE, SUB_TRANSACTION, SUPPORT_LVL_FULL, SUPPORT_LVL_FULL_WITH_LIMITATIONS, SUPPORT_LVL_NONE, SUPPORT_LVL_PARTIAL, SYM_CHAR, SYMBOL, SYS_HANDLE, SYSTEM_DIALOG_COLOR, SYSTEM_DIALOG_FONT, SYSTEM_DIALOG_GET_DIR, SYSTEM_DIALOG_GET_FILE, SYSTEM_DIALOG_PRINTER_SETUP, TABLE, TEMP_TABLE, TILDE, TRAILER, TRANSACTION, TRANSACTION_DISTINCT, TRANSACTION_MODE_AUTO, TRIGGER_BLOCK, TRIGGER_PHRASE, TRIGGER_PROCEDURE, UN_MINUS, UN_PLUS, UNKNOWN_RESOURCE, UNKNOWN_TOKEN, UNKNOWN_VAL, UNQUOTED_TEXT, UPDATE_SQL, VALEXP, VALID_SYM_CHAR, VALIDATION, VALMG_SA, VALMSG, VAR_BYTE, VAR_CHAR, VAR_CLASS, VAR_COM_HANDLE, VAR_DATE, VAR_DATETIME, VAR_DATETIME_TZ, VAR_DEC, VAR_DOUBLE, VAR_FLOAT, VAR_HANDLE, VAR_INT, VAR_INT64, VAR_LOGICAL, VAR_LONG, VAR_LONGCHAR, VAR_MEMPTR, VAR_POLY, VAR_RAW, VAR_RECID, VAR_ROWID, VAR_SHORT, VAR_ULONG, VAR_USHORT, WEAK_REFERENCE, WEB_PROC, WHEN_LIST, WHERE_CURRENT_OF, WID_BROWSE, WID_BROWSE_COL, WID_BUTTON, WID_COMBO, WID_DIALOG, WID_EDITOR, WID_FILL_IN, WID_FRAME, WID_IMAGE, WID_LITERAL, WID_MENU, WID_MENU_ITM, WID_RADIO, WID_RECT, WID_SEL_LST, WID_SLIDER, WID_SUB_MENU, WID_TEXT, WID_TOGGLE, WID_WINDOW, WIDGET_LIST, WIDGET_POOL, WITH_CHECK_OPTION, WITH_GRANT_OPTION, WORD_MATCH, WORK_TABLE, WS, XSTRING, YEAR_TRASH_MODE| Constructor and Description |
|---|
ClassDefinition(java.lang.String name,
ClassDefinition[] parents,
ClassDefinition[] interfaces,
boolean builtin,
OOType otype,
boolean dotnet,
java.lang.String filename)
Construct an instance and load any superclass or interface hierarchy
that is needed.
|
ClassDefinition(SymbolResolver sym,
java.lang.String qname)
Given a fully qualified legacy class name, load a new definition by looking into the AST for
oo-data-member nodes and populate the members. |
| Modifier and Type | Method and Description |
|---|---|
void |
addDataSet(Variable var,
Aast node,
java.lang.String name,
int type,
int access,
boolean isStatic,
boolean inMethod)
Add the named dataset to this class.
|
void |
addDataSource(Variable var,
Aast node,
java.lang.String name,
int type,
int access,
boolean isStatic,
boolean inMethod)
Add the named data source to this class.
|
private void |
addJavaMethodName(java.lang.String javaname,
java.lang.String jparms,
java.lang.String legacySig)
Update the internal maps to record a new Java name.
|
void |
addMethod(java.lang.String name,
int type,
int access,
boolean isStatic,
Aast node,
Aast ret)
Add the named method to this class.
|
void |
addQuery(java.lang.String name,
Aast node,
int type,
int access,
boolean isStatic,
boolean inMethod)
Add the named query to this class.
|
void |
addTable(Aast node,
java.lang.String name,
int type,
int access,
boolean isStatic,
SchemaDictionary schemaDict,
boolean inMethod)
Add the named temp-table or buffer to this class.
|
void |
addVariable(int type,
java.lang.String name,
Variable var,
Aast node,
int access,
boolean isStatic,
java.lang.String qname,
boolean provisional)
Add a data member (variable, property, enum or event) to this class.
|
private MemberData |
addWorker(ClassDefinition.DataStoreType stype,
java.lang.String name,
ParameterKey[] signature,
Variable var,
int type,
int access,
boolean isStatic,
java.lang.String qname,
int tempIdx)
Add the resource to the given maps, if it is not already present OR if it is present
under a more restrictive access type (we must store the least restrictive of the types
to allow operator overloading to work properly).
|
private void |
annotateCallSignature(Aast call,
ParameterKey[] callSig,
ParameterKey[] defSig,
java.lang.String[] overrides)
Process a method call to mark any "fuzzy" parameters with the wrapper type that must
be used for the actual call.
|
void |
annotateMethodCall(java.lang.String mname,
ParameterKey[] signature,
int access,
boolean isStatic,
boolean isSuper,
boolean internal,
Aast node)
Annotate the given method invocation reference with details for the specified method
in this class.
|
void |
annotateObjectEvent(Aast evt,
Aast call,
boolean isStatic)
Annotate a published class event, with the details of the parameter signature.
|
<R> R |
calcFromParentGraph(java.util.function.Function<ClassDefinition,R> func,
java.util.function.Predicate<R> continu,
R defVal,
boolean inherit,
boolean ifaces)
Recursively process the parent hierarchy to calculate a value.
|
private <R> R |
calcFromParentGraphWorker(java.util.function.Function<ClassDefinition,R> func,
java.util.function.Predicate<R> continu,
R defVal,
java.util.Set<java.lang.String> processed,
boolean inherit,
boolean ifaces)
Recursively process the parent hierarchy to calculate a value.
|
private java.lang.String |
calculateUniqueJavaMethodName(java.lang.String name,
java.lang.String jparms,
java.lang.String legacySig)
Compute the Java name for a legacy method which when combined with the Java parameter list will
be a unique method name.
|
(package private) java.util.List<MatchMetrics> |
candidates(java.lang.String name,
int num,
int access,
boolean isStatic,
boolean internal,
boolean first,
java.util.Set<SignatureKey> exist)
Get the list of all possible methods that could match in this class AND its parent classes.
|
private MemberData |
checkAccessRights(MemberData mdat,
int access)
Confirm that the given member is accessible at the access level specified.
|
void |
cleanupObjectResources()
Cleanup any object resources which should not remain in memory.
|
private MemberData |
createMethod(java.util.Map<SignatureKey,MemberData> defs,
java.lang.String name,
ParameterKey[] sig,
int accessMode,
boolean isStatic,
int retType,
java.lang.String qualified,
java.lang.String javaname,
int extent,
int tempIdx,
boolean override,
boolean abstr)
Create a new method definition and track it.
|
private MemberData |
createMethod(java.util.Map<SignatureKey,MemberData> defs,
java.lang.String name,
ParameterKey[] sig,
int accessMode,
boolean isStatic,
int retType,
java.lang.String qualified,
java.lang.String javaname,
int extent,
int tempIdx,
boolean override,
boolean abstr,
java.util.Map<java.lang.String,java.lang.Object> ret,
boolean register)
Create a new method definition and track it.
|
private void |
defineExceptions(java.util.ArrayList<java.lang.String> save,
boolean isStatic)
Pull out our lists of temp-tables and buffers so they can be used for
cleanup.
|
void |
derivedFromDotNet()
Check the parent hierarchy to determine if the 4GL class has a .NET ancestor.
|
private MethodSearchResult |
exactMethodLookup(java.lang.String name,
ParameterKey[] caller,
int access,
boolean isStatic,
boolean internal)
Find the named method based on an exact signature match.
|
java.lang.String |
getConvertedMethodName(java.lang.String legacySig)
Get the Java method name for a legacy signature.
|
java.lang.String |
getConvertedMethodName(java.lang.String legacy,
Aast mAst)
Get the converted java method name for a method - this ensures the same Java name is used
for methods which are overridden, across the entire converted legacy classes.
|
java.util.Set<java.lang.String> |
getDefinedMethods()
Get all defined methods in this class.
|
java.util.Set<java.lang.String> |
getDerivedDotNet()
Obtains the derived (parent hierarchy) .NET references, if any.
|
java.util.Set<java.lang.String> |
getDirectDotNet()
Obtains the direct .NET references, if any.
|
java.lang.String |
getFilename()
Obtains the filename of the .cls that defined this class/interface.
|
java.util.Set<java.lang.String> |
getIndirectDotNet()
Obtains the indirect .NET references, if any.
|
java.util.Set<java.lang.String> |
getInterfaces()
Obtains the list of interfaces implemented by this class.
|
java.lang.String |
getJavaPackage()
Get the converted Java package for this definition.
|
private java.util.Map<java.lang.String,MemberData> |
getMemberStore(ClassDefinition.DataStoreType type,
boolean isStatic)
Obtain the static or instance member map or create (and return) it if it doesn't
already exist.
|
private java.util.Map<SignatureKey,MemberData> |
getMethodStore(java.lang.String name,
boolean isStatic)
Get the correct map of method signatures to member data instances.
|
java.lang.String |
getName()
Obtains the name of this class.
|
ClassDefinition[] |
getParents()
Obtains the parent class definition for this class.
|
java.lang.String |
getQualifiedJavaName()
Get the converted fully qualified Java class name for this definition.
|
SchemaDictionary |
getSchemaDict()
Obtain the backing schema dictionary, if it exists.
|
java.lang.String |
getSimpleJavaName()
Get the converted simple Java class name for this definition.
|
java.lang.String |
getSimpleName()
Get the simple legacy name for this class.
|
java.util.Set<java.lang.Long> |
getTableIds()
Get the AST IDs for all static or instance table definitions.
|
private MemberData |
guessMethod(java.lang.String name,
int access,
boolean isStatic,
boolean internal)
Find the named method without any knowledge of the signature.
|
int |
guessMethodType(java.lang.String name,
int access,
boolean isStatic,
boolean internal)
Find the named method without any knowledge of the signature.
|
private boolean |
hasCollision(java.lang.String javaSig)
Check the current class and all parent classes/interfaces for a Java signature collision.
|
boolean |
hasDirectDotNet()
Reports if the class has any direct .NET references.
|
boolean |
hasIndirectDotNet()
Reports if the class has any indirect .NET references.
|
boolean |
hasParentPropertyAccessor(Aast ast)
Check if any parent class has the specified accessor.
|
boolean |
isBuiltIn()
Access the flag that denotes if this is a built-in class definition.
|
boolean |
isClass()
Access the flag that denotes if this is a class definition.
|
boolean |
isDerivedFromDotNet()
Report if the parent hierarchy includes a .NET ancestor.
|
boolean |
isDotNet()
Access the flag that denotes if this is a .NET class definition.
|
boolean |
isEnum()
Access the flag that denotes if this is an enum definition.
|
private boolean |
isExtentMatch(java.lang.String defSig,
java.lang.String callSig)
Detect if any extent specification in the parameters are a fuzzy match or if neither have
an extent specification.
|
(package private) boolean |
isImplemented(ClassDefinition cls)
Detect if the given class is an instance of an implemented interface of this class.
|
boolean |
isIndirectDotNetReference()
Reports if the a reference to this class should be considered an indirect .NET reference
in the calling class.
|
(package private) boolean |
isInheritedFrom(ClassDefinition cls,
boolean ifaces,
java.lang.Runnable incrementer)
Detect if the given class is an instance of a parent class or an implemented interface of a parent
class.
|
boolean |
isInterface()
Access the flag that denotes if this is an interface definition.
|
boolean |
isJava()
Access the flag that denotes if this is a Java class definition.
|
boolean |
isMock()
The method indicates whether this inctance represents a "mock" class definition
used to resolve symbols during class pre-scan mode in case the class file has not been
parsed.
|
static boolean |
isPolySignature(ParameterKey[] parms)
Detect if the signature contains a polymorphic type (is
BaseDataType). |
boolean |
isProcessed()
Check if this class definition was already fully parsed.
|
boolean |
isStaticDataMember(java.lang.String name,
int access)
Reports if the given data member is a static member of the given class.
|
private void |
loadBuiltinDefinition()
Load the FWD implementation for a builtin, non-.NET class.
|
int |
lookupDataSet(java.lang.String name,
int access,
boolean isStatic)
Obtain the token type of the dataset member given the name and access mode.
|
Variable |
lookupDataSetWrapper(java.lang.String name,
int access,
boolean isStatic)
Obtain the token type of the dataset member given the name and access mode.
|
int |
lookupDataSource(java.lang.String name,
int access,
boolean isStatic)
Obtain the token type of the data source member given the name and access mode.
|
Variable |
lookupDataSourceWrapper(java.lang.String name,
int access,
boolean isStatic)
Obtain the token type of the data source member given the name and access mode.
|
private MemberData |
lookupHierarchy(ClassDefinition.DataStoreType type,
java.lang.String name,
int access,
boolean isStatic)
Obtain the member given the name and access mode.
|
private MethodSearchResult |
lookupMethodWorker(java.lang.String name,
ParameterKey[] sig,
int access,
boolean isStatic,
boolean internal,
Aast node)
Obtain the method's member given the name and access mode.
|
private java.lang.String |
lookupOverrideName(java.lang.String legacySig,
boolean override,
boolean abstr)
Lookup the Java method name in the parent/interface hierarchy for the given legacy signature.
|
int |
lookupQuery(java.lang.String name,
int access,
boolean isStatic)
Obtain the token type of the query member given the name and access mode.
|
int |
lookupTable(java.lang.String name,
int access,
boolean isStatic)
Obtain the token type of the temp-table or buffer given the name and access mode.
|
int |
lookupVariable(java.lang.String name,
int access,
boolean isStatic)
Obtain the token type of the data member (variable) or property given
the name and access mode.
|
java.lang.String |
lookupVariableClassName(java.lang.String name,
int access,
boolean isStatic)
Obtain the fully qualified class name of the object instance
represented by the data member (variable) or property given
the name and access mode.
|
long |
lookupVariableExtent(java.lang.String name,
int access,
boolean isStatic)
Obtain the extent of the data member the name and access mode.
|
java.lang.String |
lookupVariableJavaName(java.lang.String name,
int access,
boolean isStatic)
Obtain the Java name of the data member the name and access mode.
|
Variable |
lookupVariableWrapper(java.lang.String name,
int access,
boolean isStatic)
Obtain the
Variable wrapper for the data member (variable) or property given
the name and access mode. |
private MemberData |
lookupWorker(java.util.Map<java.lang.String,MemberData> map,
java.lang.String name,
int access)
Find the named resource in the given map.
|
void |
markDotNetUsage(ClassDefinition ref)
Calculate if the given reference is a direct or indirect .NET reference and update out
counters.
|
int |
nextTempIdx()
Get the next
tempIdx value. |
void |
parseFinished(boolean global)
The parse for this entire file has finished, and the AST IDs have been computed.
|
void |
processParentGraph(java.util.function.Consumer<ClassDefinition> consumer)
Recursively process the parent hierarchy to execute a consumer.
|
void |
processParentGraph(java.util.function.Consumer<ClassDefinition> consumer,
boolean descent)
Recursively process the parent hierarchy to execute a consumer.
|
private void |
registerMethod(java.lang.String javaname,
MemberData mdat)
Register this method signature with a converted Java method name.
|
java.lang.String |
registerPropertyMethod(Aast node,
java.lang.String prefix,
java.lang.String lname,
boolean override,
boolean abstr,
ParameterKey[] sig)
Lookup or calculate the Java method name for a property or event and store the data for method
name disambiguation.
|
private void |
registerVirtual(java.lang.String name,
java.lang.String ori,
java.lang.String meth,
boolean isStatic,
int rtype,
java.lang.String qname,
ParameterKey[] parms)
Helper method to register a public virtual method.
|
private void |
registerVirtualEnumMethods(java.lang.String name,
boolean flags)
Add the 'virtual' enum methods, so they can be resolved by the parser.
|
void |
setJavaClassName(java.lang.String pkg,
java.lang.String cls)
Set the converted Java package and Java class name.
|
void |
setProcessed(boolean state)
Set the fully parse state of this class.
|
boolean |
testParentGraph(java.util.function.Predicate<ClassDefinition> check)
Recursively process the parent hierarchy to test if the given parent matches some
condition.
|
private static final ConversionStatus LOG
public static final NameConverter nconvert
private java.util.Map<ClassDefinition.DataStoreType,java.util.Map<java.lang.String,MemberData>> istores
private java.util.Map<ClassDefinition.DataStoreType,java.util.Map<java.lang.String,MemberData>> sstores
private java.util.Map<java.lang.String,java.util.Map<SignatureKey,MemberData>> imethods
private java.util.Map<java.lang.String,java.util.Map<SignatureKey,MemberData>> smethods
private java.util.Set<java.lang.String> javaMethodCollisions
private java.util.Map<java.lang.String,java.lang.String> legacyToJavaMethod
private java.lang.Object lock
private SchemaDictionary schemaDict
private final java.lang.String name
private final ClassDefinition[] parents
private final ClassDefinition[] interfaces
private final java.util.Set<java.lang.String> ifaces
private final boolean builtin
private final boolean dotnet
private final OOType otype
private final java.lang.String filename
private int tempIdx
private java.util.Set<ClassDefinition> dotnetProcessed
private java.util.Set<java.lang.String> dotnetDerived
private java.util.Set<java.lang.String> directDotNet
private java.util.Set<java.lang.String> indirectDotNet
private boolean processed
private java.lang.String javaPackage
private java.util.Map<java.lang.String,java.lang.String> javaEnumNames
private java.lang.String javaClassName
private java.util.Set<java.lang.String> loadedProperties
private final FuzzyMethodCvt fuzzy
public ClassDefinition(java.lang.String name,
ClassDefinition[] parents,
ClassDefinition[] interfaces,
boolean builtin,
OOType otype,
boolean dotnet,
java.lang.String filename)
name - Fully qualified name of the class or interface.parents - List of parent classes, only interfaces can have more than 1. Pass
null if there is no explicit super class.interfaces - Collection of fully qualified interface names that are
implemented by this class.builtin - true if this definition is built-in to Progress.otype - Flag marking the type of this OO 4GL compile unit.dotnet - true if this is a .NET definition,
false if this is a 4GL definition.filename - The filename of the .cls that defined this class/interface.public ClassDefinition(SymbolResolver sym, java.lang.String qname) throws SchemaException
oo-data-member nodes and populate the members.sym - The symbol resolver.qname - The qualified legacy name for the class.SchemaException - If temp-tables from this definition couldn't be loaded.public static boolean isPolySignature(ParameterKey[] parms)
BaseDataType).parms - Parameter array.true if a parameter is polymorphic.public java.lang.String registerPropertyMethod(Aast node, java.lang.String prefix, java.lang.String lname, boolean override, boolean abstr, ParameterKey[] sig)
node - The AST for which the method is being registered.prefix - The accessor prefix.lname - The legacy property/event name.override - true if the property or event is overridden.abstr - true if the property or event is abstract.sig - The parameter definition.private java.lang.String calculateUniqueJavaMethodName(java.lang.String name,
java.lang.String jparms,
java.lang.String legacySig)
name - The legacy name.jparms - The Java parameter list definition.legacySig - The legacy signature that will be mapped to the Java name.private boolean hasCollision(java.lang.String javaSig)
javaSig - The Java method signature for which to check.true if there is a collision (an existing registered method with the same Java
signature).private void addJavaMethodName(java.lang.String javaname,
java.lang.String jparms,
java.lang.String legacySig)
javaname - The Java method name to add.jparms - The Java parameter list definition.legacySig - The legacy signature that will be mapped to the Java name.private void registerMethod(java.lang.String javaname,
MemberData mdat)
javaname - The javaname to forcibly assign to this legacy signature, or null to
compute an unique one.mdat - The method definition. Must NOT be null.private java.lang.String lookupOverrideName(java.lang.String legacySig,
boolean override,
boolean abstr)
legacySig - The legacy signature. This should uniquely identify a single method.override - true is the method name is an override. This will force a search of parent
(inheritance hierarchy).abstr - true is the method name is abstract. This will force a search of any implemented
interfaces.null if there is no match.private void loadBuiltinDefinition()
public java.lang.String getConvertedMethodName(java.lang.String legacy,
Aast mAst)
Legacy methods for which there are collisions with the converted Java signatures, the names are made unique, but still ensures that any overridden versions will reuse the same name.
legacy - The legacy name.mAst - The method definition AST.public java.lang.String getConvertedMethodName(java.lang.String legacySig)
legacySig - The legacy signature.null if no match is found.public void setProcessed(boolean state)
state - The processed state.public boolean isProcessed()
processed flag.public void derivedFromDotNet()
public boolean isDerivedFromDotNet()
true if an ancestor is a .NET class.public java.util.Set<java.lang.String> getDerivedDotNet()
public void markDotNetUsage(ClassDefinition ref)
ref - The class being referenced.public boolean hasDirectDotNet()
true if the class has any direct .NET references.public java.util.Set<java.lang.String> getDirectDotNet()
public boolean hasIndirectDotNet()
true if the class has any indirect .NET references.public java.util.Set<java.lang.String> getIndirectDotNet()
public boolean isIndirectDotNetReference()
true if the class is NOT a .NET class AND it is derived from a .NET
class or has its own direct or indirect references to a .NET class.public java.util.Set<java.lang.Long> getTableIds()
public void parseFinished(boolean global)
global - Flag indicating that the parsing of all files has finished, and a global cleanup can be done
for this instance.public java.lang.String getName()
public java.lang.String getSimpleName()
public void setJavaClassName(java.lang.String pkg,
java.lang.String cls)
pkg - Full Java package in dotted notation (no class name).cls - Simple Java class name, without any package prefix.public java.lang.String getQualifiedJavaName()
null if it has not yet been
computed.public java.lang.String getSimpleJavaName()
null if it has not yet been computed.public java.lang.String getJavaPackage()
null if it has not yet been computed.public java.lang.String getFilename()
public ClassDefinition[] getParents()
null if there is no
explicit parent.public java.util.Set<java.lang.String> getInterfaces()
public boolean isBuiltIn()
true if this is a built-in class.public boolean isClass()
true if this is a class definition.public boolean isInterface()
true if this is an interface definition.public boolean isEnum()
true if this is an enum definition.public boolean isDotNet()
true if this is a .NET class.public boolean isJava()
true if this is a Java class.public boolean isMock()
true is this instance represents a "mock" class definition,
false otherwise.public int nextTempIdx()
tempIdx value.public void addMethod(java.lang.String name,
int type,
int access,
boolean isStatic,
Aast node,
Aast ret)
name - Method name.type - Return type for the method.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - true if the method is static.node - The AST to be annotated or null if no node needs annotations.ret - The AST for the method's return type. This is used to copy OO annotations back to
the method node.public int guessMethodType(java.lang.String name,
int access,
boolean isStatic,
boolean internal)
If a positive value is returned, the caller can be assured that there is an accessible method with that name BUT the actual type of the return value cannot be known until the signature is known. This is due to the fact that the same method name can be present with differing return values and only the parameter signature matching can differentiate the exact method that will be called.
Do not call this from any location where the type must be known authoritatively.
name - Resource name.access - Access mode (KW_PUBLIC, KW_PROTECTD or
KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.internal - true if the lookup is internal to the current class definition.-1 if no match exists.public void annotateObjectEvent(Aast evt, Aast call, boolean isStatic)
evt - The event node, annotated with its class definition.call - The event publish node.isStatic - true if the call is from a static context.public void annotateMethodCall(java.lang.String mname,
ParameterKey[] signature,
int access,
boolean isStatic,
boolean isSuper,
boolean internal,
Aast node)
null.mname - Method name, null for a c'tor invocation.signature - Array of type values for the parameter list, in left to right order.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - true if the method is static.isSuper - true if the rvalue refnode is the SUPER keyword.internal - true if the lookup is internal to the current class definition.node - The AST to be annotated.public void addVariable(int type,
java.lang.String name,
Variable var,
Aast node,
int access,
boolean isStatic,
java.lang.String qname,
boolean provisional)
type - The token type of the member being added. This will be DEFINE_VARIABLE, DEFINE_PROPERTY,
DEFINE_EVENT or DEFINE_ENUM.name - Variable or property name.var - Variable instance.node - The definition node for this member.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - true if the variable/property is static.qname - Fully qualified class name where the resource represents an
object instance, otherwise null.provisional - true if this definition has not been finalized.public int lookupVariable(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Variable or property name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.public java.lang.String lookupVariableJavaName(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Variable or property name.access - Access mode (KW_PUBLIC, KW_PROTECTD or KW_PRIVATE).isStatic - true if this is a static reference.null if no such variable exists.public long lookupVariableExtent(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Variable or property name.access - Access mode (KW_PUBLIC, KW_PROTECTD or KW_PRIVATE).isStatic - true if this is a static reference.public java.lang.String lookupVariableClassName(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Variable or property name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - true if this is a static reference.null if no such variable exists.public Variable lookupVariableWrapper(java.lang.String name, int access, boolean isStatic)
Variable wrapper for the data member (variable) or property given
the name and access mode.
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Variable or property name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - true if this is a static reference.null if no such variable exists.public void cleanupObjectResources()
public SchemaDictionary getSchemaDict()
null if it was never set.public void addTable(Aast node, java.lang.String name, int type, int access, boolean isStatic, SchemaDictionary schemaDict, boolean inMethod)
node - The definition AST.name - Temp-table or buffer name.type - The integer token type representing the type of table.access - Access mode (KW_PROTECTD or KW_PRIVATE).isStatic - true if the method is static.schemaDict - The schema dictionary that manages the temp-tables and buffers for this
class.inMethod - Flag indicating we are in a method definition.public int lookupTable(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Temp-table or buffer name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.public void addQuery(java.lang.String name,
Aast node,
int type,
int access,
boolean isStatic,
boolean inMethod)
name - Query name.node - The AST to be annotated or null if no node needs annotations.type - The integer token type representing the type of table.access - Access mode (KW_PROTECTD or KW_PRIVATE).isStatic - true if the method is static.public int lookupQuery(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Query name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.public void addDataSet(Variable var, Aast node, java.lang.String name, int type, int access, boolean isStatic, boolean inMethod)
var - The associated variable for this data-set.node - The definition AST.name - Dataset name.type - The integer token type representing the type of table.access - Access mode (KW_PROTECTD or KW_PRIVATE).isStatic - true if the method is static.inMethod - Flag indicating we are in a method definition.public int lookupDataSet(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Dataset name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.public Variable lookupDataSetWrapper(java.lang.String name, int access, boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Dataset name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.public void addDataSource(Variable var, Aast node, java.lang.String name, int type, int access, boolean isStatic, boolean inMethod)
var - The associated variable for this data-set.node - The definition AST.name - Data source name.type - The integer token type representing the type of table.access - Access mode (KW_PROTECTD or KW_PRIVATE).isStatic - true if the method is static.inMethod - Flag indicating we are in a method definition.public int lookupDataSource(java.lang.String name,
int access,
boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Data source name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.public Variable lookupDataSourceWrapper(java.lang.String name, int access, boolean isStatic)
If the resource does not exist in this class definition the parent (if one exists) will be checked. This means a recursive call can occur here.
name - Data source name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.public boolean isStaticDataMember(java.lang.String name,
int access)
name - Member name to lookup.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).true if the member is static. false otherwise
including the case where the member does not exist at all.public java.util.Set<java.lang.String> getDefinedMethods()
public boolean testParentGraph(java.util.function.Predicate<ClassDefinition> check)
check - Delegated code to check the condition.true if the condition is matched anywhere in the parent graph.public <R> R calcFromParentGraph(java.util.function.Function<ClassDefinition,R> func, java.util.function.Predicate<R> continu, R defVal, boolean inherit, boolean ifaces)
func - Delegated code to calculate the value.continu - A condition which if it returns true, then the next parent should be tried.
On false, the current result is returned.defVal - Default value to return if no parents exist.inherit - true to search the inheritance hierarchy for a match.ifaces - true to search interfaces (if any exist) in addition to direct parents.null if no value is calculated.public void processParentGraph(java.util.function.Consumer<ClassDefinition> consumer)
consumer - Delegated code to process the value.public void processParentGraph(java.util.function.Consumer<ClassDefinition> consumer, boolean descent)
consumer - Delegated code to process the value.descent - Flag indicating if the processing is done on descent (from nearest parent to object) or ascent
(from object to nearest parent).public boolean hasParentPropertyAccessor(Aast ast)
Override annotations only for getters/setters defined in the abstract property.ast - The accessor AST.true if a parent defines this getter/setter.private <R> R calcFromParentGraphWorker(java.util.function.Function<ClassDefinition,R> func, java.util.function.Predicate<R> continu, R defVal, java.util.Set<java.lang.String> processed, boolean inherit, boolean ifaces)
func - Delegated code to calculate the value.continu - A condition which if it returns true, then the next parent should be tried.
On false, the current result is returned.defVal - Default value to return if no parents exist.inherit - true to search the inheritance hierarchy for a match.ifaces - true to search interfaces (if any exist) in addition to direct parents.null if no value is calculated.private java.util.Map<java.lang.String,MemberData> getMemberStore(ClassDefinition.DataStoreType type, boolean isStatic)
type - The data store type to lookup.isStatic - true if the static map is to be returned, false for
the instance version.null.private java.util.Map<SignatureKey,MemberData> getMethodStore(java.lang.String name, boolean isStatic)
name - Method name.isStatic - true if the method is static.private MemberData lookupHierarchy(ClassDefinition.DataStoreType type, java.lang.String name, int access, boolean isStatic)
type - Type of data store to check.name - Variable/data member name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.null if no such variable or data
member exists.private void annotateCallSignature(Aast call, ParameterKey[] callSig, ParameterKey[] defSig, java.lang.String[] overrides)
call - The OO_METH_* node whose parameters will be annotated.callSig - The array of parameter types that is the method definition signature.defSig - The array of parameter types that is the method definition signature.overrides - Type overrides found by any fuzzy matching for this method.private MemberData guessMethod(java.lang.String name, int access, boolean isStatic, boolean internal)
If a non-null value is returned, the caller can be assured that there is an accessible method with that name BUT the actual type/details of the method cannot be known until the signature is known. This is due to the fact that the same method name can be present with differing return values/parameter signature and only the parameter signature matching can differentiate the exact method that will be called.
Do not call this from any location where the method details must be known authoritatively.
name - Resource name.access - Access mode (KW_PUBLIC, KW_PROTECTD or
KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.internal - true if the lookup is internal to the current class definition.null if no match exists.private MethodSearchResult lookupMethodWorker(java.lang.String name, ParameterKey[] sig, int access, boolean isStatic, boolean internal, Aast node)
name - Method name.sig - Array describing the signature of the method call.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.internal - true if the lookup is internal to the current class definition.node - The AST referencing this method.null if no such variable or data
member exists.private MethodSearchResult exactMethodLookup(java.lang.String name, ParameterKey[] caller, int access, boolean isStatic, boolean internal)
name - Resource name.caller - Method call signature.access - Access mode (KW_PUBLIC, KW_PROTECTD or
KW_PRIVATE).isStatic - If true, only static methods will be looked up.
Otherwise any method can be returned.internal - true if the lookup is internal to the current class definition.null if no match exists.private boolean isExtentMatch(java.lang.String defSig,
java.lang.String callSig)
It is assumed that any exact matches are handled elsewhere.
defSig - Definition parameter type spec.callSig - Call parameter type spec.true if a fixed extent call parm is passed to an indeterminate extent def
parm or if neither have an extent spec.java.util.List<MatchMetrics> candidates(java.lang.String name, int num, int access, boolean isStatic, boolean internal, boolean first, java.util.Set<SignatureKey> exist)
name - Method name.num - Number of parameters.access - Access mode (KW_PUBLIC, KW_PROTECTD or KW_PRIVATE).isStatic - If true, only static methods will be looked up. Otherwise any method can be
returned.internal - true if the lookup is internal to the current class definition.first - true if the first match should be immediately returned as the result.exist - The set of existing methods already represented in the list.boolean isImplemented(ClassDefinition cls)
cls - The class to check.true if the given class is an implemented interface in this class.boolean isInheritedFrom(ClassDefinition cls, boolean ifaces, java.lang.Runnable incrementer)
cls - The class to check.ifaces - true if implemented interfaces should be checked.incrementer - Code to be executed to increment the inheritance level.true if the given class is a parent class or an implemented interface of a parent
class.private MemberData checkAccessRights(MemberData mdat, int access)
mdat - Member data, may be null.access - Access mode (KW_PUBLIC, KW_PROTECTD or
KW_PRIVATE).null access is not allowed or
if the member is null on input.private MemberData addWorker(ClassDefinition.DataStoreType stype, java.lang.String name, ParameterKey[] signature, Variable var, int type, int access, boolean isStatic, java.lang.String qname, int tempIdx)
stype - Type of data store to check.name - Resource name.signature - Parameter signature for methods or null.var - Variable reference for var resources or null.type - Token type.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).isStatic - true if the variable/property is static.qname - Fully qualified class name where the resource represents an
object instance, otherwise null.tempIdx - Temporary ID.MemberData instance.private MemberData lookupWorker(java.util.Map<java.lang.String,MemberData> map, java.lang.String name, int access)
map - Dictionary for all resources regardless of access mode.name - Resource name.access - Access mode (KW_PUBLIC, KW_PROTECTD
or KW_PRIVATE).null if no match exists.private void defineExceptions(java.util.ArrayList<java.lang.String> save,
boolean isStatic)
save - Set of temp-tables and buffers.isStatic - true to process static resources, otherwise instance resources.private void registerVirtualEnumMethods(java.lang.String name,
boolean flags)
GetEnum method for all enums and the instance SetFlag, ToggleFlag and
UnsetFlag for flags enums.name - Fully qualified class name of this enum.flags - true if this is a flags enum.private void registerVirtual(java.lang.String name,
java.lang.String ori,
java.lang.String meth,
boolean isStatic,
int rtype,
java.lang.String qname,
ParameterKey[] parms)
name - Fully qualified class name.ori - Legacy method name.meth - Converted method name.isStatic - true if this is a static method, false for instance methods.rtype - Method's return token type.qname - Fully qualified OO name of the return type or null for non-object return types.parms - The signature details.private MemberData createMethod(java.util.Map<SignatureKey,MemberData> defs, java.lang.String name, ParameterKey[] sig, int accessMode, boolean isStatic, int retType, java.lang.String qualified, java.lang.String javaname, int extent, int tempIdx, boolean override, boolean abstr)
name - The legacy method name.sig - The method signature.accessMode - The access mode.isStatic - Flag indicating if the method is static or not.retType - The return type.qualified - The qualified legacy class name, for methods returning object.javaname - The converted java name.extent - The extent (for the return type).tempIdx - The tempIdx to use.override - true if the method is an override of a parent class/interface method.abstr - true if the method is abstract of a parent class/interface method.private MemberData createMethod(java.util.Map<SignatureKey,MemberData> defs, java.lang.String name, ParameterKey[] sig, int accessMode, boolean isStatic, int retType, java.lang.String qualified, java.lang.String javaname, int extent, int tempIdx, boolean override, boolean abstr, java.util.Map<java.lang.String,java.lang.Object> ret, boolean register)
name - The legacy method name.sig - The method signature.accessMode - The access mode.isStatic - Flag indicating if the method is static or not.retType - The return type.qualified - The qualified legacy class name, for methods returning object.javaname - The converted java name.extent - The extent (for the return type).tempIdx - The tempIdx to use.override - true if the method is an override of a parent class/interface method.abstr - true if the method is abstract of a parent class/interface method.register - true if the name should be registered in the maps.