summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-03-03 18:23:30 +0100
committerAndreas Stöckel <andreas@somweyr.de>2015-03-03 18:23:30 +0100
commitb39f1681f47ac30ead123b10f1e14dcc40a947db (patch)
tree428670717f7d6f021de365a9fc92d6c0467b8ddc
parent4ee3c4042d267c010babb2ab86e15a6b31950849 (diff)
improved FieldDescriptor validation error messages.
-rw-r--r--src/core/model/Ontology.cpp36
-rw-r--r--src/core/model/Ontology.hpp2
2 files changed, 24 insertions, 14 deletions
diff --git a/src/core/model/Ontology.cpp b/src/core/model/Ontology.cpp
index e7bc7c4..e56d628 100644
--- a/src/core/model/Ontology.cpp
+++ b/src/core/model/Ontology.cpp
@@ -292,19 +292,22 @@ bool FieldDescriptor::doValidate(Logger &logger) const
bool valid = true;
// check parent type
if (getParent() == nullptr) {
- logger.error(std::string("Field \"") + getName() + "\" has no parent!",
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" has no parent!",
*this);
- valid = false;
+ return false;
} else if (!getParent()->isa(&RttiTypes::Descriptor)) {
- logger.error(std::string("The parent of Field \"") + getName() +
- "\" is not a descriptor!",
+ logger.error(std::string("The parent of Field \"") +
+ getNameOrDefaultName() + "\" is not a descriptor!",
*this);
- valid = false;
+ return false;
}
+ const std::string &parentName = getParent().cast<Descriptor>()->getName();
// check name
if (getName().empty()) {
if (fieldType != FieldType::TREE) {
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" is not the main field but has an empty name!",
*this);
valid = false;
@@ -316,7 +319,8 @@ bool FieldDescriptor::doValidate(Logger &logger) const
if (!startToken.special && !startToken.token.empty() &&
!Utils::isUserDefinedToken(startToken.token)) {
// TODO: Correct error message.
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" has an invalid custom start token: " +
startToken.token,
*this);
@@ -325,7 +329,8 @@ bool FieldDescriptor::doValidate(Logger &logger) const
if (!endToken.special && !endToken.token.empty() &&
!Utils::isUserDefinedToken(endToken.token)) {
// TODO: Correct error message.
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" has an invalid custom end token: " +
endToken.token,
*this);
@@ -335,14 +340,16 @@ bool FieldDescriptor::doValidate(Logger &logger) const
// check consistency of FieldType with the rest of the FieldDescriptor.
if (primitive) {
if (children.size() > 0) {
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" is supposed to be primitive but has "
"registered child classes!",
*this);
valid = false;
}
if (primitiveType == nullptr) {
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" is supposed to be primitive but has "
"no primitive type!",
*this);
@@ -350,7 +357,8 @@ bool FieldDescriptor::doValidate(Logger &logger) const
}
} else {
if (primitiveType != nullptr) {
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" is supposed to be non-primitive but has "
"a primitive type!",
*this);
@@ -358,7 +366,8 @@ bool FieldDescriptor::doValidate(Logger &logger) const
}
// if this is not a primitive field we require at least one child.
if (children.empty()) {
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" is non primitive but does not allow children!",
*this);
valid = false;
@@ -372,7 +381,8 @@ bool FieldDescriptor::doValidate(Logger &logger) const
std::set<std::string> names;
for (Handle<StructuredClass> c : getChildrenWithSubclasses()) {
if (!names.insert(c->getName()).second) {
- logger.error(std::string("Field \"") + getName() +
+ logger.error(std::string("Field \"") + getNameOrDefaultName() +
+ "\" of descriptor \"" + parentName +
"\" had multiple children with the name \"" +
c->getName() + "\"",
*this);
diff --git a/src/core/model/Ontology.hpp b/src/core/model/Ontology.hpp
index 82f8948..c90093c 100644
--- a/src/core/model/Ontology.hpp
+++ b/src/core/model/Ontology.hpp
@@ -458,7 +458,7 @@ public:
* @return the name of this FieldDescriptor or the default field name
* if the name is empty.
*/
- std::string getNameOrDefaultName()
+ std::string getNameOrDefaultName() const
{
std::string name = getName();
if (name.empty()) {