Expression class: Improved error message when resolving a variable fails.
This commit is contained in:
parent
be671259cb
commit
1da5d33996
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 "";
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user