1 = Inspection Cache Files = 2 3 The results of inspection for each module are written out to cache files, and these files should be able to provide all the information that is gathered during inspection without having to inspect the source code again. One minor benefit of using cached data, instead of having to parse and inspect the source code for a given module, is that of a slightly reduced processing time for the inspection activity. However, an arguably greater benefit is that of being able to see the outcome of the activity as a summary of accumulated data. 4 5 Each cache file has the following general format: 6 7 {{{{#!table 8 {{{ 9 <filename> 10 11 }}} 12 || The main program filename 13 == 14 {{{ 15 imports: 16 <required module-names> 17 <possibly-required module-names> 18 19 }}} 20 || 21 * Comma-separated list of modules explicitly imported by this module 22 * Comma-separated list of modules implicitly imported by this module 23 == 24 {{{ 25 deferred: 26 <deferred references> 27 28 }}} 29 || Comma-separated list of references not identified within this module 30 == 31 {{{ 32 special: 33 <special-name> <reference> <qualified-names> 34 ... 35 36 }}} 37 || Special name and corresponding reference plus comma-separated list of usage namespaces 38 == 39 {{{ 40 members: 41 <qualified-name> <reference> 42 ... 43 44 }}} 45 || Reference for each member of the static namespace hierarchy of the module 46 == 47 {{{ 48 class relationships: 49 <qualified-class-name> <base-class-references> 50 ... 51 52 }}} 53 || Comma-separated list of base classes for each class 54 == 55 {{{ 56 instance attributes: 57 <qualified-class-name> <instance-attribute-names> 58 ... 59 60 }}} 61 || Comma-separated list of instance attributes for each class 62 == 63 {{{ 64 instance attribute constants: 65 <qualified-class-name> <attribute-name> <reference> 66 ... 67 68 }}} 69 || Reference for the named constant instance attribute in the given class 70 == 71 {{{ 72 names used: 73 <qualified-class/function/module-name> <names> 74 ... 75 76 }}} 77 || Comma-separated list of names in each namespace 78 == 79 {{{ 80 name references: 81 <qualified-name> <reference> 82 ... 83 84 }}} 85 || Correspondence between name and resolved identity 86 == 87 {{{ 88 initialised-names: 89 <qualified-name> <definition-version> <reference> 90 ... 91 92 }}} 93 || Identity of a given definition of a name 94 == 95 {{{ 96 aliased-names: 97 <qualified-name> <definition-version> <original-name> <attribute-names> <access-number> 98 ... 99 100 }}} 101 || Name definition by access operation 102 == 103 {{{ 104 function parameters: 105 <qualified-function-name> <parameter-names> 106 ... 107 108 }}} 109 || Comma-separated list of parameters for each function 110 == 111 {{{ 112 function default parameters: 113 <qualified-function-name> <parameter-names-with-defaults> 114 ... 115 116 }}} 117 || 118 Comma-separated parameter definitions for each function, with each definition being of the form... 119 {{{ 120 <name>=<references> 121 }}} 122 ...and with the references being semicolon-separated 123 == 124 {{{ 125 function locals: 126 <qualified-function-name> <local-variable-name> <reference> 127 ... 128 129 }}} 130 || Identity of the given local name in the given class 131 == 132 {{{ 133 scope globals: 134 <qualified-function-name> <global-variable-names> 135 ... 136 137 }}} 138 || Comma-separated list of global names in each namespace 139 == 140 {{{ 141 attribute usage: 142 <qualified-name> <local/global/qualified-variable-name> <usages> 143 ... 144 145 }}} 146 || 147 Attribute usage details for the given name in the given namespace, with usages being a semicolon-separated list of usage alternatives, each being a comma-separated list of attribute names or {} (meaning no attribute names used), attribute names employing ! if invoked 148 == 149 {{{ 150 attribute accesses: 151 <qualified-name> <attribute-chains> 152 ... 153 154 }}} 155 || Comma-separated list of attribute chains used on anonymous/unidentified objects 156 == 157 {{{ 158 constant accesses: 159 <qualified-function-name> <attribute-chain> <reference> <remaining attribute-chain> 160 ... 161 162 }}} 163 || Identity of the given attribute chain in the given namespace, with any unresolved attribute chain provided 164 == 165 {{{ 166 attribute access usage: 167 <qualified-function-name> <local/global-variable-name> <attribute-name> <definition-versions> 168 ... 169 170 }}} 171 || Indicates, for each access involving the given name and first attribute name in the given namespace, the definitions that may provide the name 172 == 173 {{{ 174 attribute access-modifiers: 175 <qualified-function-name> <local/global-variable-name> <attribute-name> <access-modifiers> 176 ... 177 178 }}} 179 || Indicates, for accesses involving the given name and first attribute name in the given namespace, the modifiers applying to each access, where = indicates assignment, ! indicates invocation, and _ indicates access 180 == 181 {{{ 182 constant literals: 183 <qualified-name> <value-type> <encoding> <constant-literal> 184 ... 185 186 }}} 187 || Describes a constant literal in the given namespace having the indicated type, encoding (if a string), and value 188 == 189 {{{ 190 constant values: 191 <qualified-name> <value-type> <encoding> <constant-literal> 192 ... 193 194 }}} 195 || Describes a constant literal identified using a locally-qualified name 196 == 197 {{{ 198 exception namespaces: 199 <qualified-names> 200 ... 201 }}} 202 || Comma-separated list of namespaces that need to handle exceptions 203 }}}} 204 205 A qualified name is a name prefixed with the namespace it appears in.