Merge remote-tracking branch 'origin/3.0'

This commit is contained in:
Eike Ziller
2013-11-29 11:50:41 +01:00
40 changed files with 1335 additions and 1237 deletions

203
dist/changes-3.0.0 vendored Normal file
View File

@@ -0,0 +1,203 @@
Qt Creator version 3.0 contains bug fixes and new features.
There is a total of about 1250 changes by 60 individual contributors.
The most important changes are listed in this document. For a complete
list of changes, see the Git log for the Qt Creator sources that
you can check out from the public Git repository. For example:
git clone git://gitorious.org/qt-creator/qt-creator.git
git log --cherry-pick --pretty=oneline v2.8.1..origin/3.0
General
* Added -pluginpath command line argument for adding plugin search paths
* Fixed "All templates" entry in "New" dialog (QTCREATORBUG-9792)
Editing
* Added option to close all files when deleted files for open editors
are detected
* Fixed issues with splitting when editor is not splittable (QTCREATORBUG-6827)
* Added action for closing all editors except the visible ones (QTCREATORBUG-9893)
Managing and Building Projects
* Fixed exit code that is shown for applications that are run in terminal
(QTCREATORBUG-9740)
* Added support for ANSI colors in compile and application output
(QTCREATORBUG-5956, QTCREATORBUG-9592)
* Added support for renaming auto-detected kits, Qt versions, compilers and debuggers
(QTCREATORBUG-9787)
Compilers
Devices
QMake Projects
* Fixed issues when using qtchooser (QTCREATORBUG-9841)
* Fixed issues with autosave files triggering reparses (QTCREATORBUG-9957)
* Fixed that run configurations were created for targets that are not built (QTCREATORBUG-9549)
CMake Projects
* Added parser for CMake build errors
* Fixed that build targets were not updated when CMakeLists.txt changes
* Added support for a CMakeDeployment.txt file that defines deployment rules
Qbs Projects
Generic Projects
Debugging
* GDB
* Fixed various pretty printers
* CDB
* Fixed interrupting 32 bit processes from 64 bit Qt Creator builds
* LLDB
* Fixed various pretty printers
* QML
Analyzer
C++ Support
* Fixed finding usages of template classes and functions
* Fixed support for namespace aliases inside blocks and functions (QTCREATORBUG-166)
* Fixed support for class and enum definitions inside blocks and functions
(QTCREATORBUG-3620, QTCREATORBUG-6013, QTCREATORBUG-8020)
* Added code completion support for lambda calls (QTCREATORBUG-9523)
* Added graceful handling of Objective-C's @try, @catch and @throw statements
(QTCREATORBUG-9309)
* Fixed completion for templates with template parameters inside namespace
(QTCREATORBUG-8852)
* Fixed handling of wide and UTF-n string literals
* Added option to explicitly choose a project for a file, and add preprocessor directives
specific to it (QTCREATORBUG-9802, QTCREATORBUG-1249)
* Fixed crash when resolving typedefs with templates (QTCREATORBUG-10320)
* Fixed crash when completing switch/case statement (QTCREATORBUG-10366)
* Fixed issues with showing type hierarchy (QTCREATORBUG-9819)
* Added "Optimize For Loop" refactoring action
* Added "Extract Constant as Function Parameter" refactoring action
* Added include hierarchy view in navigation side bar
* Added list of potential destinations when doing "Follow Symbol" on
virtual function calls (QTCREATORBUG-9611)
* Fixed "Follow Symbol" for operators (QTCREATORBUG-7485)
Python Support
GLSL Support
* Fixed crash (QTCREATORBUG-10166)
Diff Viewer
* Added button that switches between inline and side-by-side view
* Added syntax highlighting (QTCREATORBUG-9580)
Version Control Systems
* Fixed crash when reverting changes while commit editor is open (QTCREATORBUG-10190)
* Added VCS topic to window title
* Git
* Added information about files with conflict when doing "git stash pop"
* Added action for opening "git gui"
* Added support for removing and renaming tags
* Added support for setting remote tracking branch (QTCREATORBUG-8863)
* Added disambiguation of branch names (QTCREATORBUG-9700)
* Fixed updating of log view from branches dialog (QTCREATORBUG-9783)
* ClearCase
FakeVim
Platform Specific
Linux
Qt Support
QNX
* Added check for existence of debug token and show error message in that case (QTCREATORBUG-9103)
Android
* Added error messages for incompatible devices to compile output (QTCREATORBUG-9690)
* Fixed browse button for OpenJDK location (QTCREATORBUG-9706)
* Fixed generated kit display name (QTCREATORBUG-9865)
* Fixed issues with Android virtual devices support
* Added support for minimum and target SDK settings
* Added target selector to manifest editor (QTCREATORBUG-9682)
* Improved the keystore and certificate dialog (QTCREATORBUG-10061)
* Made signing option independent of debug vs release builds (QTCREATORBUG-10060)
* Fixed signing with OpenJDK 7
* Added support for Qt 5.2 deployment mechanism
* Added editor for third-party libraries to deployment settings (QTCREATORBUG-9849)
Remote Linux
* Fixed ssh authentication for servers that don't allow non-interactive
password authentication (QTCREATORBUG-9568)
Bare Metal
* Added experimental support for devices with only a gdbserver/openocd
Credits for these changes go to:
Alexey Semenko
André Hartmann
André Pönitz
Andrew Knight
Aurindam Jana
BogDan Vatra
Carl Simonson
Christiaan Janssen
Christian Kamm
Christian Kandeler
Christian Stenger
Christian Strømme
Daniel Teske
David Kaspar
David McFarland
David Schulz
Eike Ziller
El Mehdi Fekari
Erik Verbruggen
Eskil Abrahamsen Blomfeldt
Fawzi Mohamed
Francois Ferrand
Frank Osterfeld
Frantisek Vacek
Friedemann Kleint
Guido Seifert
Guillaume Belz
Gunnar Sletta
hluk
Jake Petroules
Jaroslaw Kobus
Jens Bache-Wiig
Jerome Pasion
Jörg Bornemann
Kai Köhne
Leena Miettinen
Lincoln Ramsay
Lorenz Haas
Marco Bubke
Martin Bohacek
Michal Klocek
Nicolas Arnaud-Cormos
Nikita Baryshnikov
Nikolai Kosjar
Oleksii Serdiuk
Orgad Shaneh
Oswald Buddenhagen
Paul Olav Tvete
Petar Perisin
Przemyslaw Gorszkowski
Radovan Zivkovic
Rafael Roquetto
Rainer Keller
Robert Löhning
Sergio Ahumada
Simon Hausmann
Takumi Asaki
Thiago Macieira
Thomas Hartmann
Thomas Zander
Tim Jenssen
Tim Sander
Tobias Hunger
Tobias Nätterlund
Viktor Ostashevskyi (Віктор Осташевський)
vlaomao
Volker Vogelhuber
Yuchen Deng

View File

@@ -127,7 +127,7 @@
\li Select \gui Details to view the
\gui {Package configurations}. For more information about the
options you have, see
\l{Specifying Settings for Application Packages}.
\l{Specifying Settings for Qt 4 Packages}.
\li To specify settings for deploying applications to Android, select
\gui Details to view the \gui {Deploy configurations}. For more

View File

