Better error handling for EntityFilePreprocessor

This commit is contained in:
2016-01-14 17:01:39 +01:00
parent d34470256b
commit 99406c32cf
+10 -6
View File
@@ -103,21 +103,25 @@ void EntityFilePreprocessor::parseComponentInfo()
} }
} }
} else { } else {
LOG_WARNING("Component is missing an annotation!"); LOG_WARNING("Component \"%s\" is missing an annotation!", compInfo.Name.c_str());
} }
// <xs:complexType> // <xs:complexType>
auto typeDefinition = element->getTypeDefinition(); auto typeDefinition = element->getTypeDefinition();
// Allow empty components
if (typeDefinition == nullptr) {
continue;
}
if (typeDefinition->getTypeCategory() != XSTypeDefinition::COMPLEX_TYPE) { if (typeDefinition->getTypeCategory() != XSTypeDefinition::COMPLEX_TYPE) {
LOG_ERROR("Type definition wasn't COMPLEX_TYPE! Skipping."); LOG_ERROR("Failed to parse component definition for \"%s\": Type definition wasn't COMPLEX_TYPE!", compInfo.Name.c_str());
continue; continue;
} }
auto complexTypeDefinition = dynamic_cast<XSComplexTypeDefinition*>(typeDefinition); auto complexTypeDefinition = dynamic_cast<XSComplexTypeDefinition*>(typeDefinition);
// <xs:all> // <xs:all>
auto modelGroupParticle = complexTypeDefinition->getParticle(); auto modelGroupParticle = complexTypeDefinition->getParticle();
if (modelGroupParticle->getTermType() != XSParticle::TERM_MODELGROUP) { if (modelGroupParticle == nullptr || modelGroupParticle->getTermType() != XSParticle::TERM_MODELGROUP) {
LOG_ERROR("Model group particle wasn't TERM_MODELGROUP! Skipping."); LOG_ERROR("Failed to parse component definition for \"%s\": Model group particle was null or wasn't TERM_MODELGROUP!", compInfo.Name.c_str());
continue; continue;
} }
auto modelGroup = modelGroupParticle->getModelGroupTerm(); auto modelGroup = modelGroupParticle->getModelGroupTerm();
@@ -129,7 +133,7 @@ void EntityFilePreprocessor::parseComponentInfo()
for (unsigned int i = 0; i < particles->size(); ++i) { for (unsigned int i = 0; i < particles->size(); ++i) {
auto particle = particles->elementAt(i); auto particle = particles->elementAt(i);
if (particle->getTermType() != XSParticle::TERM_ELEMENT) { if (particle->getTermType() != XSParticle::TERM_ELEMENT) {
LOG_ERROR("Particle wasn't TERM_ELEMENT! Skipping."); LOG_ERROR("Failed to parse a field definition in component \"%s\": Particle wasn't TERM_ELEMENT! Skipping.", compInfo.Name.c_str());
continue; continue;
} }
auto elementDeclaration = particle->getElementTerm(); auto elementDeclaration = particle->getElementTerm();
@@ -139,7 +143,7 @@ void EntityFilePreprocessor::parseComponentInfo()
size_t stride = EntityFile::GetTypeStride(type); size_t stride = EntityFile::GetTypeStride(type);
if (stride == 0) { if (stride == 0) {
std::cout << "Warning: Field \"" << name << "\" in component \"" << compInfo.Name << "\" uses unexpected field type \"" << type << "\". Skipping." << std::endl; LOG_WARNING("Field \"%s\" in component \"%s\" uses unexpected field type \"%s\". Skipping.", name.c_str(), compInfo.Name.c_str(), type.c_str());
continue; continue;
} }