Thanks for the JavaDoc. 

case (1) : yes, is false when a field is not enum (according to Thrift definition on classpath).
case (2) : What does it mean? TStructDescriptor is a singleton descriptor for each Thrift struct, only based on definition on the classpath. It does not depend on the message on the wire at all. May be the app stored separately that field_x is an Enum (which changed while reading), that is a different issue.