@@ -41,18 +41,8 @@
\l{Creating Qt Quick Projects}{type of the project}: Qt Quick UI or Qt Quick
Application, and the Qt version used.
To debug Qt Quick UI projects:
\list 1
\li In \gui Projects mode \gui {Run Settings}, select the
\gui {Enable QML} check box in the \gui {Debugger Settings} to
enable QML debugging.
\li For Qt 4.7, compile the QML Inspector debugging helper. For more information,
see \l{Debugging Helpers for QML}.
\endlist
To debug Qt Quick UI projects, select the \gui {Enable QML} check box in the
\gui {Debugger Settings} in \gui Projects mode \gui {Run Settings}.
To debug Qt Quick Applications:

View File

@@ -74,7 +74,7 @@
\QC uses its own set of Qt Libraries located in the bundle, and therefore,
you need to configure the \QD plugins that you want to use with \QC.
Fore more information about how to deploy applications to Mac OS, see
\l{Deploying an Application on Mac OS X}.
\l{Qt for Mac OS X - Deployment}.
The following example illustrates how to configure version 5.2.1 of the
\l{http://qwt.sourceforge.net/}{Qwt - Qt Widgets for Technical Applications}

View File

@@ -960,7 +960,7 @@ class Dumper(DumperBase):
if vtable & 0x3: # This is not a pointer.
return False
metaObjectEntry = self.dereference(vtable) # It's the first entry.
if metaObjectEntry & 0x3: # This is not a pointer.
if metaObjectEntry & 0x1: # This is not a pointer.
return False
#warn("MO: 0x%x " % metaObjectEntry)
s = gdb.execute("info symbol 0x%x" % metaObjectEntry, to_string=True)
@@ -1272,7 +1272,7 @@ class Dumper(DumperBase):
# generic pointer." with MinGW's gcc 4.5 when it "identifies"
# a "QWidget &" as "void &" and with optimized out code.
self.putItem(value.cast(type.target().unqualified()))
self.putBetterType(typeName)
self.putBetterType("%s &" % self.currentType)
return
except RuntimeError:
self.putValue("<optimized out reference>")

View File

@@ -428,7 +428,7 @@ def qdump__std__stringHelper1(d, value, charSize):
sizePtr = data.cast(d.sizetType().pointer())
size = int(sizePtr[-3])
alloc = int(sizePtr[-2])
refcount = int(sizePtr[-1])
refcount = int(sizePtr[-1]) & 0xffffffff
d.check(refcount >= -1) # Can be -1 accoring to docs.
d.check(0 <= size and size <= alloc and alloc <= 100*1000*1000)
qdump_stringHelper(d, sizePtr, size * charSize, charSize)
@@ -687,7 +687,7 @@ def qdump__std__vector(d, value):
start = impl["_M_start"]["_M_p"]
finish = impl["_M_finish"]["_M_p"]
# FIXME: 8 is CHAR_BIT
size = (int(finish) - int(start)) * 8
size = (d.pointerValue(finish) - d.pointerValue(start)) * 8
size += int(impl["_M_finish"]["_M_offset"])
size -= int(impl["_M_start"]["_M_offset"])
else:
@@ -706,10 +706,11 @@ def qdump__std__vector(d, value):
if d.isExpanded():
if isBool:
with Children(d, size, maxNumChild=10000, childType=type):
base = d.pointerValue(start)
for i in d.childRange():
q = start + int(i / storagesize)
q = base + int(i / 8)
d.putBoolItem(str(i),
(int(q.dereference()) >> (i % storagesize)) & 1)
(int(d.dereference(q)) >> (i % 8)) & 1)
else:
d.putArrayData(type, start, size)

View File

@@ -9,15 +9,29 @@
"supportedImports": [
"Qt.labs.folderlistmodel 2.0",
"QtAudioEngine 1.0",
"QtBluetooth 5.0",
"QtBluetooth 5.2",
"QtGraphicalEffects 1.0",
"QtMultimedia 5.0",
"QtNfc 5.0",
"QtNfc 5.2",
"QtPositioning 5.0",
"QtPositioning 5.2",
"QtQuick.Controls 1.0",
"QtQuick.Controls 1.1",
"QtQuick.Controls.Styles 1.0",
"QtQuick.Controls.Styles 1.1",
"QtQuick.Dialogs 1.0",
"QtQuick.Dialogs 1.1",
"QtQuick.Layouts 1.0",
"QtQuick.Layouts 1.1",
"QtQuick.LocalStorage 2.0",
"QtQuick.Particles 2.0",
"QtQuick.Window 2.0",
"QtQuick.XmlListModel 2.0",
"QtQuick 2.0",
"QtQuick 2.1",
"QtQuick 2.2",
"QtTest 1.0",
"QtWebKit 3.0"]
}

View File

@@ -298,6 +298,7 @@ int main(int argc, char **argv)
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
// QML is unusable with the xlib backend
QApplication::setGraphicsSystem(QLatin1String("raster"));
qputenv("QSG_RENDER_LOOP", "basic"); // workaround for QTBUG-35143
#endif
SharedTools::QtSingleApplication app((QLatin1String(appNameC)), argc, argv);

View File

