Expression class: Improved error message when resolving a variable fails.

This commit is contained in:
Eivind Kvedalen 2016-02-12 22:24:41 +01:00 committed by wmayer
parent be671259cb
commit 1da5d33996
3 changed files with 26 additions and 1 deletions

View File

@ -989,7 +989,7 @@ const Property * VariableExpression::getProperty() const
if (prop)
return prop;
else
throw ExpressionError(std::string("Property '") + var.getPropertyName() + std::string("' not found."));
throw Expression::Exception(var.resolveErrorString().c_str());
}
/**

View File

@ -865,6 +865,13 @@ ObjectIdentifier ObjectIdentifier::parse(const DocumentObject *docObj, const std
throw Base::Exception("Invalid property specification.");
}
std::string ObjectIdentifier::resolveErrorString() const
{
ResolveResults result(*this);
return result.resolveErrorString();
}
/**
* @brief << operator, used to add a component to the object identifier.
* @param value Component object
@ -1111,3 +1118,17 @@ ObjectIdentifier::ResolveResults::ResolveResults(const ObjectIdentifier &oi)
{
oi.resolve(*this);
}
std::string ObjectIdentifier::ResolveResults::resolveErrorString() const
{
if (resolvedDocument == 0)
return std::string("Document not found: ") + resolvedDocumentName.toString();
else if (resolvedDocumentObject == 0)
return std::string("Document object not found: ") + resolvedDocumentObjectName.toString();
else if (resolvedProperty == 0)
return std::string("Property not found: ") + propertyName;
assert(false);
return "";
}

View File

@ -229,6 +229,8 @@ public:
static ObjectIdentifier parse(const App::DocumentObject *docObj, const std::string & str);
std::string resolveErrorString() const;
protected:
struct ResolveResults {
@ -242,6 +244,8 @@ protected:
String resolvedDocumentObjectName;
App::Property * resolvedProperty;
std::string propertyName;
std::string resolveErrorString() const;
};
std::string getPythonAccessor() const;