forked from qt-creator/qt-creator
QmlJS: Add more value_casts.
And switch all existing dynamic_casts to value_casts. Change-Id: I93b89358e4802080f40b332074c64f4e91a2bc4c Reviewed-on: http://codereview.qt-project.org/6311 Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
This commit is contained in:
@@ -75,6 +75,11 @@ class JSImportScope;
|
||||
class Context;
|
||||
typedef QSharedPointer<const Context> ContextPtr;
|
||||
class ReferenceContext;
|
||||
class CppComponentValue;
|
||||
class ASTObjectValue;
|
||||
class QmlEnumValue;
|
||||
class QmlPrototypeReference;
|
||||
class ASTPropertyReference;
|
||||
|
||||
typedef QList<const Value *> ValueList;
|
||||
|
||||
@@ -124,13 +129,18 @@ public:
|
||||
virtual const Reference *asReference() const;
|
||||
virtual const ColorValue *asColorValue() const;
|
||||
virtual const AnchorLineValue *asAnchorLineValue() const;
|
||||
virtual const CppComponentValue *asCppComponentValue() const;
|
||||
virtual const ASTObjectValue *asAstObjectValue() const;
|
||||
virtual const QmlEnumValue *asQmlEnumValue() const;
|
||||
virtual const QmlPrototypeReference *asQmlPrototypeReference() const;
|
||||
virtual const ASTPropertyReference *asAstPropertyReference() const;
|
||||
|
||||
virtual void accept(ValueVisitor *) const = 0;
|
||||
|
||||
virtual bool getSourceLocation(QString *fileName, int *line, int *column) const;
|
||||
};
|
||||
|
||||
template <typename _RetTy> _RetTy value_cast(const Value *v);
|
||||
template <typename _RetTy> const _RetTy *value_cast(const Value *v);
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const NullValue *value_cast(const Value *v)
|
||||
{
|
||||
@@ -210,6 +220,36 @@ template <> Q_INLINE_TEMPLATE const AnchorLineValue *value_cast(const Value *v)
|
||||
else return 0;
|
||||
}
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const CppComponentValue *value_cast(const Value *v)
|
||||
{
|
||||
if (v) return v->asCppComponentValue();
|
||||
else return 0;
|
||||
}
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const ASTObjectValue *value_cast(const Value *v)
|
||||
{
|
||||
if (v) return v->asAstObjectValue();
|
||||
else return 0;
|
||||
}
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const QmlEnumValue *value_cast(const Value *v)
|
||||
{
|
||||
if (v) return v->asQmlEnumValue();
|
||||
else return 0;
|
||||
}
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const QmlPrototypeReference *value_cast(const Value *v)
|
||||
{
|
||||
if (v) return v->asQmlPrototypeReference();
|
||||
else return 0;
|
||||
}
|
||||
|
||||
template <> Q_INLINE_TEMPLATE const ASTPropertyReference *value_cast(const Value *v)
|
||||
{
|
||||
if (v) return v->asAstPropertyReference();
|
||||
else return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Value nodes
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -394,14 +434,14 @@ private:
|
||||
Error m_error;
|
||||
};
|
||||
|
||||
class CppComponentValue;
|
||||
|
||||
class QMLJS_EXPORT QmlEnumValue: public NumberValue
|
||||
{
|
||||
public:
|
||||
QmlEnumValue(const CppComponentValue *owner, int index);
|
||||
virtual ~QmlEnumValue();
|
||||
|
||||
virtual const QmlEnumValue *asQmlEnumValue() const;
|
||||
|
||||
QString name() const;
|
||||
QStringList keys() const;
|
||||
const CppComponentValue *owner() const;
|
||||
@@ -423,6 +463,8 @@ public:
|
||||
ValueOwner *valueOwner);
|
||||
virtual ~CppComponentValue();
|
||||
|
||||
virtual const CppComponentValue *asCppComponentValue() const;
|
||||
|
||||
virtual void processMembers(MemberProcessor *processor) const;
|
||||
const Value *valueForCppName(const QString &typeName) const;
|
||||
|
||||
@@ -701,6 +743,8 @@ public:
|
||||
QmlPrototypeReference(AST::UiQualifiedId *qmlTypeName, const Document *doc, ValueOwner *valueOwner);
|
||||
virtual ~QmlPrototypeReference();
|
||||
|
||||
virtual const QmlPrototypeReference *asQmlPrototypeReference() const;
|
||||
|
||||
AST::UiQualifiedId *qmlTypeName() const;
|
||||
|
||||
private:
|
||||
@@ -755,6 +799,8 @@ public:
|
||||
ASTPropertyReference(AST::UiPublicMember *ast, const Document *doc, ValueOwner *valueOwner);
|
||||
virtual ~ASTPropertyReference();
|
||||
|
||||
virtual const ASTPropertyReference *asAstPropertyReference() const;
|
||||
|
||||
AST::UiPublicMember *ast() const { return _ast; }
|
||||
QString onChangedSlotName() const { return _onChangedSlotName; }
|
||||
|
||||
@@ -804,6 +850,8 @@ public:
|
||||
ValueOwner *valueOwner);
|
||||
virtual ~ASTObjectValue();
|
||||
|
||||
virtual const ASTObjectValue *asAstObjectValue() const;
|
||||
|
||||
bool getSourceLocation(QString *fileName, int *line, int *column) const;
|
||||
virtual void processMembers(MemberProcessor *processor) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user