@@ -906,49 +906,7 @@ bool Preprocessor::handleIdentifier(PPToken *tk)
{
ScopedBoolSwap s(m_state.m_inPreprocessorDirective, true);
static const QByteArray ppLine("__LINE__");
static const QByteArray ppFile("__FILE__");
static const QByteArray ppDate("__DATE__");
static const QByteArray ppTime("__TIME__");
ByteArrayRef macroNameRef = tk->asByteArrayRef();
if (macroNameRef.size() == 8
&& macroNameRef[0] == '_'
&& macroNameRef[1] == '_') {
PPToken newTk;
if (macroNameRef == ppLine) {
QByteArray txt = QByteArray::number(tk->lineno);
newTk = generateToken(T_STRING_LITERAL, txt.constData(), txt.size(), tk->lineno, false);
} else if (macroNameRef == ppFile) {
QByteArray txt;
txt.append('"');
txt.append(m_env->currentFileUtf8);
txt.append('"');
newTk = generateToken(T_STRING_LITERAL, txt.constData(), txt.size(), tk->lineno, false);
} else if (macroNameRef == ppDate) {
QByteArray txt;
txt.append('"');
txt.append(QDate::currentDate().toString().toUtf8());
txt.append('"');
newTk = generateToken(T_STRING_LITERAL, txt.constData(), txt.size(), tk->lineno, false);
} else if (macroNameRef == ppTime) {
QByteArray txt;
txt.append('"');
txt.append(QTime::currentTime().toString().toUtf8());
txt.append('"');
newTk = generateToken(T_STRING_LITERAL, txt.constData(), txt.size(), tk->lineno, false);
}
if (newTk.hasSource()) {
newTk.f.newline = tk->newline();
newTk.f.whitespace = tk->whitespace();
*tk = newTk;
return false;
}
}
Macro *macro = m_env->resolve(macroNameRef);
Macro *macro = m_env->resolve(tk->asByteArrayRef());
if (!macro
|| (tk->expanded()
&& m_state.m_tokenBuffer

View File

@@ -37,6 +37,10 @@
#include <QPainter>
#include <QStyleOption>
#if QT_VERSION >= 0x050100
#include <QGuiApplication>
#endif
using namespace Utils;
FadingWidget::FadingWidget(QWidget *parent) :
@@ -123,12 +127,19 @@ void DetailsButton::paintEvent(QPaintEvent *e)
if (!HostOsInfo::isMacHost() && !isDown() && m_fader > 0)
p.fillRect(rect().adjusted(1, 1, -2, -2), QColor(255, 255, 255, int(m_fader*180)));
qreal checkedPixmapRatio = 1.0;
qreal uncheckedPixmapRatio = 1.0;
#if QT_VERSION >= 0x050100
checkedPixmapRatio = m_checkedPixmap.devicePixelRatio();
uncheckedPixmapRatio = m_uncheckedPixmap.devicePixelRatio();
#endif
if (isChecked()) {
if (m_checkedPixmap.isNull() || m_checkedPixmap.size() != contentsRect().size())
if (m_checkedPixmap.isNull() || m_checkedPixmap.size() / checkedPixmapRatio != contentsRect().size())
m_checkedPixmap = cacheRendering(contentsRect().size(), true);
p.drawPixmap(contentsRect(), m_checkedPixmap);
} else {
if (m_uncheckedPixmap.isNull() || m_uncheckedPixmap.size() != contentsRect().size())
if (m_uncheckedPixmap.isNull() || m_uncheckedPixmap.size() / uncheckedPixmapRatio != contentsRect().size())
m_uncheckedPixmap = cacheRendering(contentsRect().size(), false);
p.drawPixmap(contentsRect(), m_uncheckedPixmap);
}
@@ -145,7 +156,14 @@ QPixmap DetailsButton::cacheRendering(const QSize &size, bool checked)
lg.setCoordinateMode(QGradient::ObjectBoundingMode);
lg.setFinalStop(0, 1);
QPixmap pixmap(size);
qreal pixelRatio = 1.0;
#if QT_VERSION >= 0x050100
pixelRatio = devicePixelRatio();
#endif
QPixmap pixmap(size * pixelRatio);
#if QT_VERSION >= 0x050100
pixmap.setDevicePixelRatio(pixelRatio);
#endif
pixmap.fill(Qt::transparent);
QPainter p(&pixmap);
p.setRenderHint(QPainter::Antialiasing, true);

View File

@@ -312,6 +312,8 @@ QString MakeStepConfigWidget::summaryText() const
void MakeStepConfigWidget::updateDetails()
{
BuildConfiguration *bc = m_makeStep->buildConfiguration();
if (!bc)
bc = m_makeStep->target()->activeBuildConfiguration();
ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(m_makeStep->target()->kit());
if (tc) {

View File

@@ -382,7 +382,7 @@ void SettingsDialog::createGui()
headerHLayout->addWidget(m_headerLabel);
m_stackedLayout->setMargin(0);
m_stackedLayout->addWidget(new QWidget); // no category selected, for example when filtering
m_stackedLayout->addWidget(new QWidget(this)); // no category selected, for example when filtering
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |
QDialogButtonBox::Apply |

View File

@@ -306,9 +306,6 @@ MainWindow::~MainWindow()
m_helpManager = 0;
delete m_variableManager;
m_variableManager = 0;
delete m_navigationWidget;
m_navigationWidget = 0;
}
bool MainWindow::init(QString *errorMessage)

View File

@@ -97,6 +97,9 @@ private slots:
void test_SwitchMethodDeclarationDefinition_data();
void test_SwitchMethodDeclarationDefinition();
void test_FollowSymbolUnderCursor_multipleDocuments_data();
void test_FollowSymbolUnderCursor_multipleDocuments();
void test_FollowSymbolUnderCursor_data();
void test_FollowSymbolUnderCursor();
@@ -119,40 +122,19 @@ private slots:
void test_doxygen_comments_data();
void test_doxygen_comments();
void test_quickfix_CompleteSwitchCaseStatement_basic1();
void test_quickfix_CompleteSwitchCaseStatement_basic2();
void test_quickfix_CompleteSwitchCaseStatement_oneValueMissing();
void test_quickfix_CompleteSwitchCaseStatement_QTCREATORBUG10366_1();
void test_quickfix_CompleteSwitchCaseStatement_QTCREATORBUG10366_2();
void test_quickfix_data();
void test_quickfix();
void test_quickfix_GenerateGetterSetter_basicGetterWithPrefix();
void test_quickfix_GenerateGetterSetter_basicGetterWithPrefixAndNamespace();
void test_quickfix_GenerateGetterSetter_basicGetterWithPrefixAndNamespaceToCpp();
void test_quickfix_GenerateGetterSetter_basicGetterWithoutPrefix();
void test_quickfix_GenerateGetterSetter_customType();
void test_quickfix_GenerateGetterSetter_constMember();
void test_quickfix_GenerateGetterSetter_pointerToNonConst();
void test_quickfix_GenerateGetterSetter_pointerToConst();
void test_quickfix_GenerateGetterSetter_staticMember();
void test_quickfix_GenerateGetterSetter_secondDeclarator();
void test_quickfix_GenerateGetterSetter_triggeringRightAfterPointerSign();
void test_quickfix_GenerateGetterSetter_notTriggeringOnMemberFunction();
void test_quickfix_GenerateGetterSetter_notTriggeringOnMemberArray();
void test_quickfix_GenerateGetterSetter_notTriggeringWhenGetterOrSetterExist();
void test_quickfix_ReformatPointerDeclaration();
void test_quickfix_InsertDefFromDecl_basic();
void test_quickfix_InsertDefFromDecl_afterClass();
void test_quickfix_InsertDefFromDecl_headerSource_basic1();
void test_quickfix_InsertDefFromDecl_headerSource_basic2();
void test_quickfix_InsertDefFromDecl_headerSource_basic3();
void test_quickfix_InsertDefFromDecl_headerSource_namespace1();
void test_quickfix_InsertDefFromDecl_headerSource_namespace2();
void test_quickfix_InsertDefFromDecl_freeFunction();
void test_quickfix_InsertDefFromDecl_insideClass();
void test_quickfix_InsertDefFromDecl_notTriggeringWhenDefinitionExists();
void test_quickfix_InsertDefFromDecl_notTriggeringStatement();
void test_quickfix_InsertDefFromDecl_findRightImplementationFile();
void test_quickfix_InsertDefFromDecl_ignoreSurroundingGeneratedDeclarations();
void test_quickfix_InsertDefFromDecl_respectWsInOperatorNames1();
@@ -212,54 +194,18 @@ private slots:
void test_quickfix_MoveFuncDefToDecl_CtorWithInitialization();
void test_quickfix_MoveFuncDefToDecl_structWithAssignedVariable();
void test_quickfix_AssignToLocalVariable_freeFunction();
void test_quickfix_AssignToLocalVariable_memberFunction();
void test_quickfix_AssignToLocalVariable_staticMemberFunction();
void test_quickfix_AssignToLocalVariable_newExpression();
void test_quickfix_AssignToLocalVariable_templates();
void test_quickfix_AssignToLocalVariable_noInitializationList();
void test_quickfix_AssignToLocalVariable_noVoidFunction();
void test_quickfix_AssignToLocalVariable_noVoidMemberFunction();
void test_quickfix_AssignToLocalVariable_noVoidStaticMemberFunction();
void test_quickfix_AssignToLocalVariable_noFunctionInExpression();
void test_quickfix_AssignToLocalVariable_noFunctionInFunction();
void test_quickfix_AssignToLocalVariable_noReturnClass1();
void test_quickfix_AssignToLocalVariable_noReturnClass2();
void test_quickfix_AssignToLocalVariable_noReturnFunc1();
void test_quickfix_AssignToLocalVariable_noReturnFunc2();
void test_quickfix_AssignToLocalVariable_noSignatureMatch();
void test_quickfix_ExtractLiteralAsParameter_typeDeduction_data();
void test_quickfix_ExtractLiteralAsParameter_typeDeduction();
void test_quickfix_ExtractLiteralAsParameter_freeFunction();
void test_quickfix_ExtractLiteralAsParameter_freeFunction_separateFiles();
void test_quickfix_ExtractLiteralAsParameter_memberFunction();
void test_quickfix_ExtractLiteralAsParameter_memberFunction_separateFiles();
void test_quickfix_ExtractLiteralAsParameter_memberFunctionInline();
void test_quickfix_InsertVirtualMethods_onlyDecl();
void test_quickfix_InsertVirtualMethods_onlyDeclWithoutVirtual();
void test_quickfix_InsertVirtualMethods_Access();
void test_quickfix_InsertVirtualMethods_Superclass();
void test_quickfix_InsertVirtualMethods_SuperclassOverride();
void test_quickfix_InsertVirtualMethods_PureVirtualOnlyDecl();
void test_quickfix_InsertVirtualMethods_PureVirtualInside();
void test_quickfix_InsertVirtualMethods_inside();
void test_quickfix_InsertVirtualMethods_outside();
void test_quickfix_InsertVirtualMethods_data();
void test_quickfix_InsertVirtualMethods();
void test_quickfix_InsertVirtualMethods_implementationFile();
void test_quickfix_InsertVirtualMethods_notrigger_allImplemented();
void test_quickfix_InsertVirtualMethods_BaseClassInNamespace();
void test_quickfix_OptimizeForLoop_postcrement();
void test_quickfix_OptimizeForLoop_condition();
void test_quickfix_OptimizeForLoop_flipedCondition();
void test_quickfix_OptimizeForLoop_alterVariableName();
void test_quickfix_OptimizeForLoop_optimizeBoth();
void test_quickfix_OptimizeForLoop_emptyInitializer();
void test_quickfix_OptimizeForLoop_wrongInitializer();
void test_quickfix_OptimizeForLoop_noTriggerNumeric1();
void test_quickfix_OptimizeForLoop_noTriggerNumeric2();
void test_functionhelper_virtualFunctions();
void test_functionhelper_virtualFunctions_data();

View File

@@ -242,6 +242,24 @@ Link findMacroLink(const QByteArray &name, const Document::Ptr &doc)
return Link();
}
/// Considers also forward declared templates.
static bool isForwardClassDeclaration(Type *type)
{
if (!type)
return false;
if (type->isForwardClassDeclarationType()) {
return true;
} else if (Template *templ = type->asTemplateType()) {
if (Symbol *declaration = templ->declaration()) {
if (declaration->isForwardClassDeclaration())
return true;
}
}
return false;
}
inline LookupItem skipForwardDeclarations(const QList<LookupItem> &resolvedSymbols)
{
QList<LookupItem> candidates = resolvedSymbols;
@@ -249,11 +267,11 @@ inline LookupItem skipForwardDeclarations(const QList<LookupItem> &resolvedSymbo
LookupItem result = candidates.first();
const FullySpecifiedType ty = result.type().simplified();
if (ty->isForwardClassDeclarationType()) {
if (isForwardClassDeclaration(ty.type())) {
while (!candidates.isEmpty()) {
LookupItem r = candidates.takeFirst();
if (!r.type()->isForwardClassDeclarationType()) {
if (!isForwardClassDeclaration(r.type().type())) {
result = r;
break;
}
@@ -676,8 +694,15 @@ BaseTextEditorWidget::Link FollowSymbolUnderCursor::findLink(const QTextCursor &
if (def == lastVisibleSymbol)
def = 0; // jump to declaration then.
if (symbol->isForwardClassDeclaration())
if (symbol->isForwardClassDeclaration()) {
def = symbolFinder->findMatchingClassDeclaration(symbol, snapshot);
} else if (Template *templ = symbol->asTemplate()) {
if (Symbol *declaration = templ->declaration()) {
if (declaration->isForwardClassDeclaration())
def = symbolFinder->findMatchingClassDeclaration(declaration, snapshot);
}
}
}
link = m_widget->linkToSymbol(def ? def : symbol);

File diff suppressed because it is too large Load Diff

View File

@@ -774,6 +774,11 @@ public:
setDescription(QApplication::translate("CppTools::QuickFix",
"Move Declaration out of Condition"));
reset();
}
void reset()
{
condition = mk.Condition();
pattern = mk.IfStatement(condition);
}
@@ -826,6 +831,8 @@ void MoveDeclarationOutOfIf::match(const CppQuickFixInterface &interface,
result.append(op);
return;
}
op->reset();
}
}
}
@@ -841,7 +848,11 @@ public:
{
setDescription(QApplication::translate("CppTools::QuickFix",
"Move Declaration out of Condition"));
reset();
}
void reset()
{
condition = mk.Condition();
pattern = mk.WhileStatement(condition);
}
@@ -903,6 +914,8 @@ void MoveDeclarationOutOfWhile::match(const CppQuickFixInterface &interface,
result.append(op);
return;
}
op->reset();
}
}
}

View File

@@ -465,6 +465,8 @@ void TestCase::run()
} // anonymous namespace
Q_DECLARE_METATYPE(QList<TestDocumentPtr>)
void CppEditorPlugin::test_SwitchMethodDeclarationDefinition_data()
{
QTest::addColumn<QByteArray>("header");
@@ -870,6 +872,18 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_data()
"}\n"
);
QTest::newRow("skipForwardDeclarationBasic") << _(
"class $Foo {};\n"
"class Foo;\n"
"@Foo foo;\n"
);
QTest::newRow("skipForwardDeclarationTemplates") << _(
"template <class E> class $Container {};\n"
"template <class E> class Container;\n"
"@Container<int> container;\n"
);
QTest::newRow("using_QTCREATORBUG7903_globalNamespace") << _(
"namespace NS {\n"
"class Foo {};\n"
@@ -904,7 +918,6 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_data()
" @Foo foo;\n"
"}\n"
);
}
void CppEditorPlugin::test_FollowSymbolUnderCursor()
@@ -914,6 +927,35 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor()
test.run();
}
void CppEditorPlugin::test_FollowSymbolUnderCursor_multipleDocuments_data()
{
QTest::addColumn<QList<TestDocumentPtr> >("documents");
QTest::newRow("skipForwardDeclarationBasic") << (QList<TestDocumentPtr>()
<< TestDocument::create("class $Foo {};\n",
QLatin1String("defined.h"))
<< TestDocument::create("class Foo;\n"
"@Foo foo;\n",
QLatin1String("forwardDeclaredAndUsed.h"))
);
QTest::newRow("skipForwardDeclarationTemplates") << (QList<TestDocumentPtr>()
<< TestDocument::create("template <class E> class $Container {};\n",
QLatin1String("defined.h"))
<< TestDocument::create("template <class E> class Container;\n"
"@Container<int> container;\n",
QLatin1String("forwardDeclaredAndUsed.h"))
);
}
void CppEditorPlugin::test_FollowSymbolUnderCursor_multipleDocuments()
{
QFETCH(QList<TestDocumentPtr>, documents);
TestCase test(TestCase::FollowSymbolUnderCursorAction, documents);
test.run();
}
void CppEditorPlugin::test_FollowSymbolUnderCursor_QObject_connect_data()
{
#define TAG(str) secondQObjectParam ? str : str ", no 2nd QObject"

View File

@@ -85,6 +85,12 @@ static const char decorateOption[] = "--decorate";
namespace Git {
namespace Internal {
// Suppress git diff warnings about "LF will be replaced by CRLF..." on Windows.
static inline unsigned diffExecutionFlags()
{
return Utils::HostOsInfo::isWindowsHost() ? unsigned(VcsBase::VcsBasePlugin::SuppressStdErrInLogWindow) : 0u;
}
using VcsBase::VcsBasePlugin;
class GitDiffSwitcher : public QObject
@@ -391,6 +397,7 @@ void GitDiffHandler::collectFilesList(const QStringList &additionalArguments)
QStringList arguments;
arguments << QLatin1String("diff") << QLatin1String("--name-only") << additionalArguments;
command->addJob(arguments, m_timeout);
command->addFlags(diffExecutionFlags());
command->execute();
}
@@ -1186,6 +1193,7 @@ void GitClient::diff(const QString &workingDirectory,
command->addJob(arguments, timeout);
}
}
command->addFlags(diffExecutionFlags());
command->execute();
}
if (newEditor) {
@@ -1256,7 +1264,7 @@ void GitClient::diff(const QString &workingDirectory, const QString &fileName)
if (!fileName.isEmpty())
cmdArgs << QLatin1String("--") << fileName;
executeGit(workingDirectory, cmdArgs, vcsEditor);
executeGit(workingDirectory, cmdArgs, vcsEditor, false, diffExecutionFlags());
}
if (newEditor) {
GitDiffSwitcher *switcher = new GitDiffSwitcher(newEditor, this);
@@ -1315,7 +1323,7 @@ void GitClient::diffBranch(const QString &workingDirectory,
<< vcsEditor->configurationWidget()->arguments()
<< branchName;
executeGit(workingDirectory, cmdArgs, vcsEditor);
executeGit(workingDirectory, cmdArgs, vcsEditor, false, diffExecutionFlags());
}
if (newEditor) {
GitDiffSwitcher *switcher = new GitDiffSwitcher(newEditor, this);
@@ -1537,7 +1545,7 @@ void GitClient::blame(const QString &workingDirectory,
arguments << QLatin1String("--") << fileName;
if (!revision.isEmpty())
arguments << revision;
executeGit(workingDirectory, arguments, editor, false, false, lineNumber);
executeGit(workingDirectory, arguments, editor, false, 0, lineNumber);
}
bool GitClient::synchronousCheckout(const QString &workingDirectory,
@@ -1626,7 +1634,10 @@ void GitClient::reset(const QString &workingDirectory, const QString &argument,
if (!commit.isEmpty())
arguments << commit;
executeGit(workingDirectory, arguments, 0, true, argument == QLatin1String("--hard"));
unsigned flags = 0;
if (argument == QLatin1String("--hard"))
flags |= VcsBasePlugin::ExpectRepoChanges;
executeGit(workingDirectory, arguments, 0, true, flags);
}
void GitClient::addFile(const QString &workingDirectory, const QString &fileName)
@@ -2489,14 +2500,13 @@ VcsBase::Command *GitClient::executeGit(const QString &workingDirectory,
const QStringList &arguments,
VcsBase::VcsBaseEditorWidget* editor,
bool useOutputToWindow,
bool expectChanges,
unsigned additionalFlags,
int editorLineNumber)
{
outputWindow()->appendCommand(workingDirectory, settings()->stringValue(GitSettings::binaryPathKey), arguments);
VcsBase::Command *command = createCommand(workingDirectory, editor, useOutputToWindow, editorLineNumber);
command->addJob(arguments, settings()->intValue(GitSettings::timeoutKey));
if (expectChanges)
command->addFlags(VcsBasePlugin::ExpectRepoChanges);
command->addFlags(additionalFlags);
command->execute();
return command;
}
@@ -2626,7 +2636,8 @@ void GitClient::updateSubmodulesIfNeeded(const QString &workingDirectory, bool p
QStringList arguments;
arguments << QLatin1String("submodule") << QLatin1String("update");
VcsBase::Command *cmd = executeGit(workingDirectory, arguments, 0, true, true);
VcsBase::Command *cmd = executeGit(workingDirectory, arguments, 0, true,
VcsBasePlugin::ExpectRepoChanges);
connect(cmd, SIGNAL(finished(bool,int,QVariant)), this, SLOT(finishSubmoduleUpdate()));
}
@@ -3578,7 +3589,8 @@ void GitClient::stashPop(const QString &workingDirectory, const QString &stash)
arguments << QLatin1String("pop");
if (!stash.isEmpty())
arguments << stash;
VcsBase::Command *cmd = executeGit(workingDirectory, arguments, 0, true, true);
VcsBase::Command *cmd = executeGit(workingDirectory, arguments, 0, true,
VcsBasePlugin::ExpectRepoChanges);
new ConflictHandler(cmd, workingDirectory);
}

View File

@@ -374,7 +374,7 @@ private:
const QStringList &arguments,
VcsBase::VcsBaseEditorWidget* editor = 0,
bool useOutputToWindow = false,
bool expectChanges = false,
unsigned additionalFlags = 0,
int editorLineNumber = -1);
// Fully synchronous git execution (QProcess-based).

View File

@@ -75,6 +75,7 @@ IosDeployStep::~IosDeployStep() { }
void IosDeployStep::ctor()
{
m_toolHandler = 0;
m_transferStatus = NoTransfer;
m_device = ProjectExplorer::DeviceKitInformation::device(target()->kit());
const QString devName = m_device.isNull() ? IosDevice::name() : m_device->displayName();
@@ -103,23 +104,24 @@ void IosDeployStep::run(QFutureInterface<bool> &fi)
ProjectExplorer::Constants::TASK_CATEGORY_DEPLOYMENT);
m_futureInterface.reportResult(!iossimulator().isNull());
cleanup();
m_futureInterface.reportFinished();
emit finished();
return;
}
m_transferStatus = TransferInProgress;
IosToolHandler *toolHandler = new IosToolHandler(IosToolHandler::IosDeviceType, this);
QTC_CHECK(m_toolHandler == 0);
m_toolHandler = new IosToolHandler(IosToolHandler::IosDeviceType, this);
m_futureInterface.setProgressRange(0, 200);
m_futureInterface.setProgressValueAndText(0, QLatin1String("Transferring application"));
m_futureInterface.reportStarted();
connect(toolHandler, SIGNAL(isTransferringApp(Ios::IosToolHandler*,QString,QString,int,int,QString)),
connect(m_toolHandler, SIGNAL(isTransferringApp(Ios::IosToolHandler*,QString,QString,int,int,QString)),
SLOT(handleIsTransferringApp(Ios::IosToolHandler*,QString,QString,int,int,QString)));
connect(toolHandler, SIGNAL(didTransferApp(Ios::IosToolHandler*,QString,QString,Ios::IosToolHandler::OpStatus)),
connect(m_toolHandler, SIGNAL(didTransferApp(Ios::IosToolHandler*,QString,QString,Ios::IosToolHandler::OpStatus)),
SLOT(handleDidTransferApp(Ios::IosToolHandler*,QString,QString,Ios::IosToolHandler::OpStatus)));
connect(toolHandler, SIGNAL(finished(Ios::IosToolHandler*)),
connect(m_toolHandler, SIGNAL(finished(Ios::IosToolHandler*)),
SLOT(handleFinished(Ios::IosToolHandler*)));
connect(toolHandler, SIGNAL(errorMsg(Ios::IosToolHandler*,QString)),
connect(m_toolHandler, SIGNAL(errorMsg(Ios::IosToolHandler*,QString)),
SLOT(handleErrorMsg(Ios::IosToolHandler*,QString)));
toolHandler->requestTransferApp(appBundle(), deviceId());
m_toolHandler->requestTransferApp(appBundle(), deviceId());
}
void IosDeployStep::cancel()
@@ -179,7 +181,7 @@ void IosDeployStep::handleFinished(IosToolHandler *handler)
cleanup();
handler->deleteLater();
// move it when result is reported? (would need care to avoid problems with concurrent runs)
m_futureInterface.reportFinished();
emit finished();
}
void IosDeployStep::handleErrorMsg(IosToolHandler *handler, const QString &msg)

View File

@@ -85,7 +85,7 @@ IosDevice::IosDevice()
Constants::IOS_DEVICE_ID)
{
setDisplayName(IosDevice::name());
setDeviceState(DeviceStateUnknown);
setDeviceState(DeviceDisconnected);
}
IosDevice::IosDevice(const IosDevice &other)
@@ -99,7 +99,7 @@ IosDevice::IosDevice(const QString &uid)
Core::Id(Constants::IOS_DEVICE_ID).withSuffix(uid))
{
setDisplayName(IosDevice::name());
setDeviceState(DeviceStateUnknown);
setDeviceState(DeviceDisconnected);
}

