diff options
Diffstat (limited to 'src/qml/qml/qqmlinfo.cpp')
-rw-r--r-- | src/qml/qml/qqmlinfo.cpp | 133 |
1 files changed, 45 insertions, 88 deletions
diff --git a/src/qml/qml/qqmlinfo.cpp b/src/qml/qml/qqmlinfo.cpp index 2bfd2d5bb4..159a519bdc 100644 --- a/src/qml/qml/qqmlinfo.cpp +++ b/src/qml/qml/qqmlinfo.cpp @@ -1,63 +1,33 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtQml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qqmlinfo.h" #include "qqmldata_p.h" -#include "qqmlcontext.h" -#include "qqmlcontext_p.h" #include "qqmlmetatype_p.h" #include "qqmlengine_p.h" +#include "qqmlsourcecoordinate_p.h" #include <QCoreApplication> QT_BEGIN_NAMESPACE /*! - \namespace QtQml + \class QQmlInfo \inmodule QtQml - \brief Provides functions for producing logging messages for QML types. + \brief The QQmlInfo class allows logging of QML-related messages. + + QQmlInfo is an opaque handle for QML-related diagnostic messages. You can + use the \c{<<} operator to add content to the message. When the QQmlInfo + object is destroyed, it prints the resulting message along with information + on the context. + + \sa qmlDebug, qmlInfo, qmlWarning */ /*! - \fn QQmlInfo QtQml::qmlDebug(const QObject *object) - \relates QtQml + \fn QQmlInfo qmlDebug(const QObject *object) + \relates QQmlInfo \since 5.9 Prints debug messages that include the file and line number for the @@ -86,12 +56,12 @@ QT_BEGIN_NAMESPACE QML MyCustomType (unknown location): Internal state: 42 \endcode - \sa QtQml::qmlInfo, QtQml::qmlWarning + \sa qmlInfo, qmlWarning */ /*! - \fn QQmlInfo QtQml::qmlInfo(const QObject *object) - \relates QtQml + \fn QQmlInfo qmlInfo(const QObject *object) + \relates QQmlInfo Prints informational messages that include the file and line number for the specified QML \a object. @@ -114,12 +84,12 @@ QT_BEGIN_NAMESPACE QtMsgType. For Qt 5.9 and above, qmlInfo uses an info QtMsgType. To send warnings, use qmlWarning. - \sa QtQml::qmlDebug, QtQml::qmlWarning + \sa qmlDebug, qmlWarning */ /*! - \fn QQmlInfo QtQml::qmlWarning(const QObject *object) - \relates QtQml + \fn QQmlInfo qmlWarning(const QObject *object) + \relates QQmlInfo \since 5.9 Prints warning messages that include the file and line number for the @@ -139,36 +109,36 @@ QT_BEGIN_NAMESPACE QML MyCustomType (unknown location): property cannot be set to 0 \endcode - \sa QtQml::qmlDebug, QtQml::qmlInfo + \sa qmlDebug, qmlInfo */ /*! - \fn QQmlInfo QtQml::qmlDebug(const QObject *object, const QQmlError &error) + \fn QQmlInfo qmlDebug(const QObject *object, const QQmlError &error) \internal */ /*! - \fn QQmlInfo QtQml::qmlDebug(const QObject *object, const QList<QQmlError> &errors) + \fn QQmlInfo qmlDebug(const QObject *object, const QList<QQmlError> &errors) \internal */ /*! - \fn QQmlInfo QtQml::qmlInfo(const QObject *object, const QQmlError &error) + \fn QQmlInfo qmlInfo(const QObject *object, const QQmlError &error) \internal */ /*! - \fn QQmlInfo QtQml::qmlInfo(const QObject *object, const QList<QQmlError> &errors) + \fn QQmlInfo qmlInfo(const QObject *object, const QList<QQmlError> &errors) \internal */ /*! - \fn QQmlInfo QtQml::qmlWarning(const QObject *object, const QQmlError &error) + \fn QQmlInfo qmlWarning(const QObject *object, const QQmlError &error) \internal */ /*! - \fn QQmlInfo QtQml::qmlWarning(const QObject *object, const QList<QQmlError> &errors) + \fn QQmlInfo qmlWarning(const QObject *object, const QList<QQmlError> &errors) \internal */ @@ -214,15 +184,28 @@ QQmlInfo::~QQmlInfo() QObject *object = const_cast<QObject *>(d->object); if (object) { - engine = qmlEngine(d->object); + // Some objects (e.g. like attached objects created in C++) won't have an associated engine, + // but we can still try to look for a parent object that does. + QObject *objectWithEngine = object; + while (objectWithEngine) { + engine = qmlEngine(objectWithEngine); + if (engine) + break; + objectWithEngine = objectWithEngine->parent(); + } - d->buffer.prepend(QLatin1String("QML ") + QQmlMetaType::prettyTypeName(object) + QLatin1String(": ")); + if (!objectWithEngine || objectWithEngine == object) { + d->buffer.prepend(QLatin1String("QML ") + QQmlMetaType::prettyTypeName(object) + QLatin1String(": ")); + } else { + d->buffer.prepend(QLatin1String("QML ") + QQmlMetaType::prettyTypeName(objectWithEngine) + + QLatin1String(" (parent or ancestor of ") + QQmlMetaType::prettyTypeName(object) + QLatin1String("): ")); + } - QQmlData *ddata = QQmlData::get(object, false); + QQmlData *ddata = QQmlData::get(objectWithEngine ? objectWithEngine : object, false); if (ddata && ddata->outerContext) { error.setUrl(ddata->outerContext->url()); - error.setLine(ddata->lineNumber); - error.setColumn(ddata->columnNumber); + error.setLine(qmlConvertSourceCoordinate<quint16, int>(ddata->lineNumber)); + error.setColumn(qmlConvertSourceCoordinate<quint16, int>(ddata->columnNumber)); } } @@ -237,8 +220,6 @@ QQmlInfo::~QQmlInfo() } } -namespace QtQml { - #define MESSAGE_FUNCS(FuncName, MessageLevel) \ QQmlInfo FuncName(const QObject *me) \ { \ @@ -265,28 +246,4 @@ MESSAGE_FUNCS(qmlDebug, QtMsgType::QtDebugMsg) MESSAGE_FUNCS(qmlInfo, QtMsgType::QtInfoMsg) MESSAGE_FUNCS(qmlWarning, QtMsgType::QtWarningMsg) - -} // namespace QtQml - -#if QT_DEPRECATED_SINCE(5, 1) - -// Also define symbols outside namespace to keep binary compatibility with Qt 5.0 - -QQmlInfo qmlInfo(const QObject *me) -{ - return QtQml::qmlInfo(me); -} - -QQmlInfo qmlInfo(const QObject *me, const QQmlError &error) -{ - return QtQml::qmlInfo(me, error); -} - -QQmlInfo qmlInfo(const QObject *me, const QList<QQmlError> &errors) -{ - return QtQml::qmlInfo(me, errors); -} - -#endif // QT_DEPRECATED_SINCE(5, 1) - QT_END_NAMESPACE |