| 1 |
|
|---|
| 2 |
import re; |
|---|
| 3 |
import logging; |
|---|
| 4 |
|
|---|
| 5 |
from FCDElement import FCDElement; |
|---|
| 6 |
|
|---|
| 7 |
class Field(FCDElement): |
|---|
| 8 |
"""Represents a <Field/> element from a .fcd file. |
|---|
| 9 |
""" |
|---|
| 10 |
|
|---|
| 11 |
def __init__(self): |
|---|
| 12 |
super(Field, self).__init__(); |
|---|
| 13 |
self.m_log = logging.getLogger("Field"); |
|---|
| 14 |
self.m_fieldContainer = None; |
|---|
| 15 |
|
|---|
| 16 |
self.initFCDDict(); |
|---|
| 17 |
|
|---|
| 18 |
def initFCDDict(self): |
|---|
| 19 |
"""Sets the fcd dictionary to default values. |
|---|
| 20 |
""" |
|---|
| 21 |
self.setFCD("name", ""); |
|---|
| 22 |
self.setFCD("category", ""); |
|---|
| 23 |
self.setFCD("type", ""); |
|---|
| 24 |
self.setFCD("pointerType", ""); |
|---|
| 25 |
self.setFCD("typeNamespace", ""); |
|---|
| 26 |
self.setFCD("cardinality", ""); |
|---|
| 27 |
self.setFCD("visibility", "external"); |
|---|
| 28 |
self.setFCD("fieldFlags", ""); |
|---|
| 29 |
self.setFCD("defaultValue", ""); |
|---|
| 30 |
self.setFCD("access", "public"); |
|---|
| 31 |
self.setFCD("defaultHeader", ""); |
|---|
| 32 |
self.setFCD("header", "(AUTO)"); |
|---|
| 33 |
self.setFCD("description", ""); |
|---|
| 34 |
self.setFCD("checkNilPtr", "true"); |
|---|
| 35 |
self.setFCD("linkParentField", ""); |
|---|
| 36 |
self.setFCD("tombstoneValue", ""); |
|---|
| 37 |
|
|---|
| 38 |
self.setFCD("clearMField", "true"); |
|---|
| 39 |
self.setFCD("pushToField", ""); |
|---|
| 40 |
self.setFCD("assignMField", ""); |
|---|
| 41 |
self.setFCD("insertIntoMField", ""); |
|---|
| 42 |
self.setFCD("replaceInMFieldIndex", ""); |
|---|
| 43 |
self.setFCD("replaceInMFieldObject", ""); |
|---|
| 44 |
self.setFCD("removeFromMFieldIndex", ""); |
|---|
| 45 |
self.setFCD("removeFromMFieldObject", ""); |
|---|
| 46 |
self.setFCD("clearField", ""); |
|---|
| 47 |
self.setFCD("pushToFieldAs", ""); |
|---|
| 48 |
self.setFCD("assignMFieldAs", ""); |
|---|
| 49 |
self.setFCD("insertIntoMFieldAs", ""); |
|---|
| 50 |
self.setFCD("replaceInMFieldIndexAs", ""); |
|---|
| 51 |
self.setFCD("replaceInMFieldObjectAs", ""); |
|---|
| 52 |
self.setFCD("removeFromMFieldIndexAs", ""); |
|---|
| 53 |
self.setFCD("removeFromMFieldObjectAs", ""); |
|---|
| 54 |
self.setFCD("clearFieldAs", ""); |
|---|
| 55 |
self.setFCD("needClassInclude", "true"); |
|---|
| 56 |
|
|---|
| 57 |
def setFieldContainer(self, container): |
|---|
| 58 |
self.m_fieldContainer = container; |
|---|
| 59 |
|
|---|
| 60 |
def getFieldContainer(self): |
|---|
| 61 |
return self.m_fieldContainer; |
|---|
| 62 |
|
|---|
| 63 |
|
|---|
| 64 |
|
|---|
| 65 |
|
|---|
| 66 |
def isPrivate(self): |
|---|
| 67 |
return self["accessPrivate"]; |
|---|
| 68 |
|
|---|
| 69 |
def isProtected(self): |
|---|
| 70 |
return self["accessProtected"]; |
|---|
| 71 |
|
|---|
| 72 |
def isPublic(self): |
|---|
| 73 |
return self["accessPublic"]; |
|---|
| 74 |
|
|---|
| 75 |
def isSField(self): |
|---|
| 76 |
return self["isSField"]; |
|---|
| 77 |
|
|---|
| 78 |
def isMField(self): |
|---|
| 79 |
return self["isMField"]; |
|---|
| 80 |
|
|---|
| 81 |
def isPtrField(self): |
|---|
| 82 |
return self["isPointerField"]; |
|---|
| 83 |
|
|---|
| 84 |
|
|---|
| 85 |
|
|---|
| 86 |
|
|---|
| 87 |
def finalize(self): |
|---|
| 88 |
|
|---|
| 89 |
|
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 |
|
|---|
| 93 |
TypeRaw = self.getFCD("type"); |
|---|
| 94 |
TypeRawCaps = self._upcaseFirst(TypeRaw); |
|---|
| 95 |
|
|---|
| 96 |
Type = self.getFCD("type"); |
|---|
| 97 |
TypeNS = self.getFCD("typeNamespace"); |
|---|
| 98 |
TypeCaps = self._upcaseFirst(Type); |
|---|
| 99 |
|
|---|
| 100 |
if TypeNS != "" and not TypeNS.endswith("::"): |
|---|
| 101 |
TypeNS = TypeNS + "::" |
|---|
| 102 |
|
|---|
| 103 |
|
|---|
| 104 |
|
|---|
| 105 |
|
|---|
| 106 |
|
|---|
| 107 |
self["category"] = ""; |
|---|
| 108 |
self["pointertype"] = ""; |
|---|
| 109 |
self["pointerbasetype"] = ""; |
|---|
| 110 |
|
|---|
| 111 |
if self.getFCD("category") == "": |
|---|
| 112 |
self.m_log.info("finalize: \"category\" is empty, assuming \"data\""); |
|---|
| 113 |
self.setFCD("category", "data"); |
|---|
| 114 |
|
|---|
| 115 |
if self.getFCD("category") == "data": |
|---|
| 116 |
self["category"] = "data"; |
|---|
| 117 |
|
|---|
| 118 |
FieldType = Type; |
|---|
| 119 |
FieldTypeNS = TypeNS; |
|---|
| 120 |
FieldTypeCaps = TypeCaps; |
|---|
| 121 |
|
|---|
| 122 |
elif self.getFCD("category") == "pointer": |
|---|
| 123 |
self["category"] = "pointer"; |
|---|
| 124 |
self["pointertype"] = "unrecorded"; |
|---|
| 125 |
|
|---|
| 126 |
Type = Type + "Ptr"; |
|---|
| 127 |
TypeCaps = self._upcaseFirst(Type); |
|---|
| 128 |
FieldType = TypeRaw + "UnrecPtr"; |
|---|
| 129 |
FieldTypeNS = TypeNS; |
|---|
| 130 |
FieldTypeCaps = TypeRawCaps + "UnrecPtr"; |
|---|
| 131 |
|
|---|
| 132 |
elif self.getFCD("category") == "childpointer": |
|---|
| 133 |
self["category"] = "pointer"; |
|---|
| 134 |
self["pointertype"] = "child"; |
|---|
| 135 |
self["ParentLinkField"] = self._upcaseFirst(self.getFCD("parentLinkField")); |
|---|
| 136 |
|
|---|
| 137 |
Type = Type + "Ptr"; |
|---|
| 138 |
TypeCaps = self._upcaseFirst(Type); |
|---|
| 139 |
FieldType = TypeRaw + "ChildPtr"; |
|---|
| 140 |
FieldTypeNS = TypeNS; |
|---|
| 141 |
FieldTypeCaps = TypeRawCaps + "ChildPtr"; |
|---|
| 142 |
|
|---|
| 143 |
elif self.getFCD("category") == "parentpointer": |
|---|
| 144 |
self["category"] = "pointer"; |
|---|
| 145 |
self["pointertype"] = "parent"; |
|---|
| 146 |
|
|---|
| 147 |
Type = Type + "Ptr"; |
|---|
| 148 |
TypeCaps = self._upcaseFirst(Type); |
|---|
| 149 |
FieldType = TypeRaw + "ParentPtr"; |
|---|
| 150 |
FieldTypeNS = TypeNS; |
|---|
| 151 |
FieldTypeCaps = TypeRawCaps + "ParentPtr"; |
|---|
| 152 |
|
|---|
| 153 |
elif self.getFCD("category") == "weakpointer": |
|---|
| 154 |
self["category"] = "pointer"; |
|---|
| 155 |
self["pointertype"] = "weak"; |
|---|
| 156 |
|
|---|
| 157 |
Type = Type + "Ptr"; |
|---|
| 158 |
TypeCaps = self._upcaseFirst(Type); |
|---|
| 159 |
FieldType = TypeRaw + "WeakPtr"; |
|---|
| 160 |
FieldTypeNS = TypeNS; |
|---|
| 161 |
FieldTypeCaps = TypeRawCaps + "WeakPtr"; |
|---|
| 162 |
|
|---|
| 163 |
else: |
|---|
| 164 |
self.m_log.warning("finalize: \"category\" has invalid value: >%s<", |
|---|
| 165 |
self.getFCD("category")); |
|---|
| 166 |
|
|---|
| 167 |
if TypeNS == "std::": |
|---|
| 168 |
FieldTypeNS = ""; |
|---|
| 169 |
|
|---|
| 170 |
self["Type"] = Type; |
|---|
| 171 |
self["TypeNS"] = TypeNS; |
|---|
| 172 |
self["TypeCaps"] = TypeCaps |
|---|
| 173 |
|
|---|
| 174 |
self["FieldType"] = FieldType; |
|---|
| 175 |
self["FieldTypeNS"] = FieldTypeNS; |
|---|
| 176 |
self["FieldTypeCaps"] = FieldTypeCaps |
|---|
| 177 |
|
|---|
| 178 |
|
|---|
| 179 |
|
|---|
| 180 |
|
|---|
| 181 |
|
|---|
| 182 |
self["Name"] = self._upcaseFirst(self.getFCD("name")); |
|---|
| 183 |
self["DescName"] = self.getFCD("name"); |
|---|
| 184 |
|
|---|
| 185 |
self["isSField"] = False; |
|---|
| 186 |
self["isMField"] = False; |
|---|
| 187 |
|
|---|
| 188 |
if self.getFCD("cardinality") == "single": |
|---|
| 189 |
self["cardinality"] = "single" |
|---|
| 190 |
self["isSField"] = True; |
|---|
| 191 |
self["CARD"] = "SF"; |
|---|
| 192 |
self["VarName"] = "_sf" + self["Name"]; |
|---|
| 193 |
elif self.getFCD("cardinality") == "multi": |
|---|
| 194 |
self["cardinality"] = "multi" |
|---|
| 195 |
self["isMField"] = True; |
|---|
| 196 |
self["CARD"] = "MF"; |
|---|
| 197 |
self["VarName"] = "_mf" + self["Name"]; |
|---|
| 198 |
else: |
|---|
| 199 |
self.m_log.warning("finalize: \"cardinality\" has invalid value: %s", |
|---|
| 200 |
self.getFCD("cardinality")); |
|---|
| 201 |
|
|---|
| 202 |
if self.getFCD("access") == "private": |
|---|
| 203 |
self["access"] = "private"; |
|---|
| 204 |
elif self.getFCD("access") == "protected": |
|---|
| 205 |
self["access"] = "protected"; |
|---|
| 206 |
elif self.getFCD("access") == "public": |
|---|
| 207 |
self["access"] = "public"; |
|---|
| 208 |
elif self.getFCD("access") == "none": |
|---|
| 209 |
self["access"] = "none"; |
|---|
| 210 |
else: |
|---|
| 211 |
self.m_log.warning("finalize: \"access\" has invalid value: >%s<", |
|---|
| 212 |
self.getFCD("access")); |
|---|
| 213 |
|
|---|
| 214 |
if self.getFCD("description").strip() == "": |
|---|
| 215 |
self["Description"] = ""; |
|---|
| 216 |
self["SafeDescription"] = "\"\""; |
|---|
| 217 |
else: |
|---|
| 218 |
self["Description"] = self._formatString (self.getFCD("description"), 4) |
|---|
| 219 |
self["SafeDescription"] = self._formatSafeString(self.getFCD("description"), 8) |
|---|
| 220 |
|
|---|
| 221 |
if self["isMField"] == True: |
|---|
| 222 |
self["GenFieldFlags"] = "(Field::MFDefaultFlags" |
|---|
| 223 |
else: |
|---|
| 224 |
self["GenFieldFlags"] = "(Field::SFDefaultFlags" |
|---|
| 225 |
|
|---|
| 226 |
if self.getFCD("checkNilPtr") == "true": |
|---|
| 227 |
self["checkNilPtr"] = True; |
|---|
| 228 |
else: |
|---|
| 229 |
self["checkNilPtr"] = False; |
|---|
| 230 |
|
|---|
| 231 |
typeInclude = ""; |
|---|
| 232 |
|
|---|
| 233 |
if ((self.getFCD("header") == "") or |
|---|
| 234 |
(self.getFCD("header") == "(AUTO)") ): |
|---|
| 235 |
if self.getFieldContainer().isSystemComponent(): |
|---|
| 236 |
typeInclude = "OSG"; |
|---|
| 237 |
else: |
|---|
| 238 |
typeInclude = "OpenSG/OSG"; |
|---|
| 239 |
|
|---|
| 240 |
typeInclude = typeInclude + TypeRawCaps + "Fields.h" |
|---|
| 241 |
else: |
|---|
| 242 |
typeInclude = self.getFCD("header"); |
|---|
| 243 |
|
|---|
| 244 |
self["TypeInclude"] = typeInclude; |
|---|
| 245 |
|
|---|
| 246 |
if self.getFieldContainer().isDecoratable(): |
|---|
| 247 |
self["MethodType"] = "virtual"; |
|---|
| 248 |
else: |
|---|
| 249 |
self["MethodType"] = ""; |
|---|
| 250 |
|
|---|
| 251 |
if self.getFCD("defaultHeader") != "": |
|---|
| 252 |
self["hasDefaultHeader"] = True; |
|---|
| 253 |
|
|---|
| 254 |
if ((self.getFCD("defaultHeader").find("\"") == -1) and |
|---|
| 255 |
(self.getFCD("defaultHeader").find("<") == -1) ): |
|---|
| 256 |
self["DefaultHeader"] = "\"" + self.getFCD("defaultHeader") + "\""; |
|---|
| 257 |
else: |
|---|
| 258 |
self["DefaultHeader"] = self.getFCD("defaultHeader"); |
|---|
| 259 |
else: |
|---|
| 260 |
self["hasDefaultHeader"] = False; |
|---|
| 261 |
|
|---|
| 262 |
if self.getFCD("defaultValue") != "": |
|---|
| 263 |
self["TypedDefault"] = \ |
|---|
| 264 |
self["TypeNS"] + self["Type"] + "(" + self.getFCD("defaultValue") + ")"; |
|---|
| 265 |
else: |
|---|
| 266 |
if self["category"] == "pointer" and self["cardinality"] == "single": |
|---|
| 267 |
self["TypedDefault"] = self["TypeNS"] + self["Type"] + "(NullFC)"; |
|---|
| 268 |
else: |
|---|
| 269 |
self["TypedDefault"] = ""; |
|---|
| 270 |
|
|---|
| 271 |
if self.getFCD("visibility") == "external": |
|---|
| 272 |
self["Visibility"] = "false"; |
|---|
| 273 |
elif self.getFCD("visibility") == "internal": |
|---|
| 274 |
self["Visibility"] = "true"; |
|---|
| 275 |
self["GenFieldFlags"] += " | Field::FInternal" |
|---|
| 276 |
else: |
|---|
| 277 |
self.m_log.warning("finalize: \"visibility\" has invalid value: %s", |
|---|
| 278 |
self.getFCD("visibility")); |
|---|
| 279 |
|
|---|
| 280 |
self["GenFieldFlags"] += ")" |
|---|
| 281 |
|
|---|
| 282 |
fieldFlagsOverride = False; |
|---|
| 283 |
flags = None, |
|---|
| 284 |
|
|---|
| 285 |
if self.isSField(): |
|---|
| 286 |
if self.getFCD("fieldFlags") != "": |
|---|
| 287 |
fieldFlagsOverride = True; |
|---|
| 288 |
else: |
|---|
| 289 |
flags = "Field::SFDefaultFlags"; |
|---|
| 290 |
|
|---|
| 291 |
elif self.isMField(): |
|---|
| 292 |
if self.getFCD("fieldFlags") != "": |
|---|
| 293 |
fieldFlagsOverride = True; |
|---|
| 294 |
else: |
|---|
| 295 |
flags = "Field::MFDefaultFlags"; |
|---|
| 296 |
|
|---|
| 297 |
if fieldFlagsOverride: |
|---|
| 298 |
flagsFCD = self.getFCD("fieldFlags").split(","); |
|---|
| 299 |
numFlags = len(flagsFCD); |
|---|
| 300 |
|
|---|
| 301 |
flags = "("; |
|---|
| 302 |
|
|---|
| 303 |
for i, flag in enumerate(flagsFCD): |
|---|
| 304 |
flag = flag.replace(" ", ""); |
|---|
| 305 |
flag = flag.replace("\t", ""); |
|---|
| 306 |
flag = flag.replace("\n", ""); |
|---|
| 307 |
|
|---|
| 308 |
if (i == 0) and (i != numFlags - 1): |
|---|
| 309 |
flags = flags + "Field::" + flag + " |"; |
|---|
| 310 |
continue; |
|---|
| 311 |
|
|---|
| 312 |
if i == numFlags - 1: |
|---|
| 313 |
if i != 0: |
|---|
| 314 |
flags = flags + " Field::" + flag; |
|---|
| 315 |
else: |
|---|
| 316 |
flags = flags + "Field::" + flag; |
|---|
| 317 |
|
|---|
| 318 |
continue; |
|---|
| 319 |
|
|---|
| 320 |
flags = flags + " Field::" + flag + " |"; |
|---|
| 321 |
|
|---|
| 322 |
flags = flags + ")"; |
|---|
| 323 |
|
|---|
| 324 |
self["Flags"] = flags; |
|---|
| 325 |
|
|---|
| 326 |
self["writePushToField"] = False; |
|---|
| 327 |
self["writeAssignMField"] = False; |
|---|
| 328 |
self["writeInsertIntoMField"] = False; |
|---|
| 329 |
self["writeReplaceInMFieldIndex"] = False; |
|---|
| 330 |
self["writeReplaceInMFieldObject"] = False; |
|---|
| 331 |
self["writeRemoveFromMFieldIndex"] = False; |
|---|
| 332 |
self["writeRemoveFromMFieldObject"] = False; |
|---|
| 333 |
self["writeClearField"] = False; |
|---|
| 334 |
|
|---|
| 335 |
if self.getFCD("pushToField") == "" or self.getFCD("pushToField") == "true": |
|---|
| 336 |
self["writePushToField"] = True; |
|---|
| 337 |
if self.getFCD("pushToFieldAs") == "": |
|---|
| 338 |
self["PushToField"] = "add" + self["Name"]; |
|---|
| 339 |
else: |
|---|
| 340 |
self["PushToField"] = self.getFCD("pushToFieldAs"); |
|---|
| 341 |
|
|---|
| 342 |
if self.getFCD("assignMField") == "" or self.getFCD("assignMField") == "true": |
|---|
| 343 |
self["writeAssignMField"] = True; |
|---|
| 344 |
if self.getFCD("assignMFieldAs") == "": |
|---|
| 345 |
self["AssignMField"] = "assign" + self["Name"]; |
|---|
| 346 |
else: |
|---|
| 347 |
self["AssignMField"] = self.getFCD("assignMFieldAs"); |
|---|
| 348 |
|
|---|
| 349 |
if self.getFCD("insertIntoMField") == "" or self.getFCD("insertIntoMField") == "true": |
|---|
| 350 |
self["writeInsertIntoMField"] = True; |
|---|
| 351 |
if self.getFCD("insertIntoMFieldAs") == "": |
|---|
| 352 |
self["InsertIntoMField"] = "insert" + self["Name"]; |
|---|
| 353 |
else: |
|---|
| 354 |
self["InsertIntoMField"] = self.getFCD("insertIntoMFieldAs"); |
|---|
| 355 |
|
|---|
| 356 |
if self.getFCD("replaceInMFieldIndex") == "" or self.getFCD("replaceInMFieldIndex") == "true": |
|---|
| 357 |
self["writeReplaceInMFieldIndex"] = True; |
|---|
| 358 |
if self.getFCD("replaceInMFieldIndexAs") == "": |
|---|
| 359 |
self["ReplaceInMFieldIndex"] = "replace" + self["Name"]; |
|---|
| 360 |
else: |
|---|
| 361 |
self["ReplaceInMFieldIndex"] = self.getFCD("replaceInMFieldIndexAs"); |
|---|
| 362 |
|
|---|
| 363 |
if self.getFCD("replaceInMFieldObject") == "" or self.getFCD("replaceInMFieldObject") == "true": |
|---|
| 364 |
self["writeReplaceInMFieldObject"] = True; |
|---|
| 365 |
if self.getFCD("replaceInMFieldObjectAs") == "": |
|---|
| 366 |
self["ReplaceInMFieldObject"] = "replace" + self["Name"]; |
|---|
| 367 |
else: |
|---|
| 368 |
self["ReplaceInMFieldObject"] = self.getFCD("replaceInMFieldObjectAs"); |
|---|
| 369 |
|
|---|
| 370 |
if self.getFCD("removeFromMFieldIndex") == "" or self.getFCD("removeFromMFieldIndex") == "true": |
|---|
| 371 |
self["writeRemoveFromMFieldIndex"] = True; |
|---|
| 372 |
if self.getFCD("removeFromMFieldIndexAs") == "": |
|---|
| 373 |
self["RemoveFromMFieldIndex"] = "sub" + self["Name"]; |
|---|
| 374 |
else: |
|---|
| 375 |
self["RemoveFromMFieldIndex"] = self.getFCD("removeFromMFieldIndexAs"); |
|---|
| 376 |
|
|---|
| 377 |
if self.getFCD("removeFromMFieldObject") == "" or self.getFCD("removeFromMFieldObject") == "true": |
|---|
| 378 |
self["writeRemoveFromMFieldObject"] = True; |
|---|
| 379 |
if self.getFCD("removeFromMFieldObjectAs") == "": |
|---|
| 380 |
self["RemoveFromMFieldObject"] = "sub" + self["Name"]; |
|---|
| 381 |
else: |
|---|
| 382 |
self["RemoveFromMFieldObject"] = self.getFCD("removeFromMFieldObjectAs"); |
|---|
| 383 |
|
|---|
| 384 |
if self.getFCD("clearField") == "" or self.getFCD("clearField") == "true": |
|---|
| 385 |
self["writeClearField"] = True; |
|---|
| 386 |
if self.getFCD("clearFieldAs") == "": |
|---|
| 387 |
self["ClearField"] = "clear" + self["Name"]; |
|---|
| 388 |
else: |
|---|
| 389 |
self["ClearField"] = self.getFCD("clearFieldAs"); |
|---|
| 390 |
|
|---|
| 391 |
if self.getFCD("tombstoneValue") != "": |
|---|
| 392 |
self["hasTombstoneValue"] = True; |
|---|
| 393 |
self["tombstoneValue"] = self.getFCD("tombstoneValue"); |
|---|
| 394 |
else: |
|---|
| 395 |
self["hasTombstoneValue"] = False; |
|---|
| 396 |
|
|---|
| 397 |
if self.getFCD("clearMField") == "true": |
|---|
| 398 |
self["doClearMField"] = True; |
|---|
| 399 |
else: |
|---|
| 400 |
self["doClearMField"] = False; |
|---|
| 401 |
|
|---|
| 402 |
classInclude = ""; |
|---|
| 403 |
|
|---|
| 404 |
if self["category"] == "pointer": |
|---|
| 405 |
if self.getFieldContainer().isSystemComponent(): |
|---|
| 406 |
classInclude = "OSG"; |
|---|
| 407 |
else: |
|---|
| 408 |
classInclude = "OpenSG/OSG"; |
|---|
| 409 |
|
|---|
| 410 |
classInclude = classInclude + self["TypeCaps"]; |
|---|
| 411 |
|
|---|
| 412 |
if classInclude.endswith("Ptr"): |
|---|
| 413 |
classInclude = classInclude[:-3]; |
|---|
| 414 |
|
|---|
| 415 |
classInclude = classInclude.replace("Parent", ""); |
|---|
| 416 |
classInclude = classInclude + ".h"; |
|---|
| 417 |
|
|---|
| 418 |
self["ClassInclude"] = classInclude; |
|---|
| 419 |
self["needClassInclude"] = True; |
|---|
| 420 |
|
|---|
| 421 |
def _dumpValues(self): |
|---|
| 422 |
self.m_log.info("Field dumpValues:"); |
|---|
| 423 |
super(Field, self)._dumpValues(self.m_log); |
|---|
| 424 |
|
|---|