View File

@@ -49,6 +49,7 @@ IosSimulator::IosSimulator(Core::Id id, Utils::FileName simulatorPath)
m_simulatorPath(simulatorPath)
{
setDisplayName(QCoreApplication::translate("Ios::Internal::IosSimulator", "iOS Simulator"));
setDeviceState(DeviceReadyToUse);
}
IosSimulator::IosSimulator()
@@ -65,6 +66,7 @@ IosSimulator::IosSimulator(const IosSimulator &other)
: IDevice(other)
{
setDisplayName(QCoreApplication::translate("Ios::Internal::IosSimulator", "iOS Simulator"));
setDeviceState(DeviceReadyToUse);
}

View File

@@ -250,8 +250,16 @@ Target *BuildConfiguration::target() const
Utils::Environment BuildConfiguration::baseEnvironment() const
{
Utils::Environment result;
if (useSystemEnvironment())
if (useSystemEnvironment()) {
#if 1
// workaround for QTBUG-35143
result = Utils::Environment::systemEnvironment();
result.unset(QLatin1String("QSG_RENDER_LOOP"));
#else
result = Utils::Environment::systemEnvironment();
#endif
}
target()->kit()->addToEnvironment(result);
return result;
}

View File

@@ -100,10 +100,11 @@ void KitChooser::populate()
m_chooser->setItemData(m_chooser->count() - 1, kitToolTip(kit), Qt::ToolTipRole);
}
}
m_chooser->setEnabled(m_chooser->count() > 1);
const int n = m_chooser->count();
const int index = Core::ICore::settings()->value(QLatin1String(lastKitKey)).toInt();
m_chooser->setCurrentIndex(qMin(index, m_chooser->count()));
m_chooser->setCurrentIndex(0 <= index && index < n ? index : -1);
m_chooser->setEnabled(n > 1);
}
Kit *KitChooser::currentKit() const

