Avoid using dynamic_cast<>

dynamic_cast<> breaks in cross-library situations. In the past
the issue was witnessed on Mac, this time on FreeBSD in
various configurations.

The workaround deployed here is to manually create unique
type ids in form of (addresses of) global variables.

Task-id: QTCREATORBUG-16462
Change-Id: Ie28fbb3d31d06c1a722a3d9ea808831191298e71
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Ralf Nolden <nolden@kde.org>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2016-06-21 14:06:24 +02:00
committed by Eike Ziller
parent 8c7913e0ba
commit 3f11ef9216
13 changed files with 74 additions and 6 deletions

View File

@@ -89,7 +89,8 @@ SOURCES += \
avddialog.cpp \
androidbuildapkstep.cpp \
androidbuildapkwidget.cpp \
androidqtsupport.cpp
androidqtsupport.cpp \
androidrunnable.cpp
FORMS += \
androidsettingswidget.ui \

View File

@@ -76,6 +76,7 @@ QtcPlugin {
"androidruncontrol.h",
"androidrunfactories.cpp",
"androidrunfactories.h",
"androidrunnable.cpp",
"androidrunnable.h",
"androidrunner.cpp",
"androidrunner.h",

View File

@@ -27,6 +27,8 @@
#include "androidconstants.h"
#include "androidsignaloperation.h"
#include <projectexplorer/runnables.h>
#include <QCoreApplication>
using namespace ProjectExplorer;

View File

@@ -0,0 +1,32 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** 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 General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** 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-3.0.html.
**
****************************************************************************/
#include "androidrunnable.h"
namespace Android {
void *AndroidRunnable::staticTypeId = &AndroidRunnable::staticTypeId;
} // namespace Android

View File

@@ -40,6 +40,8 @@ struct ANDROID_EXPORT AndroidRunnable
QVector<QStringList> beforeStartADBCommands;
QVector<QStringList> afterFinishADBCommands;
QString deviceSerialNumber;
static void *staticTypeId;
};
inline bool operator==(const AndroidRunnable &r1, const AndroidRunnable &r2)