View File

@@ -69,11 +69,23 @@ Utils::Environment LocalEnvironmentAspect::baseEnvironment() const
if (BuildConfiguration *bc = runConfiguration()->target()->activeBuildConfiguration()) {
env = bc->environment();
} else { // Fallback for targets without buildconfigurations:
#if 1
// workaround for QTBUG-35143
env = Utils::Environment::systemEnvironment();
env.unset(QLatin1String("QSG_RENDER_LOOP"));
#else
env = Utils::Environment::systemEnvironment();
#endif
runConfiguration()->target()->kit()->addToEnvironment(env);
}
} else if (base == static_cast<int>(SystemEnvironmentBase)) {
#if 1
// workaround for QTBUG-35143
env = Utils::Environment::systemEnvironment();
env.unset(QLatin1String("QSG_RENDER_LOOP"));
#else
env = Utils::Environment::systemEnvironment();
#endif
}
if (const LocalApplicationRunConfiguration *rc = qobject_cast<const LocalApplicationRunConfiguration *>(runConfiguration()))

View File

@@ -59,21 +59,42 @@
#include <QAction>
#include <QItemDelegate>
#if QT_VERSION >= 0x050100
#include <QGuiApplication>
#endif
static QIcon createCenteredIcon(const QIcon &icon, const QIcon &overlay)
{
QPixmap targetPixmap;
targetPixmap = QPixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE);
qreal appDevicePixelRatio = 1.0;
#if QT_VERSION >= 0x050100
appDevicePixelRatio = qApp->devicePixelRatio();
#endif
int deviceSpaceIconSize = Core::Constants::TARGET_ICON_SIZE * appDevicePixelRatio;
targetPixmap = QPixmap(deviceSpaceIconSize, deviceSpaceIconSize);
#if QT_VERSION >= 0x050100
targetPixmap.setDevicePixelRatio(appDevicePixelRatio);
#endif
targetPixmap.fill(Qt::transparent);
QPainter painter(&targetPixmap);
QPainter painter(&targetPixmap); // painter in user space
QPixmap pixmap = icon.pixmap(Core::Constants::TARGET_ICON_SIZE);
painter.drawPixmap((Core::Constants::TARGET_ICON_SIZE - pixmap.width())/2,
(Core::Constants::TARGET_ICON_SIZE - pixmap.height())/2, pixmap);
QPixmap pixmap = icon.pixmap(Core::Constants::TARGET_ICON_SIZE); // already takes app devicePixelRatio into account
qreal pixmapDevicePixelRatio = 1.0;
#if QT_VERSION >= 0x050100
pixmapDevicePixelRatio = pixmap.devicePixelRatio();
#endif
painter.drawPixmap((Core::Constants::TARGET_ICON_SIZE - pixmap.width() / pixmapDevicePixelRatio) / 2,
(Core::Constants::TARGET_ICON_SIZE - pixmap.height() / pixmapDevicePixelRatio) / 2, pixmap);
if (!overlay.isNull()) {
pixmap = overlay.pixmap(Core::Constants::TARGET_ICON_SIZE);
painter.drawPixmap((Core::Constants::TARGET_ICON_SIZE - pixmap.width())/2,
(Core::Constants::TARGET_ICON_SIZE - pixmap.height())/2, pixmap);
pixmap = overlay.pixmap(Core::Constants::TARGET_ICON_SIZE); // already takes app devicePixelRatio into account
pixmapDevicePixelRatio = 1.0;
#if QT_VERSION >= 0x050100
pixmapDevicePixelRatio = pixmap.devicePixelRatio();
#endif
painter.drawPixmap((Core::Constants::TARGET_ICON_SIZE - pixmap.width() / pixmapDevicePixelRatio) / 2,
(Core::Constants::TARGET_ICON_SIZE - pixmap.height() / pixmapDevicePixelRatio) / 2, pixmap);
}
return QIcon(targetPixmap);
}

View File

@@ -89,8 +89,8 @@ QmakeBuildConfiguration *enableActiveQmakeBuildConfiguration(ProjectExplorer::Ta
void updateBoilerPlateCodeFiles(const AbstractMobileApp *app, const QString &proFile)
{
const QList<AbstractGeneratedFileInfo> updates =
app->fileUpdates(proFile);
const QList<AbstractGeneratedFileInfo> updates = app->fileUpdates(proFile);
const QString nativeProFile = QDir::toNativeSeparators(proFile);
if (!updates.empty()) {
const QString title = QmakeManager::tr("Update of Generated Files");
QStringList fileNames;
@@ -100,7 +100,7 @@ void updateBoilerPlateCodeFiles(const AbstractMobileApp *app, const QString &pro
QmakeManager::tr("In project<br><br>%1<br><br>The following files are either "
"outdated or have been modified:<br><br>%2<br><br>Do you want "
"Qt Creator to update the files? Any changes will be lost.")
.arg(proFile, fileNames.join(QLatin1String(", ")));
.arg(nativeProFile, fileNames.join(QLatin1String(", ")));
if (QMessageBox::question(0, title, message, QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
QString error;
if (!app->updateFiles(updates, error))

View File

@@ -204,10 +204,7 @@ void StatesEditorView::addState()
try {
if ((rootStateGroup().allStates().count() < 1) && //QtQuick import might be missing
(!model()->hasImport(Import::createLibraryImport("QtQuick", "1.0"), true)
&& !model()->hasImport(Import::createLibraryImport("QtQuick", "1.1"), true)
&& !model()->hasImport(Import::createLibraryImport("QtQuick", "2.0"), true)
&& !model()->hasImport(Import::createLibraryImport("QtQuick", "2.1"), true)))
(!model()->hasImport(Import::createLibraryImport("QtQuick", "1.0"), true, true)))
model()->changeImports(QList<Import>() << Import::createLibraryImport("QtQuick", "1.0"), QList<Import>());
ModelNode newState = rootStateGroup().addState(newStateName);
setCurrentState(newState);

View File

@@ -46,7 +46,7 @@ namespace Internal {
class QmlProfilerAction : public AnalyzerAction
{
public:
QmlProfilerAction() {}
explicit QmlProfilerAction(QObject *parent = 0) : AnalyzerAction(parent) { }
};
bool QmlProfilerPlugin::debugOutput = false;
@@ -65,7 +65,7 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS
"The QML Profiler can be used to find performance bottlenecks in "
"applications using QML.");
action = new QmlProfilerAction;
action = new QmlProfilerAction(this);
action->setId("QmlProfiler.Local");
action->setTool(tool);
action->setText(tr("QML Profiler"));
@@ -74,7 +74,7 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS
action->setMenuGroup(Constants::G_ANALYZER_TOOLS);
AnalyzerManager::addAction(action);
action = new QmlProfilerAction;
action = new QmlProfilerAction(this);
action->setId("QmlProfiler.Remote");
action->setTool(tool);
action->setText(tr("QML Profiler (External)"));

View File

@@ -58,8 +58,6 @@ public:
private:
QList<AbstractTimelineModel*> timelineModels;
};
} // namespace Internal

View File

@@ -51,7 +51,14 @@ QString QmlProjectEnvironmentAspect::baseEnvironmentDisplayName(int base) const
Utils::Environment QmlProjectManager::QmlProjectEnvironmentAspect::baseEnvironment() const
{
#if 1
// workaround for QTBUG-35143
Utils::Environment env = Utils::Environment::systemEnvironment();
env.unset(QLatin1String("QSG_RENDER_LOOP"));
return env;
#else
return Utils::Environment::systemEnvironment();
#endif
}
QmlProjectEnvironmentAspect::QmlProjectEnvironmentAspect(ProjectExplorer::RunConfiguration *rc) :

View File

@@ -104,6 +104,18 @@ void TodoOutputTreeView::resizeEvent(QResizeEvent *event)
setColumnWidth(Constants::OUTPUT_COLUMN_FILE, widthFile);
}
void TodoOutputTreeView::keyPressEvent(QKeyEvent *e)
{
if (!e->modifiers()
&& (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter)
&& currentIndex().isValid()) {
emit clicked(currentIndex());
e->accept();
return;
}
QTreeView::keyPressEvent(e);
}
void TodoOutputTreeView::todoColumnResized(int column, int oldSize, int newSize)
{
Q_UNUSED(oldSize);

View File

@@ -43,6 +43,7 @@ public:
~TodoOutputTreeView();
void resizeEvent(QResizeEvent *event);
void keyPressEvent(QKeyEvent *e);
private slots:
void todoColumnResized(int column, int oldSize, int newSize);

View File

@@ -85,7 +85,7 @@ public:
class ValgrindAction : public AnalyzerAction
{
public:
ValgrindAction() {}
explicit ValgrindAction(QObject *parent = 0) : AnalyzerAction(parent) { }
};
@@ -114,7 +114,7 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *)
"\"memcheck\" tool to find memory leaks.");
if (!Utils::HostOsInfo::isWindowsHost()) {
action = new ValgrindAction;
action = new ValgrindAction(this);
action->setId("Memcheck.Local");
action->setTool(m_memcheckTool);
action->setText(tr("Valgrind Memory Analyzer"));
@@ -124,7 +124,7 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *)
action->setEnabled(false);
AnalyzerManager::addAction(action);
action = new ValgrindAction;
action = new ValgrindAction(this);
action->setId("Callgrind.Local");
action->setTool(m_callgrindTool);
action->setText(tr("Valgrind Function Profiler"));
@@ -135,7 +135,7 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *)
AnalyzerManager::addAction(action);
}
action = new ValgrindAction;
action = new ValgrindAction(this);
action->setId("Memcheck.Remote");
action->setTool(m_memcheckTool);
action->setText(tr("Valgrind Memory Analyzer (Remote)"));
@@ -144,7 +144,7 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *)
action->setStartMode(StartRemote);
AnalyzerManager::addAction(action);
action = new ValgrindAction;
action = new ValgrindAction(this);
action->setId("Callgrind.Remote");
action->setTool(m_callgrindTool);
action->setText(tr("Valgrind Function Profiler (Remote)"));

View File

@@ -1091,6 +1091,7 @@ void AppOpSession::deviceCallbackReturned()
bool AppOpSession::runApp()
{
bool failure = (device == 0);
QString exe = appPathOnDevice();
ServiceSocket gdbFd = -1;
if (!failure && !startService(QLatin1String("com.apple.debugserver"), gdbFd))
gdbFd = -1;
@@ -1103,7 +1104,6 @@ bool AppOpSession::runApp()
if (!failure) failure = !sendGdbCommand(gdbFd, "QEnvironmentHexEncoded:"); // send the environment with a series of these commands...
if (!failure) failure = !sendGdbCommand(gdbFd, "QSetDisableASLR:1"); // avoid address randomization to debug
if (!failure) failure = !expectGdbOkReply(gdbFd);
QString exe = appPathOnDevice();
QStringList args = extraArgs;
QByteArray runCommand("A");
args.insert(0, exe);

View File

@@ -334,7 +334,6 @@ private slots:
void unfinished_function_like_macro_call();
void nasty_macro_expansion();
void glib_attribute();
void builtin__FILE__();
void blockSkipping();
void includes_1();
void dont_eagerly_expand();
@@ -784,23 +783,6 @@ void tst_Preprocessor::glib_attribute()
QCOMPARE(preprocessed, result____);
}
void tst_Preprocessor::builtin__FILE__()
{
Client *client = 0; // no client.
Environment env;
Preprocessor preprocess(client, &env);
QByteArray preprocessed = preprocess.run(
QLatin1String("some-file.c"),
QByteArray("const char *f = __FILE__\n"
));
const QByteArray result____ =
"# 1 \"some-file.c\"\n"
"const char *f = \"some-file.c\"\n";
QCOMPARE(preprocessed, result____);
}
void tst_Preprocessor::comparisons_data()
{
QTest::addColumn<QString>("infile");

View File

@@ -302,9 +302,9 @@ struct UnsubstitutedValue : Value
struct Type
{
Type() : qtVersion(0) {}
Type(const char *str) : type(str), qtVersion(0) {}
Type(const QByteArray &ba) : type(ba), qtVersion(0) {}
Type() : qtVersion(0), isPattern(false) {}
Type(const char *str) : type(str), qtVersion(0), isPattern(false) {}
Type(const QByteArray &ba) : type(ba), qtVersion(0), isPattern(false) {}
bool matches(const QByteArray &actualType0, const Context &context) const
{
@@ -329,10 +329,16 @@ struct Type
expectedType.replace(' ', "");
expectedType.replace("const", "");
expectedType.replace('@', context.nameSpace);
if (isPattern) {
QString actual = QString::fromLatin1(actualType);
QString expected = QString::fromLatin1(expectedType);
return QRegExp(expected).exactMatch(actual);
}
return actualType == expectedType;
}
QByteArray type;
int qtVersion;
bool isPattern;
};
struct Type4 : Type
@@ -345,6 +351,11 @@ struct Type5 : Type
Type5(const QByteArray &ba) : Type(ba) { qtVersion = 5; }
};
struct Pattern : Type
{
Pattern(const QByteArray &ba) : Type(ba) { isPattern = true; }
};
enum DebuggerEngine
{
DumpTestGdbEngine = 0x01,
@@ -2564,8 +2575,7 @@ void tst_Dumpers::dumper_data()
% Check("atts.attList.2.localname", "\"localPart3\"", "@QString")
% Check("atts.attList.2.qname", "\"name3\"", "@QString")
% Check("atts.attList.2.uri", "\"uri3\"", "@QString")
% Check("atts.attList.2.value", "\"value3\"", "@QString")
% Check("atts.d", "", "@QXmlAttributesPrivate");
% Check("atts.attList.2.value", "\"value3\"", "@QString");
QTest::newRow("StdArray")
<< Data("#include <array>\n"
@@ -2576,8 +2586,8 @@ void tst_Dumpers::dumper_data()
% CoreProfile()
% Cxx11Profile()
% MacLibCppProfile()
% Check("a", "<4 items>", "std::array<int, 4u>")
% Check("b", "<4 items>", "std::array<@QString, 4u>");
% Check("a", "<4 items>", Pattern("std::array<int, 4u.*>"))
% Check("b", "<4 items>", Pattern("std::array<@QString, 4u.*>"));
QTest::newRow("StdComplex")
<< Data("#include <complex>\n",

View File

@@ -34,8 +34,8 @@
:Behavior.Autocomplete common prefix_QCheckBox {container=':CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox' name='partiallyComplete' text='Autocomplete common prefix' type='QCheckBox' visible='1'}
:Behavior.completionTrigger_QComboBox {container=':CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox' name='completionTrigger' type='QComboBox' visible='1'}
:Breakpoints_Debugger::Internal::BreakTreeView {container=':DebugModeWidget.Breakpoints_QDockWidget' type='Debugger::Internal::BreakTreeView' unnamed='1' visible='1'}
:CMake Wizard.Cancel_QPushButton {text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}
:CMake Wizard.Finish_QPushButton {text~='(Finish|Done)' type='QPushButton' unnamed='1' visible='1' window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}
:CMake Wizard.Cancel_QPushButton {text='Cancel' type='QPushButton' visible='1' window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}
:CMake Wizard.Finish_QPushButton {text~='(Finish|Done)' type='QPushButton' visible='1' window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}
:CMake Wizard.Generator:_QLabel {text='Generator:' type='QLabel' unnamed='1' visible='1' window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}
:CMake Wizard.Next_QPushButton {name='__qt__passive_wizardbutton1' text~='(Next.*|Continue)' type='QPushButton' visible='1' window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}
:CMake Wizard.Run CMake_QPushButton {text='Run CMake' type='QPushButton' unnamed='1' visible='1' window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}
@@ -82,8 +82,8 @@
:FormEditorStack_qdesigner_internal::FormWindow {container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack' type='qdesigner_internal::FormWindow' unnamed='1' visible='1'}
:FormEditorStack_qdesigner_internal::PropertyLineEdit {container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack' type='qdesigner_internal::PropertyLineEdit' unnamed='1' visible='1'}
:Generator:_QComboBox {buddy=':CMake Wizard.Generator:_QLabel' type='QComboBox' unnamed='1' visible='1'}
:Git Repository Clone.Cancel_QPushButton {text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Git Repository Clone_VcsBase::Internal::CheckoutWizardDialog'}
:Git Repository Clone.Finish_QPushButton {text~='(Finish|Done)' type='QPushButton' unnamed='1' visible='1' window=':Git Repository Clone_VcsBase::Internal::CheckoutWizardDialog'}
:Git Repository Clone.Cancel_QPushButton {text='Cancel' type='QPushButton' visible='1' window=':Git Repository Clone_VcsBase::Internal::CheckoutWizardDialog'}
:Git Repository Clone.Finish_QPushButton {text~='(Finish|Done)' type='QPushButton' visible='1' window=':Git Repository Clone_VcsBase::Internal::CheckoutWizardDialog'}
:Git Repository Clone.Repository_QGroupBox {name='repositoryGroupBox' title='Repository' type='QGroupBox' visible='1' window=':Git Repository Clone_VcsBase::Internal::CheckoutWizardDialog'}
:Git Repository Clone.Result._QLabel {name='statusLabel' type='QLabel' visible='1' window=':Git Repository Clone_VcsBase::Internal::CheckoutWizardDialog'}
:Git Repository Clone.Working Copy_QGroupBox {name='localGroupBox' title='Working Copy' type='QGroupBox' visible='1' window=':Git Repository Clone_VcsBase::Internal::CheckoutWizardDialog'}

View File

@@ -92,9 +92,10 @@ def main():
if not waitFor("'dummy.cpp ' in str(mainWin.windowTitle) and ' - cplusplus-tools - ' in str(mainWin.windowTitle)", 5000):
test.warning("Opening dummy.cpp seems to have failed")
# Reset cursor to the start of the document
cursor = findObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget").textCursor()
cursor.movePosition(QTextCursor.Start)
cppwindow.setTextCursor(cursor)
if platform.system() == 'Darwin':
type(cppwindow, "<Home>")
else:
type(cppwindow, "<Ctrl+Home>")
type(cppwindow, "<Ctrl+F>")
clickButton(waitForObject(":*Qt Creator_Utils::IconButton"))