summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2013-10-24 08:56:29 +0200
committerEike Ziller <eike.ziller@digia.com>2013-10-24 08:56:29 +0200
commitc3119d1aa70a25ab7aeb39b0448c1d10c08aba6a (patch)
treec2204d569f87e28bc2e48a763650e1b99871f0ed /src
parent328daa9c5aa9a438a0187bb28e238396451f8548 (diff)
parentb889bb1608badceed0dc1175f3322ea8015f8924 (diff)
downloadqt-creator-c3119d1aa70a25ab7aeb39b0448c1d10c08aba6a.tar.gz
Merge remote-tracking branch 'origin/3.0'
Conflicts: qtcreator.pri src/plugins/qnx/qnxutils.cpp Change-Id: I019ad21fb4c128eb736c8ab2d09310757e3be037
Diffstat (limited to 'src')
-rw-r--r--src/app/main.cpp5
-rw-r--r--src/libs/3rdparty/cplusplus/TranslationUnit.cpp46
-rw-r--r--src/libs/3rdparty/cplusplus/TranslationUnit.h11
-rw-r--r--src/libs/cplusplus/FastPreprocessor.cpp6
-rw-r--r--src/libs/cplusplus/PreprocessorClient.h7
-rw-r--r--src/libs/extensionsystem/pluginmanager.cpp6
-rw-r--r--src/libs/qmljs/parser/qmljsengine_p.h13
-rw-r--r--src/libs/qmljs/parser/qmljsparser.cpp18
-rw-r--r--src/libs/qmljs/parser/qmljsparser_p.h2
-rw-r--r--src/libs/qmljs/qmljs-lib.pri3
-rw-r--r--src/libs/qmljs/qmljs.qbs1
-rw-r--r--src/libs/qmljs/qmljsbind.cpp10
-rw-r--r--src/libs/qmljs/qmljsbundle.cpp8
-rw-r--r--src/libs/qmljs/qmljsbundle.h8
-rw-r--r--src/libs/qmljs/qmljsconstants.h76
-rw-r--r--src/libs/qmljs/qmljsdocument.cpp73
-rw-r--r--src/libs/qmljs/qmljsdocument.h33
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp43
-rw-r--r--src/libs/qmljs/qmljsinterpreter.h19
-rw-r--r--src/libs/qmljs/qmljslink.cpp28
-rw-r--r--src/libs/qmljs/qmljsscopechain.cpp6
-rw-r--r--src/libs/qmljs/qmljsstaticanalysismessage.cpp30
-rw-r--r--src/libs/qmljs/qmljsstaticanalysismessage.h14
-rw-r--r--src/libs/qmljs/qmljsutils.cpp2
-rw-r--r--src/libs/qmljs/qmljsutils.h2
-rw-r--r--src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp2
-rw-r--r--src/libs/zeroconf/embeddedLib.cpp5
-rw-r--r--src/plugins/android/androidconfigurations.cpp47
-rw-r--r--src/plugins/android/androidconfigurations.h1
-rw-r--r--src/plugins/android/androiddeployqtstep.cpp3
-rw-r--r--src/plugins/android/androiddeploystep.cpp3
-rw-r--r--src/plugins/cmakeprojectmanager/cmakevalidator.cpp7
-rw-r--r--src/plugins/cmakeprojectmanager/cmakevalidator.h1
-rw-r--r--src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp13
-rw-r--r--src/plugins/coreplugin/externaltool.cpp3
-rw-r--r--src/plugins/coreplugin/outputwindow.cpp2
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager.cpp11
-rw-r--r--src/plugins/coreplugin/vcsmanager.cpp4
-rw-r--r--src/plugins/cppeditor/cppeditor.pro2
-rw-r--r--src/plugins/cppeditor/cppeditor.qbs2
-rw-r--r--src/plugins/cppeditor/cppfollowsymbolundercursor.cpp10
-rw-r--r--src/plugins/cppeditor/cpppreprocessordialog.ui2
-rw-r--r--src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp29
-rw-r--r--src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp55
-rw-r--r--src/plugins/cppeditor/cppvirtualfunctionproposalitem.h53
-rw-r--r--src/plugins/cpptools/cppmodelmanagerinterface.cpp5
-rw-r--r--src/plugins/cpptools/cppmodelmanagerinterface.h1
-rw-r--r--src/plugins/cpptools/cpppreprocessor.cpp1
-rw-r--r--src/plugins/cpptools/cppsnapshotupdater.cpp13
-rw-r--r--src/plugins/debugger/debuggerengine.cpp3
-rw-r--r--src/plugins/debugger/debuggerkitconfigwidget.cpp24
-rw-r--r--src/plugins/debugger/debuggerkitinformation.cpp115
-rw-r--r--src/plugins/debugger/debuggerkitinformation.h6
-rw-r--r--src/plugins/debugger/debuggerplugin.h3
-rw-r--r--src/plugins/debugger/debuggerprotocol.cpp7
-rw-r--r--src/plugins/debugger/debuggerprotocol.h3
-rw-r--r--src/plugins/debugger/debuggerrunner.cpp8
-rw-r--r--src/plugins/debugger/gdb/coregdbadapter.cpp3
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp17
-rw-r--r--src/plugins/debugger/gdb/gdbplainengine.cpp2
-rw-r--r--src/plugins/debugger/gdb/remotegdbserveradapter.cpp3
-rw-r--r--src/plugins/debugger/qml/qmladapter.cpp4
-rw-r--r--src/plugins/debugger/watchdata.cpp28
-rw-r--r--src/plugins/fakevim/fakevimhandler.cpp38
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp24
-rw-r--r--src/plugins/genericprojectmanager/genericproject.h2
-rw-r--r--src/plugins/genericprojectmanager/genericprojectwizard.cpp10
-rw-r--r--src/plugins/git/gitclient.cpp14
-rw-r--r--src/plugins/git/stashdialog.cpp2
-rw-r--r--src/plugins/ios/iosconfigurations.cpp3
-rw-r--r--src/plugins/ios/iosruncontrol.cpp2
-rw-r--r--src/plugins/projectexplorer/applicationlauncher.cpp2
-rw-r--r--src/plugins/projectexplorer/localapplicationruncontrol.cpp12
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp10
-rw-r--r--src/plugins/projectexplorer/projectfilewizardextension.cpp3
-rw-r--r--src/plugins/projectexplorer/runsettingspropertiespage.cpp13
-rw-r--r--src/plugins/projectexplorer/targetsettingspanel.cpp6
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp8
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp96
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h91
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp10
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp169
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h48
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp21
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp20
-rw-r--r--src/plugins/qmljseditor/qmlexpressionundercursor.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljseditor.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljsfindreferences.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljshoverhandler.cpp10
-rw-r--r--src/plugins/qmljseditor/qmljssemantichighlighter.cpp6
-rw-r--r--src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljswrapinloader.cpp7
-rw-r--r--src/plugins/qmljstools/qmljsbundleprovider.cpp36
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp32
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.h2
-rw-r--r--src/plugins/qmljstools/qmljsplugindumper.cpp4
-rw-r--r--src/plugins/qmljstools/qmljsrefactoringchanges.cpp2
-rw-r--r--src/plugins/qnx/blackberryconfiguration.cpp4
-rw-r--r--src/plugins/qnx/blackberryinstallwizardpages.cpp4
-rw-r--r--src/plugins/qnx/cascadesimport/importlogconverter.cpp4
-rw-r--r--src/plugins/qnx/qnxanalyzesupport.cpp2
-rw-r--r--src/plugins/qnx/qnxdebugsupport.cpp2
-rw-r--r--src/plugins/qnx/qnxdeviceconfiguration.cpp64
-rw-r--r--src/plugins/qnx/qnxdeviceconfiguration.h9
-rw-r--r--src/plugins/qnx/qnxdevicetester.cpp31
-rw-r--r--src/plugins/qnx/qnxdevicetester.h2
-rw-r--r--src/plugins/qnx/qnxruncontrol.cpp7
-rw-r--r--src/plugins/qnx/qnxruncontrol.h3
-rw-r--r--src/plugins/qnx/qnxutils.cpp8
-rw-r--r--src/plugins/qt4projectmanager/addlibrarywizard.cpp1
-rw-r--r--src/plugins/qt4projectmanager/addlibrarywizard.h3
-rw-r--r--src/plugins/qt4projectmanager/librarydetailscontroller.cpp146
-rw-r--r--src/plugins/qt4projectmanager/wizards/guiappwizard.cpp2
-rw-r--r--src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp2
-rw-r--r--src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp3
-rw-r--r--src/plugins/qtsupport/qtversionmanager.cpp1
-rw-r--r--src/plugins/remotelinux/linuxdevicetester.cpp14
-rw-r--r--src/plugins/remotelinux/remotelinuxanalyzesupport.cpp2
-rw-r--r--src/plugins/remotelinux/remotelinuxdebugsupport.cpp2
-rw-r--r--src/plugins/valgrind/callgrindengine.cpp2
-rw-r--r--src/plugins/valgrind/memcheckengine.cpp2
-rw-r--r--src/plugins/valgrind/valgrindengine.cpp8
-rw-r--r--src/plugins/vcsbase/vcsbaseoutputwindow.cpp6
-rw-r--r--src/tools/qml2puppet/qml2puppet/qml2puppet.pro4
130 files changed, 1390 insertions, 642 deletions
diff --git a/src/app/main.cpp b/src/app/main.cpp
index 6393458d31..87d988313f 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -313,11 +313,6 @@ int main(int argc, char **argv)
#if QT_VERSION >= 0x050100
app.setAttribute(Qt::AA_UseHighDpiPixmaps);
- if (Utils::HostOsInfo::isWindowsHost() || Utils::HostOsInfo::isMacHost()) {
- // Prevent native windows from being created for the sibling widgets of the welcome screen.
- // Causes flicker on Linux, though.
- app.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
- }
#endif
// Manually determine -settingspath command line option
diff --git a/src/libs/3rdparty/cplusplus/TranslationUnit.cpp b/src/libs/3rdparty/cplusplus/TranslationUnit.cpp
index 53725dc1a0..040ddc55a4 100644
--- a/src/libs/3rdparty/cplusplus/TranslationUnit.cpp
+++ b/src/libs/3rdparty/cplusplus/TranslationUnit.cpp
@@ -40,6 +40,8 @@
using namespace CPlusPlus;
+const Token TranslationUnit::nullToken;
+
TranslationUnit::TranslationUnit(Control *control, const StringLiteral *fileId)
: _control(control),
_fileId(fileId),
@@ -58,9 +60,7 @@ TranslationUnit::TranslationUnit(Control *control, const StringLiteral *fileId)
TranslationUnit::~TranslationUnit()
{
(void) _control->switchTranslationUnit(_previousTranslationUnit);
- delete _tokens;
- delete _comments;
- delete _pool;
+ release();
}
Control *TranslationUnit::control() const
@@ -95,7 +95,7 @@ const char *TranslationUnit::spell(unsigned index) const
if (! index)
return 0;
- return _tokens->at(index).spell();
+ return tokenAt(index).spell();
}
unsigned TranslationUnit::commentCount() const
@@ -105,19 +105,19 @@ const Token &TranslationUnit::commentAt(unsigned index) const
{ return _comments->at(index); }
const Identifier *TranslationUnit::identifier(unsigned index) const
-{ return _tokens->at(index).identifier; }
+{ return tokenAt(index).identifier; }
const Literal *TranslationUnit::literal(unsigned index) const
-{ return _tokens->at(index).literal; }
+{ return tokenAt(index).literal; }
const StringLiteral *TranslationUnit::stringLiteral(unsigned index) const
-{ return _tokens->at(index).string; }
+{ return tokenAt(index).string; }
const NumericLiteral *TranslationUnit::numericLiteral(unsigned index) const
-{ return _tokens->at(index).number; }
+{ return tokenAt(index).number; }
unsigned TranslationUnit::matchingBrace(unsigned index) const
-{ return _tokens->at(index).close_brace; }
+{ return tokenAt(index).close_brace; }
MemoryPool *TranslationUnit::memoryPool() const
{ return _pool; }
@@ -143,7 +143,7 @@ void TranslationUnit::tokenize()
lex.setScanCommentTokens(true);
std::stack<unsigned> braces;
- _tokens->push_back(Token()); // the first token needs to be invalid!
+ _tokens->push_back(nullToken); // the first token needs to be invalid!
pushLineOffset(0);
pushPreprocessorLine(0, 1, fileId());
@@ -250,7 +250,8 @@ void TranslationUnit::tokenize()
} else if (tk.f.kind == T_RBRACE && ! braces.empty()) {
const unsigned open_brace_index = braces.top();
braces.pop();
- (*_tokens)[open_brace_index].close_brace = unsigned(_tokens->size());
+ if (open_brace_index < tokenCount())
+ (*_tokens)[open_brace_index].close_brace = unsigned(_tokens->size());
} else if (tk.isComment()) {
_comments->push_back(tk);
continue; // comments are not in the regular token stream
@@ -507,13 +508,15 @@ void TranslationUnit::fatal(unsigned index, const char *format, ...)
unsigned TranslationUnit::findPreviousLineOffset(unsigned tokenIndex) const
{
- unsigned lineOffset = _lineOffsets[findLineNumber(_tokens->at(tokenIndex).offset)];
+ unsigned lineOffset = _lineOffsets[findLineNumber(tokenAt(tokenIndex).offset)];
return lineOffset;
}
bool TranslationUnit::maybeSplitGreaterGreaterToken(unsigned tokenIndex)
{
- Token &tok = _tokens->at(tokenIndex);
+ if (tokenIndex >= tokenCount())
+ return false;
+ Token &tok = (*_tokens)[tokenIndex];
if (tok.kind() != T_GREATER_GREATER)
return false;
@@ -538,9 +541,17 @@ bool TranslationUnit::maybeSplitGreaterGreaterToken(unsigned tokenIndex)
return true;
}
+void TranslationUnit::releaseTokensAndComments()
+{
+ delete _tokens;
+ _tokens = 0;
+ delete _comments;
+ _comments = 0;
+}
+
void TranslationUnit::showErrorLine(unsigned index, unsigned column, FILE *out)
{
- unsigned lineOffset = _lineOffsets[findLineNumber(_tokens->at(index).offset)];
+ unsigned lineOffset = _lineOffsets[findLineNumber(tokenAt(index).offset)];
for (const char *cp = _firstSourceChar + lineOffset + 1; *cp && *cp != '\n'; ++cp) {
fputc(*cp, out);
}
@@ -567,10 +578,5 @@ void TranslationUnit::resetAST()
void TranslationUnit::release()
{
resetAST();
- delete _tokens;
- _tokens = 0;
- delete _comments;
- _comments = 0;
+ releaseTokensAndComments();
}
-
-
diff --git a/src/libs/3rdparty/cplusplus/TranslationUnit.h b/src/libs/3rdparty/cplusplus/TranslationUnit.h
index 885820732e..81df75f2aa 100644
--- a/src/libs/3rdparty/cplusplus/TranslationUnit.h
+++ b/src/libs/3rdparty/cplusplus/TranslationUnit.h
@@ -63,9 +63,11 @@ public:
void setSource(const char *source, unsigned size);
- unsigned tokenCount() const { return unsigned(_tokens->size()); }
- const Token &tokenAt(unsigned index) const { return _tokens->at(index); }
- int tokenKind(unsigned index) const { return _tokens->at(index).f.kind; }
+ unsigned tokenCount() const { return _tokens ? unsigned(_tokens->size()) : unsigned(0); }
+ const Token &tokenAt(unsigned index) const
+ { return _tokens && index < tokenCount() ? (*_tokens)[index] : nullToken; }
+
+ int tokenKind(unsigned index) const { return tokenAt(index).f.kind; }
const char *spell(unsigned index) const;
unsigned commentCount() const;
@@ -167,11 +169,14 @@ private:
{ return offset < other.offset; }
};
+ void releaseTokensAndComments();
unsigned findLineNumber(unsigned offset) const;
unsigned findColumnNumber(unsigned offset, unsigned lineNumber) const;
PPLine findPreprocessorLine(unsigned offset) const;
void showErrorLine(unsigned index, unsigned column, FILE *out);
+ static const Token nullToken;
+
Control *_control;
const StringLiteral *_fileId;
const char *_firstSourceChar;
diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp
index 45f1d24d37..66df01c348 100644
--- a/src/libs/cplusplus/FastPreprocessor.cpp
+++ b/src/libs/cplusplus/FastPreprocessor.cpp
@@ -63,7 +63,11 @@ QByteArray FastPreprocessor::run(Document::Ptr newDoc, const QByteArray &source)
if (Document::Ptr doc = _snapshot.document(fileName)) {
_merged.insert(fileName);
- mergeEnvironment(Preprocessor::configurationFileName);
+ for (Snapshot::const_iterator i = _snapshot.begin(), ei = _snapshot.end(); i != ei; ++i) {
+ if (isInjectedFile(i.key()))
+ mergeEnvironment(i.key());
+ }
+
foreach (const Document::Include &i, doc->resolvedIncludes())
mergeEnvironment(i.resolvedFileName());
}
diff --git a/src/libs/cplusplus/PreprocessorClient.h b/src/libs/cplusplus/PreprocessorClient.h
index 9b0ad80d19..217337a112 100644
--- a/src/libs/cplusplus/PreprocessorClient.h
+++ b/src/libs/cplusplus/PreprocessorClient.h
@@ -32,11 +32,11 @@
#include <cplusplus/CPlusPlusForwardDeclarations.h>
+#include <QString>
#include <QVector>
QT_BEGIN_NAMESPACE
class QByteArray;
-class QString;
QT_END_NAMESPACE
namespace CPlusPlus {
@@ -99,6 +99,11 @@ public:
virtual void stopSkippingBlocks(unsigned offset) = 0;
virtual void sourceNeeded(unsigned line, const QString &fileName, IncludeType mode) = 0;
+
+ static inline bool isInjectedFile(const QString &fileName)
+ {
+ return fileName.startsWith(QLatin1Char('<')) && fileName.endsWith(QLatin1Char('>'));
+ }
};
} // namespace CPlusPlus
diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp
index 2de78a7f13..917642e43c 100644
--- a/src/libs/extensionsystem/pluginmanager.cpp
+++ b/src/libs/extensionsystem/pluginmanager.cpp
@@ -1079,11 +1079,13 @@ bool PluginManagerPrivate::loadQueue(PluginSpec *spec, QList<PluginSpec *> &queu
// check for circular dependencies
if (circularityCheckQueue.contains(spec)) {
spec->d->hasError = true;
- spec->d->errorString = PluginManager::tr("Circular dependency detected:\n");
+ spec->d->errorString = PluginManager::tr("Circular dependency detected:");
+ spec->d->errorString += QLatin1Char('\n');
int index = circularityCheckQueue.indexOf(spec);
for (int i = index; i < circularityCheckQueue.size(); ++i) {
- spec->d->errorString.append(PluginManager::tr("%1(%2) depends on\n")
+ spec->d->errorString.append(PluginManager::tr("%1(%2) depends on")
.arg(circularityCheckQueue.at(i)->name()).arg(circularityCheckQueue.at(i)->version()));
+ spec->d->errorString += QLatin1Char('\n');
}
spec->d->errorString.append(PluginManager::tr("%1(%2)").arg(spec->name()).arg(spec->version()));
return false;
diff --git a/src/libs/qmljs/parser/qmljsengine_p.h b/src/libs/qmljs/parser/qmljsengine_p.h
index 5b1fe269f0..b43b1be239 100644
--- a/src/libs/qmljs/parser/qmljsengine_p.h
+++ b/src/libs/qmljs/parser/qmljsengine_p.h
@@ -44,6 +44,7 @@
#include "qmljsglobal_p.h"
#include "qmljsastfwd_p.h"
#include "qmljsmemorypool_p.h"
+#include <qmljs/qmljsconstants.h>
#include <QString>
#include <QSet>
@@ -59,21 +60,19 @@ class MemoryPool;
class QML_PARSER_EXPORT DiagnosticMessage
{
public:
- enum Kind { Warning, Error };
-
DiagnosticMessage()
- : kind(Error) {}
+ : kind(Severity::Error) {}
- DiagnosticMessage(Kind kind, const AST::SourceLocation &loc, const QString &message)
+ DiagnosticMessage(Severity::Enum kind, const AST::SourceLocation &loc, const QString &message)
: kind(kind), loc(loc), message(message) {}
bool isWarning() const
- { return kind == Warning; }
+ { return kind == Severity::Warning; }
bool isError() const
- { return kind == Error; }
+ { return kind == Severity::Error; }
- Kind kind;
+ Severity::Enum kind;
AST::SourceLocation loc;
QString message;
};
diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp
index 5b95f16b25..ecf1895480 100644
--- a/src/libs/qmljs/parser/qmljsparser.cpp
+++ b/src/libs/qmljs/parser/qmljsparser.cpp
@@ -289,7 +289,7 @@ case 20: {
if (node) {
node->importToken = loc(1);
} else {
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, loc(1),
QLatin1String("Expected a qualified name id or a string literal")));
return false; // ### remove me
@@ -583,7 +583,7 @@ case 78: {
case 79: {
bool rx = lexer->scanRegExp(Lexer::NoPrefix);
if (!rx) {
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, location(lexer), lexer->errorMessage()));
return false; // ### remove me
}
@@ -599,7 +599,7 @@ case 79: {
case 80: {
bool rx = lexer->scanRegExp(Lexer::EqualPrefix);
if (!rx) {
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage()));
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, location(lexer), lexer->errorMessage()));
return false;
}
@@ -680,7 +680,7 @@ case 88: {
case 89: {
if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) {
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, mem->lbracketToken,
+ diagnostic_messages.append(DiagnosticMessage(Severity::Warning, mem->lbracketToken,
QLatin1String("Ignored annotation")));
sym(1).Expression = mem->base;
@@ -691,7 +691,7 @@ case 89: {
} else {
sym(1).UiQualifiedId = 0;
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1),
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, loc(1),
QLatin1String("Expected a qualified name id")));
return false; // ### recover
@@ -1747,7 +1747,7 @@ case 347: {
msg = qApp->translate("QmlParser", "Syntax error");
else
msg = qApp->translate("QmlParser", "Unexpected token `%1'").arg(QLatin1String(spell[token]));
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg));
action = errorState;
goto _Lcheck_token;
@@ -1775,7 +1775,7 @@ case 347: {
int a = t_action(errorState, *tk);
if (a > 0 && t_action(a, yytoken)) {
const QString msg = qApp->translate("QmlParser", "Expected token `%1'").arg(QLatin1String(spell[*tk]));
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg));
yytoken = *tk;
yylval = 0;
@@ -1799,7 +1799,7 @@ case 347: {
int a = t_action(errorState, tk);
if (a > 0 && t_action(a, yytoken)) {
const QString msg = qApp->translate("QmlParser", "Expected token `%1'").arg(QLatin1String(spell[tk]));
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg));
yytoken = tk;
yylval = 0;
@@ -1812,7 +1812,7 @@ case 347: {
}
const QString msg = qApp->translate("QmlParser", "Syntax error");
- diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg));
+ diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg));
}
return false;
diff --git a/src/libs/qmljs/parser/qmljsparser_p.h b/src/libs/qmljs/parser/qmljsparser_p.h
index eafea8f405..9b41ce3412 100644
--- a/src/libs/qmljs/parser/qmljsparser_p.h
+++ b/src/libs/qmljs/parser/qmljsparser_p.h
@@ -162,7 +162,7 @@ public:
inline DiagnosticMessage diagnosticMessage() const
{
foreach (const DiagnosticMessage &d, diagnostic_messages) {
- if (d.kind != DiagnosticMessage::Warning)
+ if (d.kind != Severity::Warning)
return d;
}
diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri
index 1ea154d3ad..d4e83127da 100644
--- a/src/libs/qmljs/qmljs-lib.pri
+++ b/src/libs/qmljs/qmljs-lib.pri
@@ -38,7 +38,8 @@ HEADERS += \
$$PWD/iscriptevaluator.h \
$$PWD/qmljssimplereader.h \
$$PWD/persistenttrie.h \
- $$PWD/qmljsqrcparser.h
+ $$PWD/qmljsqrcparser.h \
+ $$PWD/qmljsconstants.h
SOURCES += \
$$PWD/qmljsbind.cpp \
diff --git a/src/libs/qmljs/qmljs.qbs b/src/libs/qmljs/qmljs.qbs
index ae5334c4bb..c79197475f 100644
--- a/src/libs/qmljs/qmljs.qbs
+++ b/src/libs/qmljs/qmljs.qbs
@@ -28,6 +28,7 @@ QtcLibrary {
"qmljscheck.cpp", "qmljscheck.h",
"qmljscodeformatter.cpp", "qmljscodeformatter.h",
"qmljscompletioncontextfinder.cpp", "qmljscompletioncontextfinder.h",
+ "qmljsconstants.h",
"qmljscontext.cpp", "qmljscontext.h",
"qmljsdelta.cpp", "qmljsdelta.h",
"qmljsdocument.cpp", "qmljsdocument.h",
diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index fd7c7c68cb..65804d72a0 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -204,17 +204,17 @@ bool Bind::visit(UiImport *ast)
const QString importId = ast->importId.toString();
ImportInfo import = ImportInfo::moduleImport(toString(ast->importUri), version,
importId, ast);
- if (_doc->language() == Document::QmlLanguage) {
+ if (_doc->language() == Language::Qml) {
const QString importStr = import.name() + importId;
QmlLanguageBundles langBundles = ModelManagerInterface::instance()->extendedBundles();
- QmlBundle qq1 = langBundles.bundleForLanguage(Document::QmlQtQuick1Language);
- QmlBundle qq2 = langBundles.bundleForLanguage(Document::QmlQtQuick2Language);
+ QmlBundle qq1 = langBundles.bundleForLanguage(Language::QmlQtQuick1);
+ QmlBundle qq2 = langBundles.bundleForLanguage(Language::QmlQtQuick2);
bool isQQ1 = qq1.supportedImports().contains(importStr);
bool isQQ2 = qq2.supportedImports().contains(importStr);
if (isQQ1 && ! isQQ2)
- _doc->setLanguage(Document::QmlQtQuick1Language);
+ _doc->setLanguage(Language::QmlQtQuick1);
if (isQQ2 && ! isQQ1)
- _doc->setLanguage(Document::QmlQtQuick2Language);
+ _doc->setLanguage(Language::QmlQtQuick2);
}
_imports += import;
} else if (!ast->fileName.isEmpty()) {
diff --git a/src/libs/qmljs/qmljsbundle.cpp b/src/libs/qmljs/qmljsbundle.cpp
index 8b2ff587b4..198808a9f2 100644
--- a/src/libs/qmljs/qmljsbundle.cpp
+++ b/src/libs/qmljs/qmljsbundle.cpp
@@ -288,14 +288,14 @@ bool QmlBundle::readFrom(QString path, QStringList *errors)
return errs.isEmpty();
}
-QmlBundle QmlLanguageBundles::bundleForLanguage(Document::Language l) const
+QmlBundle QmlLanguageBundles::bundleForLanguage(Language::Enum l) const
{
if (m_bundles.contains(l))
return m_bundles.value(l);
return QmlBundle();
}
-void QmlLanguageBundles::mergeBundleForLanguage(Document::Language l, const QmlBundle &bundle)
+void QmlLanguageBundles::mergeBundleForLanguage(Language::Enum l, const QmlBundle &bundle)
{
if (bundle.isEmpty())
return;
@@ -305,14 +305,14 @@ void QmlLanguageBundles::mergeBundleForLanguage(Document::Language l, const QmlB
m_bundles.insert(l,bundle);
}
-QList<Document::Language> QmlLanguageBundles::languages() const
+QList<Language::Enum> QmlLanguageBundles::languages() const
{
return m_bundles.keys();
}
void QmlLanguageBundles::mergeLanguageBundles(const QmlLanguageBundles &o)
{
- foreach (Document::Language l, o.languages())
+ foreach (Language::Enum l, o.languages())
mergeBundleForLanguage(l, o.bundleForLanguage(l));
}
diff --git a/src/libs/qmljs/qmljsbundle.h b/src/libs/qmljs/qmljsbundle.h
index 63acca2da5..3357ee5a0c 100644
--- a/src/libs/qmljs/qmljsbundle.h
+++ b/src/libs/qmljs/qmljsbundle.h
@@ -102,12 +102,12 @@ private:
class QMLJS_EXPORT QmlLanguageBundles
{
public:
- QmlBundle bundleForLanguage(Document::Language l) const;
- void mergeBundleForLanguage(Document::Language l, const QmlBundle &bundle);
- QList<Document::Language> languages() const;
+ QmlBundle bundleForLanguage(Language::Enum l) const;
+ void mergeBundleForLanguage(Language::Enum l, const QmlBundle &bundle);
+ QList<Language::Enum> languages() const;
void mergeLanguageBundles(const QmlLanguageBundles &);
private:
- QHash<Document::Language,QmlBundle> m_bundles;
+ QHash<Language::Enum,QmlBundle> m_bundles;
};
} // namespace QmlJS
diff --git a/src/libs/qmljs/qmljsconstants.h b/src/libs/qmljs/qmljsconstants.h
new file mode 100644
index 0000000000..fcb117050f
--- /dev/null
+++ b/src/libs/qmljs/qmljsconstants.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#ifndef QMLJSCONSTANTS_H
+#define QMLJSCONSTANTS_H
+
+namespace QmlJS {
+
+namespace ImportType {
+enum Enum {
+ Invalid,
+ ImplicitDirectory,
+ Library,
+ File,
+ Directory,
+ QrcFile,
+ QrcDirectory,
+ ImplicitQrcDirectory,
+ UnknownFile // refers a file/directory that wasn't found
+};
+}
+
+namespace Severity {
+enum Enum
+{
+ Hint, // cosmetic or convention
+ MaybeWarning, // possibly a warning, insufficient information
+ Warning, // could cause unintended behavior
+ MaybeError, // possibly an error, insufficient information
+ Error // definitely an error
+};
+}
+
+namespace Language {
+enum Enum
+{
+ Unknown = 0,
+ JavaScript = 1,
+ Json = 2,
+ Qml = 3,
+ QmlQtQuick1 = 4,
+ QmlQtQuick2 = 5,
+ QmlQbs = 6,
+ QmlProject = 7,
+ QmlTypeInfo = 8
+};
+}
+
+} // namespace QmlJS
+#endif // QMLJSCONSTANTS_H
diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp
index 942882ef1a..fe169f795c 100644
--- a/src/libs/qmljs/qmljsdocument.cpp
+++ b/src/libs/qmljs/qmljsdocument.cpp
@@ -29,6 +29,7 @@
#include "qmljsdocument.h"
#include "qmljsbind.h"
+#include "qmljsconstants.h"
#include <qmljs/parser/qmljslexer_p.h>
#include <qmljs/parser/qmljsparser_p.h>
@@ -81,56 +82,56 @@ using namespace QmlJS::AST;
*/
-bool Document::isQmlLikeLanguage(Document::Language language)
+bool Document::isQmlLikeLanguage(Language::Enum language)
{
switch (language) {
- case QmlLanguage:
- case QmlQtQuick1Language:
- case QmlQtQuick2Language:
- case QmlQbsLanguage:
- case QmlProjectLanguage:
- case QmlTypeInfoLanguage:
+ case Language::Qml:
+ case Language::QmlQtQuick1:
+ case Language::QmlQtQuick2:
+ case Language::QmlQbs:
+ case Language::QmlProject:
+ case Language::QmlTypeInfo:
return true;
default:
return false;
}
}
-bool Document::isFullySupportedLanguage(Document::Language language)
+bool Document::isFullySupportedLanguage(Language::Enum language)
{
switch (language) {
- case JavaScriptLanguage:
- case JsonLanguage:
- case QmlLanguage:
- case QmlQtQuick1Language:
- case QmlQtQuick2Language:
+ case Language::JavaScript:
+ case Language::Json:
+ case Language::Qml:
+ case Language::QmlQtQuick1:
+ case Language::QmlQtQuick2:
return true;
- case UnknownLanguage:
- case QmlQbsLanguage:
- case QmlProjectLanguage:
- case QmlTypeInfoLanguage:
+ case Language::Unknown:
+ case Language::QmlQbs:
+ case Language::QmlProject:
+ case Language::QmlTypeInfo:
break;
}
return false;
}
-bool Document::isQmlLikeOrJsLanguage(Document::Language language)
+bool Document::isQmlLikeOrJsLanguage(Language::Enum language)
{
switch (language) {
- case QmlLanguage:
- case QmlQtQuick1Language:
- case QmlQtQuick2Language:
- case QmlQbsLanguage:
- case QmlProjectLanguage:
- case QmlTypeInfoLanguage:
- case JavaScriptLanguage:
+ case Language::Qml:
+ case Language::QmlQtQuick1:
+ case Language::QmlQtQuick2:
+ case Language::QmlQbs:
+ case Language::QmlProject:
+ case Language::QmlTypeInfo:
+ case Language::JavaScript:
return true;
default:
return false;
}
}
-Document::Document(const QString &fileName, Language language)
+Document::Document(const QString &fileName, Language::Enum language)
: _engine(0)
, _ast(0)
, _bind(0)
@@ -163,24 +164,24 @@ Document::~Document()
delete _engine;
}
-Document::MutablePtr Document::create(const QString &fileName, Language language)
+Document::MutablePtr Document::create(const QString &fileName, Language::Enum language)
{
Document::MutablePtr doc(new Document(fileName, language));
doc->_ptr = doc;
return doc;
}
-Document::Language Document::guessLanguageFromSuffix(const QString &fileName)
+Language::Enum Document::guessLanguageFromSuffix(const QString &fileName)
{
if (fileName.endsWith(QLatin1String(".qml"), Qt::CaseInsensitive))
- return QmlLanguage;
+ return Language::Qml;
if (fileName.endsWith(QLatin1String(".qbs"), Qt::CaseInsensitive))
- return QmlQbsLanguage;
+ return Language::QmlQbs;
if (fileName.endsWith(QLatin1String(".js"), Qt::CaseInsensitive))
- return JavaScriptLanguage;
+ return Language::JavaScript;
if (fileName.endsWith(QLatin1String(".json"), Qt::CaseInsensitive))
- return JsonLanguage;
- return UnknownLanguage;
+ return Language::Json;
+ return Language::Unknown;
}
Document::Ptr Document::ptr() const
@@ -193,12 +194,12 @@ bool Document::isQmlDocument() const
return isQmlLikeLanguage(_language);
}
-Document::Language Document::language() const
+Language::Enum Document::language() const
{
return _language;
}
-void Document::setLanguage(Document::Language l)
+void Document::setLanguage(Language::Enum l)
{
_language = l;
}
@@ -428,7 +429,7 @@ void Snapshot::remove(const QString &fileName)
Document::MutablePtr Snapshot::documentFromSource(
const QString &code, const QString &fileName,
- Document::Language language) const
+ Language::Enum language) const
{
Document::MutablePtr newDoc = Document::create(fileName, language);
diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h
index 56ebb7061e..3d9491e165 100644
--- a/src/libs/qmljs/qmljsdocument.h
+++ b/src/libs/qmljs/qmljsdocument.h
@@ -50,36 +50,23 @@ public:
typedef QSharedPointer<const Document> Ptr;
typedef QSharedPointer<Document> MutablePtr;
- enum Language
- {
- UnknownLanguage = 0,
- JavaScriptLanguage = 1,
- JsonLanguage = 2,
- QmlLanguage = 3,
- QmlQtQuick1Language = 4,
- QmlQtQuick2Language = 5,
- QmlQbsLanguage = 6,
- QmlProjectLanguage = 7,
- QmlTypeInfoLanguage = 8
- };
-
- static bool isQmlLikeLanguage(Language languge);
- static bool isFullySupportedLanguage(Language language);
- static bool isQmlLikeOrJsLanguage(Language language);
+ static bool isQmlLikeLanguage(Language::Enum languge);
+ static bool isFullySupportedLanguage(Language::Enum language);
+ static bool isQmlLikeOrJsLanguage(Language::Enum language);
protected:
- Document(const QString &fileName, Language language);
+ Document(const QString &fileName, Language::Enum language);
public:
~Document();
- static MutablePtr create(const QString &fileName, Language language);
- static Language guessLanguageFromSuffix(const QString &fileName);
+ static MutablePtr create(const QString &fileName, Language::Enum language);
+ static Language::Enum guessLanguageFromSuffix(const QString &fileName);
Document::Ptr ptr() const;
bool isQmlDocument() const;
- Language language() const;
- void setLanguage(Language l);
+ Language::Enum language() const;
+ void setLanguage(Language::Enum l);
AST::UiProgram *qmlProgram() const;
AST::Program *jsProgram() const;
@@ -124,7 +111,7 @@ private:
QString _source;
QWeakPointer<Document> _ptr;
int _editorRevision;
- Language _language;
+ Language::Enum _language;
bool _parsedCorrectly;
// for documentFromSource
@@ -237,7 +224,7 @@ public:
Document::MutablePtr documentFromSource(const QString &code,
const QString &fileName,
- Document::Language language) const;
+ Language::Enum language) const;
};
} // namespace QmlJS
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index ddecffd2f1..bb36c1b25c 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -2074,7 +2074,7 @@ bool ASTSignal::getSourceLocation(QString *fileName, int *line, int *column) con
ImportInfo::ImportInfo()
- : _type(InvalidImport)
+ : _type(ImportType::Invalid)
, _ast(0)
{
}
@@ -2089,7 +2089,7 @@ ImportInfo ImportInfo::moduleImport(QString uri, ComponentVersion version,
}
ImportInfo info;
- info._type = LibraryImport;
+ info._type = ImportType::Library;
info._name = uri;
info._path = uri;
info._path.replace(QLatin1Char('.'), QDir::separator());
@@ -2111,17 +2111,17 @@ ImportInfo ImportInfo::pathImport(const QString &docPath, const QString &path,
info._path = importFileInfo.absoluteFilePath();
if (importFileInfo.isFile()) {
- info._type = FileImport;
+ info._type = ImportType::File;
} else if (importFileInfo.isDir()) {
- info._type = DirectoryImport;
+ info._type = ImportType::Directory;
} else if (path.startsWith(QLatin1String("qrc:"))) {
info._path = path;
if (ModelManagerInterface::instance()->filesAtQrcPath(info.path()).isEmpty())
- info._type = QrcDirectoryImport;
+ info._type = ImportType::QrcDirectory;
else
- info._type = QrcFileImport;
+ info._type = ImportType::QrcFile;
} else {
- info._type = UnknownFileImport;
+ info._type = ImportType::UnknownFile;
}
info._version = version;
info._as = as;
@@ -2132,7 +2132,7 @@ ImportInfo ImportInfo::pathImport(const QString &docPath, const QString &path,
ImportInfo ImportInfo::invalidImport(UiImport *ast)
{
ImportInfo info;
- info._type = InvalidImport;
+ info._type = ImportType::Invalid;
info._ast = ast;
return info;
}
@@ -2140,17 +2140,17 @@ ImportInfo ImportInfo::invalidImport(UiImport *ast)
ImportInfo ImportInfo::implicitDirectoryImport(const QString &directory)
{
ImportInfo info;
- info._type = ImplicitDirectoryImport;
+ info._type = ImportType::ImplicitDirectory;
info._path = directory;
return info;
}
bool ImportInfo::isValid() const
{
- return _type != InvalidImport;
+ return _type != ImportType::Invalid;
}
-ImportInfo::Type ImportInfo::type() const
+ImportType::Enum ImportInfo::type() const
{
return _type;
}
@@ -2181,9 +2181,14 @@ UiImport *ImportInfo::ast() const
}
Import::Import()
- : object(0)
+ : object(0), valid(false), used(false)
{}
+Import::Import(const Import &other)
+ : object(other.object), info(other.info), libraryPath(other.libraryPath),
+ valid(other.valid), used(false)
+{ }
+
TypeScope::TypeScope(const Imports *imports, ValueOwner *valueOwner)
: ObjectValue(valueOwner)
, _imports(imports)
@@ -2201,13 +2206,14 @@ const Value *TypeScope::lookupMember(const QString &name, const Context *context
const ImportInfo &info = i.info;
// JS import has no types
- if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport)
+ if (info.type() == ImportType::File || info.type() == ImportType::QrcFile)
continue;
if (!info.as().isEmpty()) {
if (info.as() == name) {
if (foundInObject)
*foundInObject = this;
+ i.used = true;
return import;
}
continue;
@@ -2231,7 +2237,7 @@ void TypeScope::processMembers(MemberProcessor *processor) const
const ImportInfo &info = i.info;
// JS import has no types
- if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport)
+ if (info.type() == ImportType::File || info.type() == ImportType::QrcFile)
continue;
if (!info.as().isEmpty())
@@ -2258,12 +2264,13 @@ const Value *JSImportScope::lookupMember(const QString &name, const Context *,
const ImportInfo &info = i.info;
// JS imports are always: import "somefile.js" as Foo
- if (info.type() != ImportInfo::FileImport && info.type() != ImportInfo::QrcFileImport)
+ if (info.type() != ImportType::File && info.type() != ImportType::QrcFile)
continue;
if (info.as() == name) {
if (foundInObject)
*foundInObject = this;
+ i.used = true;
return import;
}
}
@@ -2281,7 +2288,7 @@ void JSImportScope::processMembers(MemberProcessor *processor) const
const ObjectValue *import = i.object;
const ImportInfo &info = i.info;
- if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport)
+ if (info.type() == ImportType::File || info.type() == ImportType::QrcFile)
processor->processProperty(info.as(), import);
}
}
@@ -2338,7 +2345,7 @@ ImportInfo Imports::info(const QString &name, const Context *context) const
continue;
}
- if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport) {
+ if (info.type() == ImportType::File || info.type() == ImportType::QrcFile) {
if (import->className() == firstId)
return info;
} else {
@@ -2358,7 +2365,7 @@ QString Imports::nameForImportedObject(const ObjectValue *value, const Context *
const ObjectValue *import = i.object;
const ImportInfo &info = i.info;
- if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport) {
+ if (info.type() == ImportType::File || info.type() == ImportType::QrcFile) {
if (import == value)
return import->className();
} else {
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 356f52bb38..cf8d22a384 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -32,6 +32,7 @@
#include <qmljs/qmljsdocument.h>
#include <qmljs/qmljs_global.h>
+#include <qmljs/qmljsconstants.h>
#include <QFileInfoList>
#include <QList>
@@ -39,6 +40,7 @@
#include <QHash>
#include <QSet>
#include <QMutex>
+#include <QSharedPointer>
namespace QmlJS {
@@ -866,17 +868,6 @@ public:
class QMLJS_EXPORT ImportInfo
{
public:
- enum Type {
- InvalidImport,
- ImplicitDirectoryImport,
- LibraryImport,
- FileImport,
- DirectoryImport,
- QrcFileImport,
- QrcDirectoryImport,
- UnknownFileImport // refers a file/directory that wasn't found
- };
-
ImportInfo();
static ImportInfo moduleImport(QString uri, LanguageUtils::ComponentVersion version,
@@ -888,7 +879,7 @@ public:
static ImportInfo implicitDirectoryImport(const QString &directory);
bool isValid() const;
- Type type() const;
+ ImportType::Enum type() const;
// LibraryImport: uri with ',' separator
// Other: non-absolute path
@@ -905,7 +896,7 @@ public:
AST::UiImport *ast() const;
private:
- Type _type;
+ ImportType::Enum _type;
LanguageUtils::ComponentVersion _version;
QString _name;
QString _path;
@@ -916,6 +907,7 @@ private:
class QMLJS_EXPORT Import {
public:
Import();
+ Import(const Import &other);
// const!
ObjectValue *object;
@@ -924,6 +916,7 @@ public:
QString libraryPath;
// whether the import succeeded
bool valid;
+ mutable bool used;
};
class Imports;
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 1515286a54..8868ceee21 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -244,16 +244,16 @@ void LinkPrivate::populateImportedTypes(Imports *imports, Document::Ptr doc)
if (!import.object) {
switch (info.type()) {
- case ImportInfo::FileImport:
- case ImportInfo::DirectoryImport:
- case ImportInfo::QrcFileImport:
- case ImportInfo::QrcDirectoryImport:
+ case ImportType::File:
+ case ImportType::Directory:
+ case ImportType::QrcFile:
+ case ImportType::QrcDirectory:
import = importFileOrDirectory(doc, info);
break;
- case ImportInfo::LibraryImport:
+ case ImportType::Library:
import = importNonFile(doc, info);
break;
- case ImportInfo::UnknownFileImport:
+ case ImportType::UnknownFile:
imports->setImportFailed();
if (info.ast()) {
error(doc, info.ast()->fileNameToken,
@@ -290,8 +290,8 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i
QString path = importInfo.path();
- if (importInfo.type() == ImportInfo::DirectoryImport
- || importInfo.type() == ImportInfo::ImplicitDirectoryImport) {
+ if (importInfo.type() == ImportType::Directory
+ || importInfo.type() == ImportType::ImplicitDirectory) {
import.object = new ObjectValue(valueOwner);
importLibrary(doc, path, &import);
@@ -303,11 +303,11 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i
import.object->setMember(targetName, importedDoc->bind()->rootObjectValue());
}
}
- } else if (importInfo.type() == ImportInfo::FileImport) {
+ } else if (importInfo.type() == ImportType::File) {
Document::Ptr importedDoc = snapshot.document(path);
if (importedDoc)
import.object = importedDoc->bind()->rootObjectValue();
- } else if (importInfo.type() == ImportInfo::QrcFileImport) {
+ } else if (importInfo.type() == ImportType::QrcFile) {
QLocale locale;
QStringList filePaths = ModelManagerInterface::instance()
->filesAtQrcPath(path, &locale, 0, ModelManagerInterface::ActiveQrcResources);
@@ -319,7 +319,7 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i
if (importedDoc)
import.object = importedDoc->bind()->rootObjectValue();
}
- } else if (importInfo.type() == ImportInfo::QrcDirectoryImport){
+ } else if (importInfo.type() == ImportType::QrcDirectory){
import.object = new ObjectValue(valueOwner);
importLibrary(doc, path, &import);
@@ -454,7 +454,7 @@ bool LinkPrivate::importLibrary(Document::Ptr doc,
if (libraryInfo.pluginTypeInfoStatus() == LibraryInfo::NoTypeInfo) {
ModelManagerInterface *modelManager = ModelManagerInterface::instance();
if (modelManager) {
- if (importInfo.type() == ImportInfo::LibraryImport) {
+ if (importInfo.type() == ImportType::Library) {
if (version.isValid()) {
const QString uri = importInfo.name();
modelManager->loadPluginTypes(
@@ -510,12 +510,12 @@ bool LinkPrivate::importLibrary(Document::Ptr doc,
void LinkPrivate::error(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message)
{
- appendDiagnostic(doc, DiagnosticMessage(DiagnosticMessage::Error, loc, message));
+ appendDiagnostic(doc, DiagnosticMessage(Severity::Error, loc, message));
}
void LinkPrivate::warning(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message)
{
- appendDiagnostic(doc, DiagnosticMessage(DiagnosticMessage::Warning, loc, message));
+ appendDiagnostic(doc, DiagnosticMessage(Severity::Warning, loc, message));
}
void LinkPrivate::appendDiagnostic(const Document::Ptr &doc, const DiagnosticMessage &message)
diff --git a/src/libs/qmljs/qmljsscopechain.cpp b/src/libs/qmljs/qmljsscopechain.cpp
index 9ec4d0cf37..41cb3fb356 100644
--- a/src/libs/qmljs/qmljsscopechain.cpp
+++ b/src/libs/qmljs/qmljsscopechain.cpp
@@ -258,7 +258,7 @@ void ScopeChain::update() const
m_all += m_cppContextProperties;
// the root scope in js files doesn't see instantiating components
- if (m_document->language() != Document::JavaScriptLanguage || m_jsScopes.count() != 1) {
+ if (m_document->language() != Language::JavaScript || m_jsScopes.count() != 1) {
if (m_qmlComponentScope) {
foreach (const QmlComponentChain *parent, m_qmlComponentScope->instantiatingComponents())
collectScopes(parent, &m_all);
@@ -312,8 +312,8 @@ void ScopeChain::initializeRootScope()
if (!m_document->bind()->isJsLibrary()) {
foreach (Document::Ptr otherDoc, snapshot) {
foreach (const ImportInfo &import, otherDoc->bind()->imports()) {
- if ((import.type() == ImportInfo::FileImport && m_document->fileName() == import.path())
- || (import.type() == ImportInfo::QrcFileImport
+ if ((import.type() == ImportType::File && m_document->fileName() == import.path())
+ || (import.type() == ImportType::QrcFile
&& ModelManagerInterface::instance()->filesAtQrcPath(import.path())
.contains(m_document->fileName()))) {
QmlComponentChain *component = new QmlComponentChain(otherDoc);
diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.cpp b/src/libs/qmljs/qmljsstaticanalysismessage.cpp
index 6336bc21e2..57dc9b9ba7 100644
--- a/src/libs/qmljs/qmljsstaticanalysismessage.cpp
+++ b/src/libs/qmljs/qmljsstaticanalysismessage.cpp
@@ -28,6 +28,7 @@
****************************************************************************/
#include "qmljsstaticanalysismessage.h"
+#include "qmljsconstants.h"
#include <utils/qtcassert.h>
@@ -35,6 +36,7 @@
using namespace QmlJS;
using namespace QmlJS::StaticAnalysis;
+using namespace QmlJS::Severity;
namespace {
@@ -43,7 +45,7 @@ class StaticAnalysisMessages
Q_DECLARE_TR_FUNCTIONS(QmlJS::StaticAnalysisMessages)
public:
- void newMsg(Type type, Severity severity, const QString &message, int placeholders = 0)
+ void newMsg(Type type, Enum severity, const QString &message, int placeholders = 0)
{
PrototypeMessageData prototype;
prototype.type = type;
@@ -152,7 +154,7 @@ StaticAnalysisMessages::StaticAnalysisMessages()
tr("Unnecessary parentheses."));
newMsg(MaybeWarnEqualityTypeCoercion, MaybeWarning,
tr("== and != may perform type coercion, use === or !== to avoid it."));
- newMsg(WarnConfusingExpressionStatement, Warning,
+ newMsg(WarnConfusingExpressionStatement, Error,
tr("Expression statements should be assignments, calls or delete expressions only."));
newMsg(HintDeclarationsShouldBeAtStartOfFunction, Hint,
tr("Place var declarations at the start of a function."));
@@ -168,17 +170,17 @@ StaticAnalysisMessages::StaticAnalysisMessages()
tr("Prototype cycle, the last non-repeated component is '%1'."), 1);
newMsg(ErrInvalidPropertyType, Error,
tr("Invalid property type '%1'."), 1);
- newMsg(WarnEqualityTypeCoercion, Warning,
+ newMsg(WarnEqualityTypeCoercion, Error,
tr("== and != perform type coercion, use === or !== to avoid it."));
- newMsg(WarnExpectedNewWithUppercaseFunction, Warning,
+ newMsg(WarnExpectedNewWithUppercaseFunction, Error,
tr("Calls of functions that start with an uppercase letter should use 'new'."));
- newMsg(WarnNewWithLowercaseFunction, Warning,
+ newMsg(WarnNewWithLowercaseFunction, Error,
tr("Use 'new' only with functions that start with an uppercase letter."));
- newMsg(WarnNumberConstructor, Warning,
+ newMsg(WarnNumberConstructor, Error,
msgInvalidConstructor("Function"));
newMsg(HintBinaryOperatorSpacing, Hint,
tr("Use spaces around binary operators."));
- newMsg(WarnUnintentinalEmptyBlock, Warning,
+ newMsg(WarnUnintentinalEmptyBlock, Error,
tr("Unintentional empty block, use ({}) for empty object literal."));
newMsg(HintPreferNonVarPropertyType, Hint,
tr("Use %1 instead of 'var' or 'variant' to improve performance."), 1);
@@ -206,16 +208,16 @@ StaticAnalysisMessages::StaticAnalysisMessages()
tr("Maximum string value length is %1."), 1);
newMsg(ErrInvalidArrayValueLength, Error,
tr("%1 elements expected in array value."), 1);
- newMsg(WarnImperativeCodeNotEditableInVisualDesigner, Warning,
+ newMsg(WarnImperativeCodeNotEditableInVisualDesigner, Error,
tr("Imperative code is not supported in the Qt Quick Designer."));
- newMsg(WarnUnsupportedTypeInVisualDesigner, Warning,
+ newMsg(WarnUnsupportedTypeInVisualDesigner, Error,
tr("This type is not supported in the Qt Quick Designer."));
- newMsg(WarnReferenceToParentItemNotSupportedByVisualDesigner, Warning,
+ newMsg(WarnReferenceToParentItemNotSupportedByVisualDesigner, Error,
tr("Reference to parent item cannot be resolved correctly by the Qt Quick Designer."));
- newMsg(WarnUndefinedValueForVisualDesigner, Warning,
+ newMsg(WarnUndefinedValueForVisualDesigner, Error,
tr("This visual property binding cannot be evaluated in the local context "
"and might not show up in Qt Quick Designer as expected."));
- newMsg(WarnStatesOnlyInRootItemForVisualDesigner, Warning,
+ newMsg(WarnStatesOnlyInRootItemForVisualDesigner, Error,
tr("Qt Quick Designer only supports states in the root item."));
}
@@ -271,10 +273,10 @@ DiagnosticMessage Message::toDiagnosticMessage() const
case Hint:
case MaybeWarning:
case Warning:
- diagnostic.kind = DiagnosticMessage::Warning;
+ diagnostic.kind = Warning;
break;
default:
- diagnostic.kind = DiagnosticMessage::Error;
+ diagnostic.kind = Error;
break;
}
diagnostic.loc = location;
diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.h b/src/libs/qmljs/qmljsstaticanalysismessage.h
index 3cf29d7bba..4e1ca5afc6 100644
--- a/src/libs/qmljs/qmljsstaticanalysismessage.h
+++ b/src/libs/qmljs/qmljsstaticanalysismessage.h
@@ -31,6 +31,7 @@
#define QMLJS_STATICANALYSIS_QMLJSSTATICANALYSISMESSAGE_H
#include "qmljs_global.h"
+#include "qmljsconstants.h"
#include "parser/qmljsengine_p.h"
#include <QRegExp>
@@ -40,15 +41,6 @@
namespace QmlJS {
namespace StaticAnalysis {
-enum Severity
-{
- Hint, // cosmetic or convention
- MaybeWarning, // possibly a warning, insufficient information
- Warning, // could cause unintended behavior
- MaybeError, // possibly an error, insufficient information
- Error // definitely an error
-};
-
enum Type
{
// Changing the numbers can break user code.
@@ -134,7 +126,7 @@ enum Type
class QMLJS_EXPORT PrototypeMessageData {
public:
Type type;
- Severity severity;
+ Severity::Enum severity;
QString message;
int placeholders;
};
@@ -159,7 +151,7 @@ public:
AST::SourceLocation location;
QString message;
Type type;
- Severity severity;
+ Severity::Enum severity;
static const PrototypeMessageData prototypeForMessageType(Type type);
};
diff --git a/src/libs/qmljs/qmljsutils.cpp b/src/libs/qmljs/qmljsutils.cpp
index 2836350291..764a5c0f48 100644
--- a/src/libs/qmljs/qmljsutils.cpp
+++ b/src/libs/qmljs/qmljsutils.cpp
@@ -194,7 +194,7 @@ UiQualifiedId *QmlJS::qualifiedTypeNameId(Node *node)
DiagnosticMessage QmlJS::errorMessage(const AST::SourceLocation &loc, const QString &message)
{
- return DiagnosticMessage(DiagnosticMessage::Error, loc, message);
+ return DiagnosticMessage(Severity::Error, loc, message);
}
bool QmlJS::isValidBuiltinPropertyType(const QString &name)
diff --git a/src/libs/qmljs/qmljsutils.h b/src/libs/qmljs/qmljsutils.h
index 30ec1ba69e..5ac47f7207 100644
--- a/src/libs/qmljs/qmljsutils.h
+++ b/src/libs/qmljs/qmljsutils.h
@@ -67,7 +67,7 @@ AST::SourceLocation locationFromRange(const T *node)
template <class T>
DiagnosticMessage errorMessage(const T *node, const QString &message)
{
- return DiagnosticMessage(DiagnosticMessage::Error,
+ return DiagnosticMessage(Severity::Error,
locationFromRange(node),
message);
}
diff --git a/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
index f3cc7bbedf..b43a9c7b3a 100644
--- a/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
+++ b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
@@ -275,7 +275,7 @@ extern "C" HRESULT CALLBACK pid(CIDebugClient *client, PCSTR args)
int token;
commandTokens<StringList>(args, &token);
- dprintf("Qt Creator CDB extension version 2.8 %d bit built %s.\n",
+ dprintf("Qt Creator CDB extension version 3.0 %d bit built %s.\n",
sizeof(void *) * 8, __DATE__);
if (const ULONG pid = currentProcessId(client))
ExtensionContext::instance().report('R', token, 0, "pid", "%u", pid);
diff --git a/src/libs/zeroconf/embeddedLib.cpp b/src/libs/zeroconf/embeddedLib.cpp
index b4ae626d49..993944d0b0 100644
--- a/src/libs/zeroconf/embeddedLib.cpp
+++ b/src/libs/zeroconf/embeddedLib.cpp
@@ -126,9 +126,8 @@ public:
if (logger) {
QByteArray logBA = oldLog.readAll();
logger->appendError(ErrorMessage::NoteLevel,
- ZConfLib::tr("%1: log of previous daemon run is: '%2'.\n")
- .arg(name())
- .arg(QString::fromLatin1(logBA.constData(), logBA.size())));
+ ZConfLib::tr("%1: log of previous daemon run is: '%2'.")
+ .arg(name(), QString::fromLatin1(logBA.constData(), logBA.size())) + QLatin1Char('\n'));
qDebug()<<logBA.size()<<oldLog.error()<<oldLog.errorString();
}
oldLog.close();
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 543c66ab26..80d1c9451a 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -457,7 +457,12 @@ QVector<AndroidDeviceInfo> AndroidConfigurations::connectedDevices(QString *erro
return devices;
}
QList<QByteArray> adbDevs = adbProc.readAll().trimmed().split('\n');
- adbDevs.removeFirst();
+ if (adbDevs.empty())
+ return devices;
+
+ while (adbDevs.first().startsWith("* daemon"))
+ adbDevs.removeFirst(); // remove the daemon logs
+ adbDevs.removeFirst(); // remove "List of devices attached" header line
// workaround for '????????????' serial numbers:
// can use "adb -d" when only one usb device attached
@@ -578,7 +583,13 @@ QVector<AndroidDeviceInfo> AndroidConfigurations::androidVirtualDevices() const
return devices;
}
QList<QByteArray> avds = proc.readAll().trimmed().split('\n');
- avds.removeFirst();
+ if (avds.empty())
+ return devices;
+
+ while (avds.first().startsWith("* daemon"))
+ avds.removeFirst(); // remove the daemon logs
+ avds.removeFirst(); // remove "List of devices attached" header line
+
AndroidDeviceInfo dev;
for (int i = 0; i < avds.size(); i++) {
QString line = QLatin1String(avds[i]);
@@ -610,7 +621,7 @@ QVector<AndroidDeviceInfo> AndroidConfigurations::androidVirtualDevices() const
QString AndroidConfigurations::startAVD(const QString &name, int apiLevel, QString cpuAbi) const
{
- if (startAVDAsync(name))
+ if (findAvd(apiLevel, cpuAbi) || startAVDAsync(name))
return waitForAvd(apiLevel, cpuAbi);
return QString();
}
@@ -632,6 +643,21 @@ bool AndroidConfigurations::startAVDAsync(const QString &avdName) const
return true;
}
+bool AndroidConfigurations::findAvd(int apiLevel, const QString &cpuAbi) const
+{
+ QVector<AndroidDeviceInfo> devices = connectedDevices();
+ foreach (AndroidDeviceInfo device, devices) {
+ if (!device.serialNumber.startsWith(QLatin1String("emulator")))
+ continue;
+ if (!device.cpuAbi.contains(cpuAbi))
+ continue;
+ if (device.sdk != apiLevel)
+ continue;
+ return true;
+ }
+ return false;
+}
+
QString AndroidConfigurations::waitForAvd(int apiLevel, const QString &cpuAbi) const
{
// we cannot use adb -e wait-for-device, since that doesn't work if a emulator is already running
@@ -804,6 +830,18 @@ void AndroidConfigurations::updateAutomaticKitList()
if (k->isSdkProvided())
continue;
+ // Update code for 3.0 beta, which shipped with a bug for the debugger settings
+ ProjectExplorer::ToolChain *tc =ToolChainKitInformation::toolChain(k);
+ if (tc && Debugger::DebuggerKitInformation::debuggerCommand(k) != tc->suggestedDebugger()) {
+ Debugger::DebuggerItem debugger;
+ debugger.setCommand(tc->suggestedDebugger());
+ debugger.setEngineType(Debugger::GdbEngineType);
+ debugger.setDisplayName(tr("Android Debugger for %1").arg(tc->displayName()));
+ debugger.setAutoDetected(true);
+ debugger.setAbi(tc->targetAbi());
+ QVariant id = Debugger::DebuggerItemManager::registerDebugger(debugger);
+ Debugger::DebuggerKitInformation::setDebugger(k, id);
+ }
existingKits << k;
}
@@ -841,7 +879,8 @@ void AndroidConfigurations::updateAutomaticKitList()
debugger.setDisplayName(tr("Android Debugger for %1").arg(tc->displayName()));
debugger.setAutoDetected(true);
debugger.setAbi(tc->targetAbi());
- Debugger::DebuggerKitInformation::setDebugger(newKit, debugger);
+ QVariant id = Debugger::DebuggerItemManager::registerDebugger(debugger);
+ Debugger::DebuggerKitInformation::setDebugger(newKit, id);
AndroidGdbServerKitInformation::setGdbSever(newKit, tc->suggestedGdbServer());
newKit->makeSticky();
diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h
index 64d7e08068..38af17330f 100644
--- a/src/plugins/android/androidconfigurations.h
+++ b/src/plugins/android/androidconfigurations.h
@@ -106,6 +106,7 @@ public:
QVector<AndroidDeviceInfo> androidVirtualDevices() const;
QString startAVD(const QString &name, int apiLevel, QString cpuAbi) const;
bool startAVDAsync(const QString &avdName) const;
+ bool findAvd(int apiLevel, const QString &cpuAbi) const;
QString waitForAvd(int apiLevel, const QString &cpuAbi) const;
QString bestNdkPlatformMatch(const QString &targetAPI) const;
diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp
index 349af21734..405f317ef5 100644
--- a/src/plugins/android/androiddeployqtstep.cpp
+++ b/src/plugins/android/androiddeployqtstep.cpp
@@ -287,7 +287,8 @@ bool AndroidDeployQtStep::init()
if (!result)
return false;
- AndroidConfigurations::instance().startAVDAsync(m_avdName);
+ if (!AndroidConfigurations::instance().findAvd(m_deviceAPILevel, m_targetArch))
+ AndroidConfigurations::instance().startAVDAsync(m_avdName);
return true;
}
diff --git a/src/plugins/android/androiddeploystep.cpp b/src/plugins/android/androiddeploystep.cpp
index 3fadfce5fe..d8264898d8 100644
--- a/src/plugins/android/androiddeploystep.cpp
+++ b/src/plugins/android/androiddeploystep.cpp
@@ -389,7 +389,8 @@ void AndroidDeployStep::deployFiles(QProcess *process, const QList<DeployItem> &
bool AndroidDeployStep::deployPackage()
{
if (!m_avdName.isEmpty()) {
- if (!AndroidConfigurations::instance().startAVDAsync(m_avdName))
+ if (!AndroidConfigurations::instance().findAvd(m_deviceAPILevel, m_targetArch)
+ && !AndroidConfigurations::instance().startAVDAsync(m_avdName))
return false;
m_deviceSerialNumber = AndroidConfigurations::instance().waitForAvd(m_deviceAPILevel, m_targetArch);
}
diff --git a/src/plugins/cmakeprojectmanager/cmakevalidator.cpp b/src/plugins/cmakeprojectmanager/cmakevalidator.cpp
index 8a85a756fa..203dfe8706 100644
--- a/src/plugins/cmakeprojectmanager/cmakevalidator.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakevalidator.cpp
@@ -86,16 +86,11 @@ void CMakeValidator::finished(int exitCode)
}
if (m_state == CMakeValidator::RunningBasic) {
QByteArray response = m_process->readAll();
- QRegExp versionRegexp(QLatin1String("^cmake version ([\\d\\.]*)"));
- versionRegexp.indexIn(QString::fromLocal8Bit(response));
m_hasCodeBlocksMsvcGenerator = response.contains("CodeBlocks - NMake Makefiles");
m_hasCodeBlocksNinjaGenerator = response.contains("CodeBlocks - Ninja");
- m_version = versionRegexp.cap(1);
- if (versionRegexp.capturedTexts().size() > 3)
- m_version += QLatin1Char('.') + versionRegexp.cap(3);
- if (m_version.isEmpty()) {
+ if (response.isEmpty()) {
m_state = CMakeValidator::Invalid;
} else {
m_state = CMakeValidator::RunningFunctionList;
diff --git a/src/plugins/cmakeprojectmanager/cmakevalidator.h b/src/plugins/cmakeprojectmanager/cmakevalidator.h
index 945a2271ff..c4c39283a5 100644
--- a/src/plugins/cmakeprojectmanager/cmakevalidator.h
+++ b/src/plugins/cmakeprojectmanager/cmakevalidator.h
@@ -74,7 +74,6 @@ private:
QProcess *m_process;
bool m_hasCodeBlocksMsvcGenerator;
bool m_hasCodeBlocksNinjaGenerator;
- QString m_version;
QString m_executable;
QMap<QString, QStringList> m_functionArgs;
diff --git a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
index 3a017e8c52..e5b92af57c 100644
--- a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
@@ -195,29 +195,33 @@ void ReadOnlyFilesDialog::promptFailWarning(const QStringList &files, ReadOnlyRe
if (IVersionControl *vc = d->versionControls[file]) {
const QString openText = vc->vcsOpenText().remove(QLatin1Char('&'));
title = tr("Failed to %1 File").arg(openText);
- message = tr("%1 file %2 from version control system %3 failed.\n")
+ message = tr("%1 file %2 from version control system %3 failed.")
.arg(openText)
.arg(QDir::toNativeSeparators(file))
.arg(vc->displayName());
+ message += QLatin1Char('\n');
message += d->failWarning;
} else {
title = tr("No Version Control System Found");
message = tr("Cannot open file %1 from version control system.\n"
- "No version control system found.\n")
+ "No version control system found.")
.arg(QDir::toNativeSeparators(file));
+ message += QLatin1Char('\n');
message += d->failWarning;
}
break;
}
case RO_MakeWritable:
title = tr("Cannot Set Permissions");
- message = tr("Cannot set permissions for %1 to writable.\n")
+ message = tr("Cannot set permissions for %1 to writable.")
.arg(QDir::toNativeSeparators(file));
+ message += QLatin1Char('\n');
message += d->failWarning;
break;
case RO_SaveAs:
title = tr("Cannot Save File");
- message = tr("Cannot save file %1\n").arg(QDir::toNativeSeparators(file));
+ message = tr("Cannot save file %1").arg(QDir::toNativeSeparators(file));
+ message += QLatin1Char('\n');
message += d->failWarning;
break;
default:
@@ -240,6 +244,7 @@ void ReadOnlyFilesDialog::promptFailWarning(const QStringList &files, ReadOnlyRe
* Executes the ReadOnlyFilesDialog dialog.
* Returns ReadOnlyResult to provide information about the operation that was
* used to make the files writable.
+ *
* \internal
*
* Also displays an error dialog when some operations cannot be executed and the
diff --git a/src/plugins/coreplugin/externaltool.cpp b/src/plugins/coreplugin/externaltool.cpp
index 971704272e..590806ff25 100644
--- a/src/plugins/coreplugin/externaltool.cpp
+++ b/src/plugins/coreplugin/externaltool.cpp
@@ -561,9 +561,10 @@ bool ExternalToolRunner::resolve()
if (m_resolvedExecutable.isEmpty()) {
m_hasError = true;
for (int i = 0; i < expandedExecutables.size(); ++i) {
- m_errorString += tr("Could not find executable for '%1' (expanded '%2')\n")
+ m_errorString += tr("Could not find executable for '%1' (expanded '%2')")
.arg(m_tool->executables().at(i))
.arg(expandedExecutables.at(i));
+ m_errorString += QLatin1Char('\n');
}
if (!m_errorString.isEmpty())
m_errorString.chop(1);
diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp
index bdd82784b1..8813ea21e9 100644
--- a/src/plugins/coreplugin/outputwindow.cpp
+++ b/src/plugins/coreplugin/outputwindow.cpp
@@ -264,7 +264,7 @@ void OutputWindow::appendText(const QString &textIn, const QTextCharFormat &form
if (m_maxLineCount > 0 && document()->blockCount() >= m_maxLineCount) {
QTextCharFormat tmp;
tmp.setFontWeight(QFont::Bold);
- cursor.insertText(doNewlineEnforcement(tr("Additional output omitted\n")), tmp);
+ cursor.insertText(doNewlineEnforcement(tr("Additional output omitted") + QLatin1Char('\n')), tmp);
}
cursor.endEditBlock();
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.cpp b/src/plugins/coreplugin/progressmanager/progressmanager.cpp
index 444f19296b..419d8be0b7 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressmanager.cpp
@@ -72,7 +72,7 @@ using namespace Core::Internal;
The progress indicator also allows the user to cancel the task.
You get the single instance of this class via the
- Core::ICore::progressManager() function.
+ ProgressManager::instance() function.
\section1 Registering a task
The ProgressManager API uses QtConcurrent as the basis for defining
@@ -149,9 +149,8 @@ using namespace Core::Internal;
in a different thread, looks like this:
\code
QFuture<void> task = QtConcurrent::run(&ILocatorFilter::refresh, filters);
- Core::FutureProgress *progress = Core::ICore::instance()
- ->progressManager()->addTask(task, tr("Indexing"),
- Locator::Constants::TASK_INDEX);
+ Core::FutureProgress *progress = Core::ProgressManager::addTask(task, tr("Indexing"),
+ Locator::Constants::TASK_INDEX);
\endcode
First, we tell QtConcurrent to start a thread which calls all the filters'
refresh function. After that we register the returned QFuture object
@@ -166,9 +165,7 @@ using namespace Core::Internal;
// We are already running in a different thread here
QFutureInterface<void> *progressObject = new QFutureInterface<void>;
progressObject->setProgressRange(0, MAX);
- Core::ICore::progressManager()->addTask(
- progressObject->future(),
- tr("DoIt"), MYTASKTYPE);
+ Core::ProgressManager::addTask(progressObject->future(), tr("DoIt"), MYTASKTYPE);
progressObject->reportStarted();
// Do something
...
diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index d58a678d46..4e2636a908 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -404,8 +404,8 @@ QString VcsManager::msgAddToVcsFailedTitle()
QString VcsManager::msgToAddToVcsFailed(const QStringList &files, const IVersionControl *vc)
{
return files.size() == 1
- ? tr("Could not add the file\n%1\nto version control (%2)\n")
- .arg(files.front(), vc->displayName())
+ ? tr("Could not add the file\n%1\nto version control (%2)")
+ .arg(files.front(), vc->displayName()) + QLatin1Char('\n')
: tr("Could not add the following files to version control (%1)\n%2")
.arg(vc->displayName(), files.join(QString(QLatin1Char('\n'))));
}
diff --git a/src/plugins/cppeditor/cppeditor.pro b/src/plugins/cppeditor/cppeditor.pro
index 64ffa94641..f7fe4eb9af 100644
--- a/src/plugins/cppeditor/cppeditor.pro
+++ b/src/plugins/cppeditor/cppeditor.pro
@@ -25,6 +25,7 @@ HEADERS += cppeditorplugin.h \
cppincludehierarchyitem.h \
cppincludehierarchytreeview.h \
cppvirtualfunctionassistprovider.h \
+ cppvirtualfunctionproposalitem.h \
cpppreprocessordialog.h
SOURCES += cppeditorplugin.cpp \
@@ -49,6 +50,7 @@ SOURCES += cppeditorplugin.cpp \
cppincludehierarchyitem.cpp \
cppincludehierarchytreeview.cpp \
cppvirtualfunctionassistprovider.cpp \
+ cppvirtualfunctionproposalitem.cpp \
cpppreprocessordialog.cpp
RESOURCES += cppeditor.qrc
diff --git a/src/plugins/cppeditor/cppeditor.qbs b/src/plugins/cppeditor/cppeditor.qbs
index d8c465ad55..920b3a834b 100644
--- a/src/plugins/cppeditor/cppeditor.qbs
+++ b/src/plugins/cppeditor/cppeditor.qbs
@@ -65,6 +65,8 @@ QtcPlugin {
"cpptypehierarchy.h",
"cppvirtualfunctionassistprovider.cpp",
"cppvirtualfunctionassistprovider.h",
+ "cppvirtualfunctionproposalitem.cpp",
+ "cppvirtualfunctionproposalitem.h",
]
Group {
diff --git a/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp b/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp
index bd2acf05ab..ad4a8c3012 100644
--- a/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp
+++ b/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp
@@ -454,16 +454,18 @@ BaseTextEditorWidget::Link FollowSymbolUnderCursor::findLink(const QTextCursor &
const QByteArray name = CPPEditorWidget::identifierUnderCursor(&macroCursor).toLatin1();
if (macro->name() == name)
return link; //already on definition!
- } else {
- const Document::MacroUse *use = doc->findMacroUseAt(endOfToken - 1);
- if (use && use->macro().fileName() != CppModelManagerInterface::configurationFileName()) {
+ } else if (const Document::MacroUse *use = doc->findMacroUseAt(endOfToken - 1)) {
+ const QString fileName = use->macro().fileName();
+ if (fileName == CppModelManagerInterface::editorConfigurationFileName()) {
+ m_widget->showPreProcessorWidget();
+ } else if (fileName != CppModelManagerInterface::configurationFileName()) {
const Macro &macro = use->macro();
link.targetFileName = macro.fileName();
link.targetLine = macro.line();
link.linkTextStart = use->begin();
link.linkTextEnd = use->end();
- return link;
}
+ return link;
}
// Find the last symbol up to the cursor position
diff --git a/src/plugins/cppeditor/cpppreprocessordialog.ui b/src/plugins/cppeditor/cpppreprocessordialog.ui
index 28c7b5f47b..3860901156 100644
--- a/src/plugins/cppeditor/cpppreprocessordialog.ui
+++ b/src/plugins/cppeditor/cpppreprocessordialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Additional C++ Preprocess Directives</string>
+ <string>Additional C++ Preprocessor Directives</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp
index fb9c7621ba..5f44589885 100644
--- a/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp
+++ b/src/plugins/cppeditor/cppvirtualfunctionassistprovider.cpp
@@ -32,6 +32,7 @@
#include "cppeditorconstants.h"
#include "cppelementevaluator.h"
+#include "cppvirtualfunctionproposalitem.h"
#include <cplusplus/Icons.h>
#include <cplusplus/Overview.h>
@@ -39,7 +40,6 @@
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
-#include <texteditor/codeassist/basicproposalitem.h>
#include <texteditor/codeassist/basicproposalitemlistmodel.h>
#include <texteditor/codeassist/genericproposal.h>
#include <texteditor/codeassist/genericproposalwidget.h>
@@ -53,31 +53,6 @@ using namespace CPlusPlus;
using namespace CppEditor::Internal;
using namespace TextEditor;
-class VirtualFunctionProposalItem: public BasicProposalItem {
-public:
- VirtualFunctionProposalItem(const BaseTextEditorWidget::Link &link, bool openInSplit = true)
- : m_link(link), m_openInSplit(openInSplit) {}
-
- void apply(BaseTextEditor * /* editor */, int /* basePosition */) const
- {
- if (!m_link.hasValidTarget())
- return;
-
- Core::EditorManager::OpenEditorFlags flags;
- if (m_openInSplit)
- flags |= Core::EditorManager::OpenInOtherSplit;
- Core::EditorManager::openEditorAt(m_link.targetFileName,
- m_link.targetLine,
- m_link.targetColumn,
- CppEditor::Constants::CPPEDITOR_ID,
- flags);
- }
-
-private:
- BaseTextEditorWidget::Link m_link;
- bool m_openInSplit;
-};
-
/// Activate current item with the same shortcut that is configured for Follow Symbol Under Cursor.
/// This is limited to single-key shortcuts without modifiers.
class VirtualFunctionProposalWidget : public GenericProposalWidget
@@ -166,7 +141,7 @@ public:
QTC_ASSERT(!m_snapshot.isEmpty(), return 0);
const QList<Symbol *> overrides = FunctionHelper::overrides(m_startClass, m_function,
- m_snapshot);
+ m_snapshot);
QList<BasicProposalItem *> items;
foreach (Symbol *symbol, overrides)
items << itemFromSymbol(symbol, m_function);
diff --git a/src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp
new file mode 100644
index 0000000000..91335af54d
--- /dev/null
+++ b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#include "cppvirtualfunctionproposalitem.h"
+
+#include "cppeditorconstants.h"
+
+using namespace CppEditor::Internal;
+
+VirtualFunctionProposalItem::VirtualFunctionProposalItem(
+ const TextEditor::BaseTextEditorWidget::Link &link, bool openInSplit)
+ : m_link(link), m_openInSplit(openInSplit)
+{
+}
+
+void VirtualFunctionProposalItem::apply(TextEditor::BaseTextEditor *, int) const
+{
+ if (!m_link.hasValidTarget())
+ return;
+
+ Core::EditorManager::OpenEditorFlags flags;
+ if (m_openInSplit)
+ flags |= Core::EditorManager::OpenInOtherSplit;
+ Core::EditorManager::openEditorAt(m_link.targetFileName,
+ m_link.targetLine,
+ m_link.targetColumn,
+ CppEditor::Constants::CPPEDITOR_ID,
+ flags);
+}
diff --git a/src/plugins/cppeditor/cppvirtualfunctionproposalitem.h b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.h
new file mode 100644
index 0000000000..7d09c9db2c
--- /dev/null
+++ b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#ifndef CPPVIRTUALFUNCTIONPROPOSALITEM_H
+#define CPPVIRTUALFUNCTIONPROPOSALITEM_H
+
+#include <texteditor/basetexteditor.h>
+#include <texteditor/codeassist/basicproposalitem.h>
+
+namespace CppEditor {
+namespace Internal {
+
+class VirtualFunctionProposalItem: public TextEditor::BasicProposalItem {
+public:
+ VirtualFunctionProposalItem(const TextEditor::BaseTextEditorWidget::Link &link,
+ bool openInSplit = true);
+ void apply(TextEditor::BaseTextEditor * /* editor */, int /* basePosition */) const;
+
+private:
+ TextEditor::BaseTextEditorWidget::Link m_link;
+ bool m_openInSplit;
+};
+
+} // namespace Internal
+} // namespace CppEditor
+
+#endif // CPPVIRTUALFUNCTIONPROPOSALITEM_H
diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.cpp b/src/plugins/cpptools/cppmodelmanagerinterface.cpp
index e2a7c6f10e..31f1b55e18 100644
--- a/src/plugins/cpptools/cppmodelmanagerinterface.cpp
+++ b/src/plugins/cpptools/cppmodelmanagerinterface.cpp
@@ -175,6 +175,11 @@ static CppModelManagerInterface *g_instance = 0;
const QString CppModelManagerInterface::configurationFileName()
{ return CPlusPlus::Preprocessor::configurationFileName; }
+const QString CppModelManagerInterface::editorConfigurationFileName()
+{
+ return QLatin1String("<per-editor-defines>");
+}
+
CppModelManagerInterface::CppModelManagerInterface(QObject *parent)
: QObject(parent)
{
diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h
index eacfa6f756..bb6787bd2f 100644
--- a/src/plugins/cpptools/cppmodelmanagerinterface.h
+++ b/src/plugins/cpptools/cppmodelmanagerinterface.h
@@ -216,6 +216,7 @@ public:
public:
static const QString configurationFileName();
+ static const QString editorConfigurationFileName();
public:
CppModelManagerInterface(QObject *parent = 0);
diff --git a/src/plugins/cpptools/cpppreprocessor.cpp b/src/plugins/cpptools/cpppreprocessor.cpp
index f60c853b83..63e64c61a1 100644
--- a/src/plugins/cpptools/cpppreprocessor.cpp
+++ b/src/plugins/cpptools/cpppreprocessor.cpp
@@ -416,7 +416,6 @@ void CppPreprocessor::sourceNeeded(unsigned line, const QString &fileName, Inclu
if (m_dumpFileNameWhileParsing) {
qDebug() << "Parsing file:" << absoluteFileName
<< "contents:" << contents.size() << "bytes";
- ;
}
Document::Ptr doc = m_snapshot.document(absoluteFileName);
diff --git a/src/plugins/cpptools/cppsnapshotupdater.cpp b/src/plugins/cpptools/cppsnapshotupdater.cpp
index cf4a7cec74..11cd3ff5b3 100644
--- a/src/plugins/cpptools/cppsnapshotupdater.cpp
+++ b/src/plugins/cpptools/cppsnapshotupdater.cpp
@@ -138,7 +138,8 @@ void SnapshotUpdater::update(CppModelManager::WorkingCopy workingCopy)
workingCopy.insert(configurationFileName, m_configFile);
m_snapshot.remove(m_fileInEditor);
- static const QString editorDefinesFileName = QLatin1String("<per-editor-defines>");
+ static const QString editorDefinesFileName
+ = CppModelManagerInterface::editorConfigurationFileName();
if (editorDefinesChanged) {
m_snapshot.remove(editorDefinesFileName);
workingCopy.insert(editorDefinesFileName, m_editorDefines);
@@ -152,15 +153,21 @@ void SnapshotUpdater::update(CppModelManager::WorkingCopy workingCopy)
preproc.setIncludePaths(m_includePaths);
preproc.setFrameworkPaths(m_frameworkPaths);
preproc.run(configurationFileName);
- if (m_usePrecompiledHeaders)
+ if (m_usePrecompiledHeaders) {
foreach (const QString &precompiledHeader, m_precompiledHeaders)
preproc.run(precompiledHeader);
+ }
if (!m_editorDefines.isEmpty())
preproc.run(editorDefinesFileName);
preproc.run(m_fileInEditor);
m_snapshot = preproc.snapshot();
- m_snapshot = m_snapshot.simplified(document());
+ Snapshot newSnapshot = m_snapshot.simplified(document());
+ for (Snapshot::const_iterator i = m_snapshot.begin(), ei = m_snapshot.end(); i != ei; ++i) {
+ if (Client::isInjectedFile(i.key()))
+ newSnapshot.insert(i.value());
+ }
+ m_snapshot = newSnapshot;
m_deps.build(m_snapshot);
foreach (Document::Ptr doc, m_snapshot) {
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 7f422ec8cc..71b196a710 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -1810,7 +1810,8 @@ void DebuggerEngine::checkForReleaseBuild(const DebuggerStartParameters &sp)
}
showMessageBox(QMessageBox::Information, tr("Warning"),
tr("This does not seem to be a \"Debug\" build.\n"
- "Setting breakpoints by file name and line number may fail.\n").append(detailedWarning));
+ "Setting breakpoints by file name and line number may fail.")
+ + QLatin1Char('\n') + detailedWarning);
}
} // namespace Debugger
diff --git a/src/plugins/debugger/debuggerkitconfigwidget.cpp b/src/plugins/debugger/debuggerkitconfigwidget.cpp
index ece61bb99e..9d9f0b23a9 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.cpp
+++ b/src/plugins/debugger/debuggerkitconfigwidget.cpp
@@ -345,16 +345,11 @@ QString DebuggerKitInformation::displayString(const Kit *k)
return binary.isEmpty() ? tr("%1 <None>").arg(name) : tr("%1 using \"%2\"").arg(name, binary);
}
-void DebuggerKitInformation::setDebugger(Kit *k, const DebuggerItem &item)
+void DebuggerKitInformation::setDebugger(Kit *k, const QVariant &id)
{
// Only register reasonably complete debuggers.
- QTC_ASSERT(!item.id().isValid(), return);
- QTC_ASSERT(!item.command().isEmpty(), return);
- QTC_ASSERT(!item.displayName().isEmpty(), return);
- QTC_ASSERT(item.engineType() != NoEngineType, return);
- // Only set registered/existing debuggers
- QTC_ASSERT(DebuggerItemManager::findByCommand(item.command()), return);
- k->setValue(DebuggerKitInformation::id(), item.id());
+ QTC_ASSERT(DebuggerItemManager::findById(id), return);
+ k->setValue(DebuggerKitInformation::id(), id);
}
Core::Id DebuggerKitInformation::id()
@@ -651,11 +646,12 @@ void DebuggerItemManager::saveDebuggers()
// Do not save default debuggers as they are set by the SDK.
}
-void DebuggerItemManager::registerDebugger(const DebuggerItem &item)
+QVariant DebuggerItemManager::registerDebugger(const DebuggerItem &item)
{
if (findByCommand(item.command()))
- return;
- addDebugger(item);
+ return item.id();
+
+ return addDebugger(item);
}
void DebuggerItemManager::deregisterDebugger(const DebuggerItem &item)
@@ -664,13 +660,17 @@ void DebuggerItemManager::deregisterDebugger(const DebuggerItem &item)
removeDebugger(item.id());
}
-void DebuggerItemManager::addDebugger(const DebuggerItem& item0)
+QVariant DebuggerItemManager::addDebugger(const DebuggerItem& item0)
{
DebuggerItem item = item0;
+ QTC_ASSERT(!item.command().isEmpty(), return QVariant());
+ QTC_ASSERT(!item.displayName().isEmpty(), return QVariant());
+ QTC_ASSERT(item.engineType() != NoEngineType, return QVariant());
if (item.id().isNull())
item.setId(QUuid::createUuid().toString());
m_debuggers.append(item);
m_model->addDebugger(item);
+ return item.id();
}
void DebuggerItemManager::removeDebugger(const QVariant &id)
diff --git a/src/plugins/debugger/debuggerkitinformation.cpp b/src/plugins/debugger/debuggerkitinformation.cpp
index fc01bf2e6a..30ca4f2c23 100644
--- a/src/plugins/debugger/debuggerkitinformation.cpp
+++ b/src/plugins/debugger/debuggerkitinformation.cpp
@@ -199,17 +199,18 @@ static DebuggerItem::MatchLevel matchSingle(const Abi &debuggerAbi, const Abi &t
&& debuggerAbi.binaryFormat() != targetAbi.binaryFormat())
return DebuggerItem::DoesNotMatch;
- if (debuggerAbi.wordWidth() != 0 && debuggerAbi.wordWidth() != targetAbi.wordWidth())
- return DebuggerItem::DoesNotMatch;
-
if (debuggerAbi.os() == Abi::WindowsOS) {
if (debuggerAbi.osFlavor() == Abi::WindowsMSysFlavor && targetAbi.osFlavor() != Abi::WindowsMSysFlavor)
return DebuggerItem::DoesNotMatch;
if (debuggerAbi.osFlavor() != Abi::WindowsMSysFlavor && targetAbi.osFlavor() == Abi::WindowsMSysFlavor)
return DebuggerItem::DoesNotMatch;
- return DebuggerItem::MatchesSomewhat;
}
+ if (debuggerAbi.wordWidth() == 64 && targetAbi.wordWidth() == 32)
+ return DebuggerItem::MatchesSomewhat;
+ if (debuggerAbi.wordWidth() != 0 && debuggerAbi.wordWidth() != targetAbi.wordWidth())
+ return DebuggerItem::DoesNotMatch;
+
return DebuggerItem::MatchesPerfectly;
}
@@ -230,3 +231,109 @@ bool Debugger::DebuggerItem::isValid() const
}
} // namespace Debugger;
+
+#ifdef WITH_TESTS
+
+# include <QTest>
+# include "debuggerplugin.h"
+
+void Debugger::DebuggerPlugin::testDebuggerMatching_data()
+{
+ QTest::addColumn<QStringList>("debugger");
+ QTest::addColumn<QString>("target");
+ QTest::addColumn<int>("result");
+
+ QTest::newRow("Invalid data")
+ << QStringList()
+ << QString()
+ << int(DebuggerItem::DoesNotMatch);
+ QTest::newRow("Invalid debugger")
+ << QStringList()
+ << QString::fromLatin1("x86-linux-generic-elf-32bit")
+ << int(DebuggerItem::DoesNotMatch);
+ QTest::newRow("Invalid target")
+ << (QStringList() << QLatin1String("x86-linux-generic-elf-32bit"))
+ << QString()
+ << int(DebuggerItem::DoesNotMatch);
+
+ QTest::newRow("Fuzzy match 1")
+ << (QStringList() << QLatin1String("unknown-unknown-unknown-unknown-0bit"))
+ << QString::fromLatin1("x86-linux-generic-elf-32bit")
+ << int(DebuggerItem::MatchesPerfectly); // Is this the expected behavior?
+ QTest::newRow("Fuzzy match 2")
+ << (QStringList() << QLatin1String("unknown-unknown-unknown-unknown-0bit"))
+ << QString::fromLatin1("arm-windows-msys-pe-64bit")
+ << int(DebuggerItem::MatchesPerfectly); // Is this the expected behavior?
+
+ QTest::newRow("Architecture mismatch")
+ << (QStringList() << QLatin1String("x86-linux-generic-elf-32bit"))
+ << QString::fromLatin1("arm-linux-generic-elf-32bit")
+ << int(DebuggerItem::DoesNotMatch);
+ QTest::newRow("OS mismatch")
+ << (QStringList() << QLatin1String("x86-linux-generic-elf-32bit"))
+ << QString::fromLatin1("x86-macosx-generic-elf-32bit")
+ << int(DebuggerItem::DoesNotMatch);
+ QTest::newRow("Format mismatch")
+ << (QStringList() << QLatin1String("x86-linux-generic-elf-32bit"))
+ << QString::fromLatin1("x86-linux-generic-pe-32bit")
+ << int(DebuggerItem::DoesNotMatch);
+
+ QTest::newRow("Linux perfect match")
+ << (QStringList() << QLatin1String("x86-linux-generic-elf-32bit"))
+ << QString::fromLatin1("x86-linux-generic-elf-32bit")
+ << int(DebuggerItem::MatchesPerfectly);
+ QTest::newRow("Linux match")
+ << (QStringList() << QLatin1String("x86-linux-generic-elf-64bit"))
+ << QString::fromLatin1("x86-linux-generic-elf-32bit")
+ << int(DebuggerItem::MatchesSomewhat);
+
+ QTest::newRow("Windows perfect match 1")
+ << (QStringList() << QLatin1String("x86-windows-msvc2013-pe-64bit"))
+ << QString::fromLatin1("x86-windows-msvc2013-pe-64bit")
+ << int(DebuggerItem::MatchesPerfectly);
+ QTest::newRow("Windows perfect match 2")
+ << (QStringList() << QLatin1String("x86-windows-msvc2013-pe-64bit"))
+ << QString::fromLatin1("x86-windows-msvc2012-pe-64bit")
+ << int(DebuggerItem::MatchesPerfectly);
+ QTest::newRow("Windows match 1")
+ << (QStringList() << QLatin1String("x86-windows-msvc2013-pe-64bit"))
+ << QString::fromLatin1("x86-windows-msvc2013-pe-32bit")
+ << int(DebuggerItem::MatchesSomewhat);
+ QTest::newRow("Windows match 2")
+ << (QStringList() << QLatin1String("x86-windows-msvc2013-pe-64bit"))
+ << QString::fromLatin1("x86-windows-msvc2012-pe-32bit")
+ << int(DebuggerItem::MatchesSomewhat);
+ QTest::newRow("Windows mismatch on word size")
+ << (QStringList() << QLatin1String("x86-windows-msvc2013-pe-32bit"))
+ << QString::fromLatin1("x86-windows-msvc2013-pe-64bit")
+ << int(DebuggerItem::DoesNotMatch);
+ QTest::newRow("Windows mismatch on osflavor 1")
+ << (QStringList() << QLatin1String("x86-windows-msvc2013-pe-32bit"))
+ << QString::fromLatin1("x86-windows-msys-pe-64bit")
+ << int(DebuggerItem::DoesNotMatch);
+ QTest::newRow("Windows mismatch on osflavor 2")
+ << (QStringList() << QLatin1String("x86-windows-msys-pe-32bit"))
+ << QString::fromLatin1("x86-windows-msvc2010-pe-64bit")
+ << int(DebuggerItem::DoesNotMatch);
+}
+
+void Debugger::DebuggerPlugin::testDebuggerMatching()
+{
+ QFETCH(QStringList, debugger);
+ QFETCH(QString, target);
+ QFETCH(int, result);
+
+ DebuggerItem::MatchLevel expectedLevel = static_cast<DebuggerItem::MatchLevel>(result);
+
+ QList<Abi> debuggerAbis;
+ foreach (const QString &abi, debugger)
+ debuggerAbis << Abi(abi);
+
+ DebuggerItem item;
+ item.setAbis(debuggerAbis);
+
+ DebuggerItem::MatchLevel level = item.matchTarget(Abi(target));
+
+ QCOMPARE(expectedLevel, level);
+}
+#endif
diff --git a/src/plugins/debugger/debuggerkitinformation.h b/src/plugins/debugger/debuggerkitinformation.h
index de965ca985..dfdf6350a4 100644
--- a/src/plugins/debugger/debuggerkitinformation.h
+++ b/src/plugins/debugger/debuggerkitinformation.h
@@ -110,7 +110,7 @@ public:
static QList<DebuggerItem> debuggers();
static Debugger::Internal::DebuggerItemModel *model();
- static void registerDebugger(const DebuggerItem &item);
+ static QVariant registerDebugger(const DebuggerItem &item);
static void deregisterDebugger(const DebuggerItem &item);
static const DebuggerItem *findByCommand(const Utils::FileName &command);
@@ -121,7 +121,7 @@ public:
static void setItemData(const QVariant &id, const QString& displayName, const Utils::FileName &fileName);
static void removeDebugger(const QVariant &id);
- static void addDebugger(const DebuggerItem &item);
+ static QVariant addDebugger(const DebuggerItem &item);
public slots:
void saveDebuggers();
@@ -164,7 +164,7 @@ public:
ItemList toUserOutput(const ProjectExplorer::Kit *k) const;
- static void setDebugger(ProjectExplorer::Kit *k, const DebuggerItem &item);
+ static void setDebugger(ProjectExplorer::Kit *k, const QVariant &id);
static Core::Id id();
static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *k);
diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h
index c0f6429742..32790efd4f 100644
--- a/src/plugins/debugger/debuggerplugin.h
+++ b/src/plugins/debugger/debuggerplugin.h
@@ -76,6 +76,9 @@ private:
#ifdef WITH_TESTS
private slots:
+ void testDebuggerMatching_data();
+ void testDebuggerMatching();
+
void testBenchmark();
// void testStateMachine();
#endif
diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp
index 1333577332..1e50d13c3a 100644
--- a/src/plugins/debugger/debuggerprotocol.cpp
+++ b/src/plugins/debugger/debuggerprotocol.cpp
@@ -628,6 +628,13 @@ QString decodeData(const QByteArray &ba, int encoding)
const QByteArray decodedBa = QByteArray::fromHex(ba);
return QString::fromUtf8(decodedBa);
}
+ case MillisecondsSinceEpoch: {
+ const qint64 ms = ba.toLongLong();
+ QDateTime d;
+ d.setTimeSpec(Qt::UTC);
+ d.setMSecsSinceEpoch(ms);
+ return d.toString(Qt::TextDate);
+ }
}
qDebug() << "ENCODING ERROR: " << encoding;
return QCoreApplication::translate("Debugger", "<Encoding error>");
diff --git a/src/plugins/debugger/debuggerprotocol.h b/src/plugins/debugger/debuggerprotocol.h
index 6bce7e1aec..a71bb6f133 100644
--- a/src/plugins/debugger/debuggerprotocol.h
+++ b/src/plugins/debugger/debuggerprotocol.h
@@ -204,7 +204,8 @@ enum DebuggerEncoding
Hex2EncodedFloat4 = 25,
Hex2EncodedFloat8 = 26,
IPv6AddressAndHexScopeId = 27,
- Hex2EncodedUtf8WithoutQuotes = 28
+ Hex2EncodedUtf8WithoutQuotes = 28,
+ MillisecondsSinceEpoch = 29
};
// Keep in sync with dumper.py, symbolgroupvalue.cpp of CDB
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index a301f443fe..a7d33fdb5e 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -192,7 +192,7 @@ void DebuggerRunControl::start()
// User canceled input dialog asking for executable when working on library project.
if (d->m_engine->startParameters().startMode == StartInternal
&& d->m_engine->startParameters().executable.isEmpty()) {
- appendMessage(tr("No executable specified.\n"), ErrorMessageFormat);
+ appendMessage(tr("No executable specified.") + QLatin1Char('\n'), ErrorMessageFormat);
emit started();
emit finished();
return;
@@ -232,12 +232,12 @@ void DebuggerRunControl::start()
d->m_engine->startDebugger(this);
if (d->m_running)
- appendMessage(tr("Debugging starts\n"), NormalMessageFormat);
+ appendMessage(tr("Debugging starts") + QLatin1Char('\n'), NormalMessageFormat);
}
void DebuggerRunControl::startFailed()
{
- appendMessage(tr("Debugging has failed\n"), NormalMessageFormat);
+ appendMessage(tr("Debugging has failed") + QLatin1Char('\n'), NormalMessageFormat);
d->m_running = false;
emit finished();
d->m_engine->handleStartFailed();
@@ -245,7 +245,7 @@ void DebuggerRunControl::startFailed()
void DebuggerRunControl::handleFinished()
{
- appendMessage(tr("Debugging has finished\n"), NormalMessageFormat);
+ appendMessage(tr("Debugging has finished") + QLatin1Char('\n'), NormalMessageFormat);
if (d->m_engine)
d->m_engine->handleFinished();
debuggerCore()->runControlFinished(d->m_engine);
diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp
index ce66963e52..13f6326a21 100644
--- a/src/plugins/debugger/gdb/coregdbadapter.cpp
+++ b/src/plugins/debugger/gdb/coregdbadapter.cpp
@@ -211,8 +211,9 @@ void GdbCoreEngine::handleTargetCore(const GdbResponse &response)
postCommand("p 5", CB(handleRoundTrip));
return;
}
- QString msg = tr("Attach to core \"%1\" failed:\n")
+ QString msg = tr("Attach to core \"%1\" failed:")
.arg(startParameters().coreFile)
+ + QLatin1Char('\n')
+ QString::fromLocal8Bit(response.data["msg"].data());
notifyInferiorSetupFailed(msg);
}
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index bdd1c40b36..7e8febf779 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1893,7 +1893,7 @@ void GdbEngine::pythonDumpersFailed()
void GdbEngine::showExecutionError(const QString &message)
{
showMessageBox(QMessageBox::Critical, tr("Execution Error"),
- tr("Cannot continue debugged process:\n") + message);
+ tr("Cannot continue debugged process:") + QLatin1Char('\n') + message);
}
void GdbEngine::handleExecuteContinue(const GdbResponse &response)
@@ -2296,7 +2296,7 @@ void GdbEngine::handleExecuteNext(const GdbResponse &response)
notifyInferiorRunFailed();
} else {
showMessageBox(QMessageBox::Critical, tr("Execution Error"),
- tr("Cannot continue debugged process:\n") + QString::fromLocal8Bit(msg));
+ tr("Cannot continue debugged process:") + QLatin1Char('\n') + QString::fromLocal8Bit(msg));
notifyInferiorIll();
}
}
@@ -3848,7 +3848,7 @@ void GdbEngine::handleMakeSnapshot(const GdbResponse &response)
} else {
QByteArray msg = response.data["msg"].data();
showMessageBox(QMessageBox::Critical, tr("Snapshot Creation Error"),
- tr("Cannot create snapshot:\n") + QString::fromLocal8Bit(msg));
+ tr("Cannot create snapshot:") + QLatin1Char('\n') + QString::fromLocal8Bit(msg));
}
}
@@ -4836,8 +4836,15 @@ void GdbEngine::startGdb(const QStringList &args)
// template <class T> T foo() { return T(0); }
// int main() { return foo<int>(); }
// (gdb) call 'int foo<int>'()
- // /build/buildd/gdb-6.8/gdb/valops.c:2069: internal-error:
- postCommand("set overload-resolution off");
+ // /build/buildd/gdb-6.8/gdb/valops.c:2069: internal-error
+ // This seems to be fixed, however, with 'on' it seems to _require_
+ // explicit casting of function pointers:
+ // GNU gdb (GDB) 7.5.91.20130417-cvs-ubuntu
+ // (gdb) p &Myns::QMetaType::typeName -> $1 = (const char *(*)(int)) 0xb7cf73b0 <Myns::QMetaType::typeName(int)>
+ // (gdb) p Myns::QMetaType::typeName(1024) -> 31^error,msg="Couldn't find method Myns::QMetaType::typeName"
+ // But we can work around on the dumper side. So let's use the default (i.e. 'on')
+ //postCommand("set overload-resolution off");
+
//postCommand(_("set demangle-style none"));
// From the docs:
// Stop means reenter debugger if this signal happens (implies print).
diff --git a/src/plugins/debugger/gdb/gdbplainengine.cpp b/src/plugins/debugger/gdb/gdbplainengine.cpp
index eaa992ec75..4050e9048e 100644
--- a/src/plugins/debugger/gdb/gdbplainengine.cpp
+++ b/src/plugins/debugger/gdb/gdbplainengine.cpp
@@ -78,7 +78,7 @@ void GdbPlainEngine::handleFileExecAndSymbols(const GdbResponse &response)
QString msg = fromLocalEncoding(ba);
// Extend the message a bit in unknown cases.
if (!ba.endsWith("File format not recognized"))
- msg = tr("Starting executable failed:\n") + msg;
+ msg = tr("Starting executable failed:") + QLatin1Char('\n') + msg;
notifyInferiorSetupFailed(msg);
}
}
diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
index fe1913d64e..dfe6587112 100644
--- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
@@ -252,7 +252,8 @@ void GdbRemoteServerEngine::handleFileExecAndSymbols(const GdbResponse &response
callTargetRemote();
} else {
QByteArray reason = response.data["msg"].data();
- QString msg = tr("Reading debug information failed:\n");
+ QString msg = tr("Reading debug information failed:");
+ msg += QLatin1Char('\n');
msg += QString::fromLocal8Bit(reason);
if (reason.endsWith("No such file or directory.")) {
showMessage(_("INFERIOR STARTUP: BINARY NOT FOUND"));
diff --git a/src/plugins/debugger/qml/qmladapter.cpp b/src/plugins/debugger/qml/qmladapter.cpp
index ef7a7434d3..16c6628525 100644
--- a/src/plugins/debugger/qml/qmladapter.cpp
+++ b/src/plugins/debugger/qml/qmladapter.cpp
@@ -141,7 +141,7 @@ void QmlAdapter::connectionStateChanged()
switch (m_conn->state()) {
case QAbstractSocket::UnconnectedState:
{
- showConnectionStatusMessage(tr("Disconnected.\n\n"));
+ showConnectionStatusMessage(tr("Disconnected.") + QLatin1String("\n\n"));
emit disconnected();
break;
@@ -154,7 +154,7 @@ void QmlAdapter::connectionStateChanged()
break;
case QAbstractSocket::ConnectedState:
{
- showConnectionStatusMessage(tr("Connected.\n"));
+ showConnectionStatusMessage(tr("Connected.") + QLatin1Char('\n'));
m_connectionTimer.stop();
diff --git a/src/plugins/debugger/watchdata.cpp b/src/plugins/debugger/watchdata.cpp
index 9cbe253d7e..8cad1a3c13 100644
--- a/src/plugins/debugger/watchdata.cpp
+++ b/src/plugins/debugger/watchdata.cpp
@@ -34,7 +34,6 @@
#include "watchutils.h"
#include "debuggerprotocol.h"
-#include <QTextDocument> // Qt::escape() in Qt 4
#include <QDebug>
////////////////////////////////////////////////////////////////////
@@ -338,11 +337,36 @@ QString WatchData::toString() const
return res + QLatin1Char('}');
}
+static QString htmlEscape(const QString &plain)
+{
+#if QT_VERSION >= 0x050000
+ return Qt::escape(plain);
+#else
+ // Copied from Qt to avoid GUI dependency
+ // (Qt::escape has been moved in Qt 5)
+ QString rich;
+ rich.reserve(int(plain.length() * qreal(1.1)));
+ for (int i = 0; i < plain.length(); ++i) {
+ if (plain.at(i) == QLatin1Char('<'))
+ rich += QLatin1String("&lt;");
+ else if (plain.at(i) == QLatin1Char('>'))
+ rich += QLatin1String("&gt;");
+ else if (plain.at(i) == QLatin1Char('&'))
+ rich += QLatin1String("&amp;");
+ else if (plain.at(i) == QLatin1Char('"'))
+ rich += QLatin1String("&quot;");
+ else
+ rich += plain.at(i);
+ }
+ return rich;
+#endif
+}
+
// Format a tooltip fow with aligned colon.
static void formatToolTipRow(QTextStream &str,
const QString &category, const QString &value)
{
- QString val = Qt::escape(value);
+ QString val = htmlEscape(value);
val.replace(QLatin1Char('\n'), QLatin1String("<br>"));
str << "<tr><td>" << category << "</td><td> : </td><td>"
<< val << "</td></tr>";
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index d06d99cd53..59a65c0ac2 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -2056,22 +2056,23 @@ FakeVimHandler::Private::GlobalData FakeVimHandler::Private::g;
FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget)
{
- //static PythonHighlighterRules pythonRules;
q = parent;
m_textedit = qobject_cast<QTextEdit *>(widget);
m_plaintextedit = qobject_cast<QPlainTextEdit *>(widget);
+
+ init();
+
if (editor()) {
connect(EDITOR(document()), SIGNAL(contentsChange(int,int,int)),
SLOT(onContentsChanged(int,int,int)));
connect(EDITOR(document()), SIGNAL(undoCommandAdded()), SLOT(onUndoCommandAdded()));
m_lastRevision = revision();
}
- //new Highlighter(document(), &pythonRules);
- init();
}
void FakeVimHandler::Private::init()
{
+ m_inFakeVim = false;
m_findStartPosition = -1;
m_visualBlockInsert = false;
m_fakeEnd = false;
@@ -2315,10 +2316,6 @@ void FakeVimHandler::Private::setupWidget()
enterFakeVim();
resetCommandMode();
- if (m_textedit)
- m_textedit->setLineWrapMode(QTextEdit::NoWrap);
- else if (m_plaintextedit)
- m_plaintextedit->setLineWrapMode(QPlainTextEdit::NoWrap);
m_wasReadOnly = EDITOR(isReadOnly());
updateEditor();
@@ -6471,19 +6468,22 @@ int FakeVimHandler::Private::linesInDocument() const
void FakeVimHandler::Private::scrollToLine(int line)
{
- const QTextCursor tc = EDITOR(textCursor());
-
// Don't scroll if the line is already at the top.
updateFirstVisibleLine();
if (line == m_firstVisibleLine)
return;
+ const QTextCursor tc = m_cursor;
+
QTextCursor tc2 = tc;
tc2.setPosition(document()->lastBlock().position());
EDITOR(setTextCursor(tc2));
EDITOR(ensureCursorVisible());
- tc2.setPosition(document()->findBlockByLineNumber(line).position());
+ const QTextBlock block = document()->findBlockByLineNumber(line);
+ const QTextLine textLine = block.isValid()
+ ? block.layout()->lineAt(line - block.firstLineNumber()) : QTextLine();
+ tc2.setPosition(block.position() + (textLine.isValid() ? textLine.textStart() : 0));
EDITOR(setTextCursor(tc2));
EDITOR(ensureCursorVisible());
@@ -6497,7 +6497,7 @@ void FakeVimHandler::Private::scrollToLine(int line)
void FakeVimHandler::Private::updateFirstVisibleLine()
{
const QTextCursor tc = EDITOR(cursorForPosition(QPoint(0,0)));
- m_firstVisibleLine = tc.block().firstLineNumber();
+ m_firstVisibleLine = lineForPosition(tc.position()) - 1;
}
int FakeVimHandler::Private::firstVisibleLine() const
@@ -6507,9 +6507,9 @@ int FakeVimHandler::Private::firstVisibleLine() const
int FakeVimHandler::Private::lastVisibleLine() const
{
- const QTextBlock block =
- document()->findBlockByLineNumber(m_firstVisibleLine + linesOnScreen());
- return block.isValid() ? block.firstLineNumber() : document()->lastBlock().firstLineNumber();
+ const int line = m_firstVisibleLine + linesOnScreen();
+ const QTextBlock block = document()->findBlockByLineNumber(line);
+ return block.isValid() ? line : document()->lastBlock().firstLineNumber();
}
int FakeVimHandler::Private::lineOnTop(int count) const
@@ -6538,7 +6538,7 @@ void FakeVimHandler::Private::updateScrollOffset()
if (line < lineOnTop())
scrollToLine(qMax(0, line - windowScrollOffset()));
else if (line > lineOnBottom())
- scrollToLine(line - linesOnScreen() + windowScrollOffset() + 1);
+ scrollToLine(firstVisibleLine() + line - lineOnBottom());
}
void FakeVimHandler::Private::alignViewportToCursor(AlignmentFlag align, int line,
@@ -7156,8 +7156,12 @@ int FakeVimHandler::Private::lastPositionInLine(int line, bool onlyVisibleLines)
int FakeVimHandler::Private::lineForPosition(int pos) const
{
- QTextBlock block = document()->findBlock(pos);
- return lineNumber(block);
+ const QTextBlock block = document()->findBlock(pos);
+ if (!block.isValid())
+ return 0;
+ const int positionInBlock = pos - block.position();
+ const int lineNumberInBlock = block.layout()->lineForTextPosition(positionInBlock).lineNumber();
+ return block.firstLineNumber() + lineNumberInBlock + 1;
}
void FakeVimHandler::Private::toggleVisualMode(VisualMode visualMode)
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 2af8354999..fc9f05e23e 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -255,6 +255,8 @@ void GenericProject::refresh(RefreshOptions options)
part->displayName = displayName();
part->projectFile = projectFilePath();
+ part->includePaths += projectIncludePaths();
+
Kit *k = activeTarget() ? activeTarget()->kit() : KitManager::defaultKit();
if (ToolChain *tc = ToolChainKitInformation::toolChain(k)) {
QStringList cxxflags; // FIXME: Can we do better?
@@ -263,7 +265,6 @@ void GenericProject::refresh(RefreshOptions options)
}
part->cxxVersion = CppTools::ProjectPart::CXX11; // assume C++11
- part->includePaths += allIncludePaths();
part->defines += m_defines;
// ### add _defines.
@@ -337,15 +338,6 @@ QStringList GenericProject::processEntries(const QStringList &paths,
return absolutePaths;
}
-QStringList GenericProject::allIncludePaths() const
-{
- QStringList paths;
- paths += m_includePaths;
- paths += m_projectIncludePaths;
- paths.removeDuplicates();
- return paths;
-}
-
QStringList GenericProject::projectIncludePaths() const
{
return m_projectIncludePaths;
@@ -356,16 +348,6 @@ QStringList GenericProject::files() const
return m_files;
}
-QStringList GenericProject::includePaths() const
-{
- return m_includePaths;
-}
-
-void GenericProject::setIncludePaths(const QStringList &includePaths)
-{
- m_includePaths = includePaths;
-}
-
QByteArray GenericProject::defines() const
{
return m_defines;
@@ -425,8 +407,6 @@ bool GenericProject::fromMap(const QVariantMap &map)
t->addRunConfiguration(new QtSupport::CustomExecutableRunConfiguration(t));
}
- setIncludePaths(allIncludePaths());
-
refresh(Everything);
return true;
}
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index 0291485f18..3022b20ba1 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -85,7 +85,6 @@ public:
void setIncludePaths(const QStringList &includePaths);
QByteArray defines() const;
- QStringList allIncludePaths() const;
QStringList projectIncludePaths() const;
QStringList files() const;
@@ -111,7 +110,6 @@ private:
QStringList m_rawFileList;
QStringList m_files;
QHash<QString, QString> m_rawListEntries;
- QStringList m_includePaths;
QStringList m_projectIncludePaths;
QByteArray m_defines;
diff --git a/src/plugins/genericprojectmanager/genericprojectwizard.cpp b/src/plugins/genericprojectmanager/genericprojectwizard.cpp
index 5f97652ca5..0f7cbdeacd 100644
--- a/src/plugins/genericprojectmanager/genericprojectwizard.cpp
+++ b/src/plugins/genericprojectmanager/genericprojectwizard.cpp
@@ -163,11 +163,15 @@ Core::GeneratedFiles GenericProjectWizard::generateFiles(const QWizard *w,
QStringList includePaths;
foreach (const QString &path, paths) {
- QFileInfo fileInfo(dir, path);
+ QFileInfo fileInfo(path);
QDir thisDir(fileInfo.absoluteFilePath());
- if (! thisDir.entryList(nameFilters, QDir::Files).isEmpty())
- includePaths.append(path);
+ if (! thisDir.entryList(nameFilters, QDir::Files).isEmpty()) {
+ QString relative = dir.relativeFilePath(path);
+ if (relative.isEmpty())
+ relative = QLatin1String(".");
+ includePaths.append(relative);
+ }
}
Core::GeneratedFile generatedCreatorFile(creatorFileName);
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 739b50fb57..80eddec1e0 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2665,11 +2665,6 @@ void GitClient::continueCommandIfNeeded(const QString &workingDirectory)
{
CommandInProgress command = checkCommandInProgress(workingDirectory);
switch (command) {
- case Merge:
- continuePreviousGitCommand(workingDirectory, tr("Continue Merge"),
- tr("Merge is in progress. What do you want to do?"),
- tr("Continue"), QLatin1String("merge"));
- break;
case Rebase:
case RebaseMerge:
continuePreviousGitCommand(workingDirectory, tr("Continue Rebase"),
@@ -2677,6 +2672,11 @@ void GitClient::continueCommandIfNeeded(const QString &workingDirectory)
tr("Continue"), QLatin1String("rebase"),
command != RebaseMerge);
break;
+ case Merge:
+ continuePreviousGitCommand(workingDirectory, tr("Continue Merge"),
+ tr("You need to commit changes to finish merge.\nCommit now?"),
+ tr("Commit"), QLatin1String("merge"));
+ break;
case Revert:
continuePreviousGitCommand(workingDirectory, tr("Continue Revert"),
tr("You need to commit changes to finish revert.\nCommit now?"),
@@ -3032,9 +3032,9 @@ bool GitClient::getCommitData(const QString &workingDirectory,
static inline QString msgCommitted(const QString &amendSHA1, int fileCount)
{
if (amendSHA1.isEmpty())
- return GitClient::tr("Committed %n file(s).\n", 0, fileCount);
+ return GitClient::tr("Committed %n file(s).", 0, fileCount) + QLatin1Char('\n');
if (fileCount)
- return GitClient::tr("Amended \"%1\" (%n file(s)).\n", 0, fileCount).arg(amendSHA1);
+ return GitClient::tr("Amended \"%1\" (%n file(s)).", 0, fileCount).arg(amendSHA1) + QLatin1Char('\n');
return GitClient::tr("Amended \"%1\".").arg(amendSHA1);
}
diff --git a/src/plugins/git/stashdialog.cpp b/src/plugins/git/stashdialog.cpp
index ffbf7ecb3f..fecdedddd8 100644
--- a/src/plugins/git/stashdialog.cpp
+++ b/src/plugins/git/stashdialog.cpp
@@ -212,7 +212,7 @@ void StashDialog::showCurrent()
{
const int index = currentRow();
QTC_ASSERT(index >= 0, return);
- gitClient()->show(m_repository, m_model->at(index).name);
+ gitClient()->show(m_repository, QString(m_model->at(index).name));
}
// Suggest Branch name to restore 'stash@{0}' -> 'stash0-date'
diff --git a/src/plugins/ios/iosconfigurations.cpp b/src/plugins/ios/iosconfigurations.cpp
index 9dac4889b3..ebfca0293f 100644
--- a/src/plugins/ios/iosconfigurations.cpp
+++ b/src/plugins/ios/iosconfigurations.cpp
@@ -316,7 +316,8 @@ void IosConfigurations::updateAutomaticKitList()
debugger.setDisplayName(tr("IOS Debugger"));
debugger.setAutoDetected(true);
debugger.setAbi(pToolchain->targetAbi());
- Debugger::DebuggerKitInformation::setDebugger(newKit, debugger);
+ QVariant id = Debugger::DebuggerItemManager::registerDebugger(debugger);
+ Debugger::DebuggerKitInformation::setDebugger(newKit, id);
SysRootKitInformation::setSysRoot(newKit, p.sdkPath);
// QmakeProjectManager::QmakeKitInformation::setMkspec(newKit,
diff --git a/src/plugins/ios/iosruncontrol.cpp b/src/plugins/ios/iosruncontrol.cpp
index 551ef33f85..6db4fa7d44 100644
--- a/src/plugins/ios/iosruncontrol.cpp
+++ b/src/plugins/ios/iosruncontrol.cpp
@@ -64,7 +64,7 @@ void IosRunControl::start()
SLOT(handleRemoteOutput(QString)));
connect(m_runner, SIGNAL(finished(bool)),
SLOT(handleRemoteProcessFinished(bool)));
- appendMessage(tr("Starting remote process.\n"), Utils::NormalMessageFormat);
+ appendMessage(tr("Starting remote process.") + QLatin1Char('\n'), Utils::NormalMessageFormat);
m_runner->start();
}
diff --git a/src/plugins/projectexplorer/applicationlauncher.cpp b/src/plugins/projectexplorer/applicationlauncher.cpp
index dbfef44220..a3667fbece 100644
--- a/src/plugins/projectexplorer/applicationlauncher.cpp
+++ b/src/plugins/projectexplorer/applicationlauncher.cpp
@@ -285,7 +285,7 @@ void ApplicationLauncher::bringToForeground()
QString ApplicationLauncher::msgWinCannotRetrieveDebuggingOutput()
{
- return tr("Cannot retrieve debugging output.\n");
+ return tr("Cannot retrieve debugging output.") + QLatin1Char('\n');
}
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/localapplicationruncontrol.cpp b/src/plugins/projectexplorer/localapplicationruncontrol.cpp
index ff19195f15..4a680a551d 100644
--- a/src/plugins/projectexplorer/localapplicationruncontrol.cpp
+++ b/src/plugins/projectexplorer/localapplicationruncontrol.cpp
@@ -98,15 +98,15 @@ void LocalApplicationRunControl::start()
{
emit started();
if (m_executable.isEmpty()) {
- appendMessage(tr("No executable specified.\n"), Utils::ErrorMessageFormat);
+ appendMessage(tr("No executable specified.") + QLatin1Char('\n'), Utils::ErrorMessageFormat);
emit finished();
} else if (!QFileInfo(m_executable).exists()){
- appendMessage(tr("Executable %1 does not exist.\n").arg(m_executable),
+ appendMessage(tr("Executable %1 does not exist.").arg(m_executable) + QLatin1Char('\n'),
Utils::ErrorMessageFormat);
emit finished();
} else {
m_running = true;
- QString msg = tr("Starting %1...\n").arg(QDir::toNativeSeparators(m_executable));
+ QString msg = tr("Starting %1...").arg(QDir::toNativeSeparators(m_executable)) + QLatin1Char('\n');
appendMessage(msg, Utils::NormalMessageFormat);
m_applicationLauncher.start(m_runMode, m_executable, m_commandLineArguments);
setApplicationProcessHandle(ProcessHandle(m_applicationLauncher.applicationPID()));
@@ -147,13 +147,13 @@ void LocalApplicationRunControl::processExited(int exitCode, QProcess::ExitStatu
setApplicationProcessHandle(ProcessHandle());
QString msg;
if (status == QProcess::CrashExit) {
- msg = tr("%1 crashed\n")
+ msg = tr("%1 crashed")
.arg(QDir::toNativeSeparators(m_executable));
} else {
- msg = tr("%1 exited with code %2\n")
+ msg = tr("%1 exited with code %2")
.arg(QDir::toNativeSeparators(m_executable)).arg(exitCode);
}
- appendMessage(msg, Utils::NormalMessageFormat);
+ appendMessage(msg + QLatin1Char('\n'), Utils::NormalMessageFormat);
emit finished();
}
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 26385f6c12..6321d7a0da 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1985,8 +1985,8 @@ int ProjectExplorerPlugin::queue(QList<Project *> projects, QList<Id> stepIds)
foreach (Project *pro, projects)
if (pro && pro->needsConfiguration())
- preambleMessage.append(tr("The project %1 is not configured, skipping it.\n")
- .arg(pro->displayName()));
+ preambleMessage.append(tr("The project %1 is not configured, skipping it.")
+ .arg(pro->displayName()) + QLatin1Char('\n'));
foreach (Id id, stepIds) {
foreach (Project *pro, projects) {
if (!pro || !pro->activeTarget())
@@ -2204,9 +2204,10 @@ QPair<bool, QString> ProjectExplorerPlugin::buildSettingsEnabledForSession()
&& project->activeTarget()->activeBuildConfiguration()
&& !project->activeTarget()->activeBuildConfiguration()->isEnabled()) {
result.first = false;
- result.second += tr("Building '%1' is disabled: %2\n")
+ result.second += tr("Building '%1' is disabled: %2")
.arg(project->displayName(),
project->activeTarget()->activeBuildConfiguration()->disabledReason());
+ result.second += QLatin1Char('\n');
}
}
}
@@ -2788,7 +2789,8 @@ void ProjectExplorerPlugin::addExistingFiles(ProjectNode *projectNode, const QSt
projectNode->addFiles(fileNames, &notAdded);
if (!notAdded.isEmpty()) {
- QString message = tr("Could not add following files to project %1:\n").arg(projectNode->displayName());
+ QString message = tr("Could not add following files to project %1:").arg(projectNode->displayName());
+ message += QLatin1Char('\n');
QString files = notAdded.join(QString(QLatin1Char('\n')));
QMessageBox::warning(ICore::mainWindow(), tr("Adding Files to Project Failed"),
message + files);
diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp
index f7d3c32db4..24cba5f192 100644
--- a/src/plugins/projectexplorer/projectfilewizardextension.cpp
+++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp
@@ -303,7 +303,8 @@ void ProjectFileWizardExtension::firstExtensionPageShown(
// <Implicitly Add>
m_context->page->setNoneLabel(tr("<Implicitly Add>"));
- QString text = tr("The files are implicitly added to the projects:\n");
+ QString text = tr("The files are implicitly added to the projects:");
+ text += QLatin1Char('\n');
foreach (const ProjectEntry &project, deployingProjects) {
text += project.fileName;
text += QLatin1Char('\n');
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 0cf020a9c7..edf84b03cb 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -237,14 +237,15 @@ RunSettingsWidget::RunSettingsWidget(Target *target)
m_addRunMenu = new QMenu(m_addRunToolButton);
m_addRunToolButton->setMenu(m_addRunMenu);
+ RunConfiguration *rc = m_target->activeRunConfiguration();
m_runConfigurationCombo->setModel(m_runConfigurationsModel);
m_runConfigurationCombo->setCurrentIndex(
- m_runConfigurationsModel->indexFor(m_target->activeRunConfiguration()).row());
+ m_runConfigurationsModel->indexFor(rc).row());
m_removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
- m_renameRunButton->setEnabled(m_target->activeRunConfiguration());
+ m_renameRunButton->setEnabled(rc);
- setConfigurationWidget(m_target->activeRunConfiguration());
+ setConfigurationWidget(rc);
connect(m_addRunMenu, SIGNAL(aboutToShow()),
this, SLOT(aboutToShowAddMenu()));
@@ -523,12 +524,16 @@ void RunSettingsWidget::updateDeployConfiguration(DeployConfiguration *dc)
void RunSettingsWidget::setConfigurationWidget(RunConfiguration *rc)
{
+ if (rc == m_runConfiguration)
+ return;
+
delete m_runConfigurationWidget;
m_runConfigurationWidget = 0;
removeSubWidgets();
if (!rc)
return;
m_runConfigurationWidget = rc->createConfigurationWidget();
+ m_runConfiguration = rc;
if (m_runConfigurationWidget)
m_runLayout->addWidget(m_runConfigurationWidget);
@@ -567,7 +572,7 @@ QString RunSettingsWidget::uniqueRCName(const QString &name)
void RunSettingsWidget::addRunControlWidgets()
{
- foreach (IRunConfigurationAspect *aspect, m_target->activeRunConfiguration()->extraAspects()) {
+ foreach (IRunConfigurationAspect *aspect, m_runConfiguration->extraAspects()) {
ProjectExplorer::RunConfigWidget *rcw = aspect->createConfigurationWidget();
if (rcw)
addSubWidget(rcw);
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index d062862a2c..504871cb5b 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -403,13 +403,15 @@ Target *TargetSettingsPanelWidget::cloneTarget(Target *sourceTarget, Kit *k)
QString error;
if (!buildconfigurationError.isEmpty())
- error += tr("Build configurations:\n")
+ error += tr("Build configurations:")
+ + QLatin1Char('\n')
+ buildconfigurationError.join(QLatin1String("\n"));
if (!deployconfigurationError.isEmpty()) {
if (!error.isEmpty())
error.append(QLatin1Char('\n'));
- error += tr("Deploy configurations:\n")
+ error += tr("Deploy configurations:")
+ + QLatin1Char('\n')
+ deployconfigurationError.join(QLatin1String("\n"));
}
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 87123b5ef6..03f5c72654 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -115,6 +115,8 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
connect(&m_parsingDelay, SIGNAL(timeout()), this, SLOT(parseCurrentBuildConfiguration()));
updateDocuments(QSet<QString>() << fileName);
+
+ // NOTE: QbsProjectNode does not use this as a parent!
m_rootProjectNode = new QbsProjectNode(this); // needs documents to be initialized!
}
@@ -126,6 +128,12 @@ QbsProject::~QbsProject()
m_qbsSetupProjectJob->cancel();
delete m_qbsSetupProjectJob;
}
+
+ // Deleting the root node triggers a few things, make sure rootProjectNode
+ // returns 0 already
+ QbsProjectNode *root = m_rootProjectNode;
+ m_rootProjectNode = 0;
+ delete root;
}
QString QbsProject::displayName() const
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
index 51d4517476..195a24afb3 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
@@ -29,6 +29,8 @@
#include "propertyeditorcontextobject.h"
+#include <QQmlContext>
+
namespace QmlDesigner {
PropertyEditorContextObject::PropertyEditorContextObject(QObject *parent) :
@@ -37,7 +39,9 @@ PropertyEditorContextObject::PropertyEditorContextObject(QObject *parent) :
m_selectionChanged(false),
m_backendValues(0),
m_majorVersion(-1),
- m_minorVersion(-1)
+ m_minorVersion(-1),
+ m_qmlComponent(0),
+ m_qmlContext(0)
{
}
@@ -73,4 +77,94 @@ void PropertyEditorContextObject::setMinorVersion(int minorVersion)
emit minorVersionChanged();
}
+void PropertyEditorContextObject::insertInQmlContext(QQmlContext *context)
+{
+ m_qmlContext = context;
+ m_qmlContext->setContextObject(this);
+}
+
+QQmlComponent *PropertyEditorContextObject::specificQmlComponent()
+{
+ if (m_qmlComponent)
+ return m_qmlComponent;
+
+ m_qmlComponent = new QQmlComponent(m_qmlContext->engine(), this);
+
+ m_qmlComponent->setData(m_specificQmlData.toAscii(), QUrl::fromLocalFile("specfics.qml"));
+
+ return m_qmlComponent;
+}
+
+void PropertyEditorContextObject::setGlobalBaseUrl(const QUrl &newBaseUrl)
+{
+ if (newBaseUrl == m_globalBaseUrl)
+ return;
+
+ m_globalBaseUrl = newBaseUrl;
+ emit globalBaseUrlChanged();
+}
+
+void PropertyEditorContextObject::setSpecificsUrl(const QUrl &newSpecificsUrl)
+{
+ if (newSpecificsUrl == m_specificsUrl)
+ return;
+
+ m_specificsUrl = newSpecificsUrl;
+ emit specificsUrlChanged();
+}
+
+void PropertyEditorContextObject::setSpecificQmlData(const QString &newSpecificQmlData)
+{
+ if (m_specificQmlData == newSpecificQmlData)
+ return;
+
+ m_specificQmlData = newSpecificQmlData;
+ emit specificQmlDataChanged();
+
+ delete m_qmlComponent;
+ m_qmlComponent = 0;
+ emit specificQmlComponentChanged();
+}
+
+void PropertyEditorContextObject::setStateName(const QString &newStateName)
+{
+ if (newStateName == m_stateName)
+ return;
+
+ m_stateName = newStateName;
+ emit stateNameChanged();
+}
+
+void PropertyEditorContextObject::setIsBaseState(bool newIsBaseState)
+{
+ if (newIsBaseState == m_isBaseState)
+ return;
+
+ m_isBaseState = newIsBaseState;
+ emit isBaseStateChanged();
+}
+
+void PropertyEditorContextObject::setSelectionChanged(bool newSelectionChanged)
+{
+ if (newSelectionChanged == m_selectionChanged)
+ return;
+
+ m_selectionChanged = newSelectionChanged;
+ emit selectionChangedChanged();
+}
+
+void PropertyEditorContextObject::setBackendValues(QQmlPropertyMap *newBackendValues)
+{
+ if (newBackendValues == m_backendValues)
+ return;
+
+ m_backendValues = newBackendValues;
+ emit backendValuesChanged();
+}
+
+void PropertyEditorContextObject::triggerSelectionChanged()
+{
+ setSelectionChanged(!m_selectionChanged);
+}
+
} //QmlDesigner
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h
index 96f43da3ca..6eb7b9bd4b 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h
@@ -33,6 +33,7 @@
#include <QObject>
#include <QUrl>
#include <QQmlPropertyMap>
+#include <QQmlComponent>
#include <QColor>
namespace QmlDesigner {
@@ -55,6 +56,8 @@ class PropertyEditorContextObject : public QObject
Q_PROPERTY(QQmlPropertyMap* backendValues READ backendValues WRITE setBackendValues NOTIFY backendValuesChanged)
+ Q_PROPERTY(QQmlComponent* specificQmlComponent READ specificQmlComponent NOTIFY specificQmlComponentChanged)
+
public:
PropertyEditorContextObject(QObject *parent = 0);
@@ -75,6 +78,9 @@ public:
int minorVersion() const;
void setMinorVersion(int minorVersion);
+ void insertInQmlContext(QQmlContext *context);
+ QQmlComponent *specificQmlComponent();
+
signals:
void globalBaseUrlChanged();
void specificsUrlChanged();
@@ -85,75 +91,24 @@ signals:
void backendValuesChanged();
void majorVersionChanged();
void minorVersionChanged();
+ void specificQmlComponentChanged();
public slots:
- void setGlobalBaseUrl(const QUrl &newBaseUrl)
- {
- if (newBaseUrl == m_globalBaseUrl)
- return;
-
- m_globalBaseUrl = newBaseUrl;
- emit globalBaseUrlChanged();
- }
-
- void setSpecificsUrl(const QUrl &newSpecificsUrl)
- {
- if (newSpecificsUrl == m_specificsUrl)
- return;
-
- m_specificsUrl = newSpecificsUrl;
- emit specificsUrlChanged();
- }
-
- void setSpecificQmlData(const QString &newSpecificQmlData)
- {
- if (m_specificQmlData == newSpecificQmlData)
- return;
-
- m_specificQmlData = newSpecificQmlData;
- emit specificQmlDataChanged();
- }
-
- void setStateName(const QString &newStateName)
- {
- if (newStateName == m_stateName)
- return;
-
- m_stateName = newStateName;
- emit stateNameChanged();
- }
-
- void setIsBaseState(bool newIsBaseState)
- {
- if (newIsBaseState == m_isBaseState)
- return;
-
- m_isBaseState = newIsBaseState;
- emit isBaseStateChanged();
- }
-
- void setSelectionChanged(bool newSelectionChanged)
- {
- if (newSelectionChanged == m_selectionChanged)
- return;
-
- m_selectionChanged = newSelectionChanged;
- emit selectionChangedChanged();
- }
-
- void setBackendValues(QQmlPropertyMap* newBackendValues)
- {
- if (newBackendValues == m_backendValues)
- return;
-
- m_backendValues = newBackendValues;
- emit backendValuesChanged();
- }
-
- void triggerSelectionChanged()
- {
- setSelectionChanged(!m_selectionChanged);
- }
+ void setGlobalBaseUrl(const QUrl &newBaseUrl);
+
+ void setSpecificsUrl(const QUrl &newSpecificsUrl);
+
+ void setSpecificQmlData(const QString &newSpecificQmlData);
+
+ void setStateName(const QString &newStateName);
+
+ void setIsBaseState(bool newIsBaseState);
+
+ void setSelectionChanged(bool newSelectionChanged);
+
+ void setBackendValues(QQmlPropertyMap* newBackendValues);
+
+ void triggerSelectionChanged();
private:
QUrl m_globalBaseUrl;
@@ -169,6 +124,8 @@ private:
int m_majorVersion;
int m_minorVersion;
+ QQmlComponent *m_qmlComponent;
+ QQmlContext *m_qmlContext;
};
} //QmlDesigner {
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
index 37fa5bc6df..05b2511778 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
@@ -129,7 +129,7 @@ PropertyEditorQmlBackend::PropertyEditorQmlBackend(PropertyEditorView *propertyE
m_dummyPropertyEditorValue->setValue("#000000");
context()->setContextProperty("dummyBackendValue", m_dummyPropertyEditorValue.data());
m_contextObject->setBackendValues(&m_backendValuesPropertyMap);
- context()->setContextObject(m_contextObject.data());
+ m_contextObject->insertInQmlContext(context());
QObject::connect(&m_backendValuesPropertyMap, SIGNAL(valueChanged(QString,QVariant)), propertyEditor, SLOT(changeValue(QString)));
}
@@ -352,9 +352,9 @@ QString PropertyEditorQmlBackend::templateGeneration(NodeMetaInfo type,
QStringList imports = variantToStringList(templateConfiguration()->property(QLatin1String("imports")));
QString qmlTemplate = imports.join(QLatin1String("\n")) + QLatin1Char('\n');
- qmlTemplate += QLatin1String("GroupBox {\n");
+ qmlTemplate += QLatin1String("Section {\n");
qmlTemplate += QString(QLatin1String("caption: \"%1\"\n")).arg(QString::fromUtf8(objectNode.modelNode().simplifiedTypeName()));
- qmlTemplate += QLatin1String("layout: VerticalLayout {\n");
+ qmlTemplate += QLatin1String("SectionLayout {\n");
QList<PropertyName> orderedList = type.propertyNames();
qSort(orderedList);
@@ -390,8 +390,8 @@ QString PropertyEditorQmlBackend::templateGeneration(NodeMetaInfo type,
}
}
}
- qmlTemplate += QLatin1String("}\n"); //VerticalLayout
- qmlTemplate += QLatin1String("}\n"); //GroupBox
+ qmlTemplate += QLatin1String("}\n"); //Section
+ qmlTemplate += QLatin1String("}\n"); //SectionLayout
if (emptyTemplate)
return QString();
diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
index 5375d03a0a..1bb16e1cb7 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
@@ -64,7 +64,7 @@ static inline void restoreProperty(ModelNode node, const PropertyName &propertyN
namespace Internal {
QmlAnchorBindingProxy::QmlAnchorBindingProxy(QObject *parent) :
- QObject(parent), m_locked(false)
+ QObject(parent), m_locked(false), m_ignoreQml(false)
{
}
@@ -76,6 +76,8 @@ void QmlAnchorBindingProxy::setup(const QmlItemNode &fxItemNode)
{
m_qmlItemNode = fxItemNode;
+ m_ignoreQml = true;
+
if (m_qmlItemNode.modelNode().hasParentProperty()) {
setDefaultAnchorTarget(m_qmlItemNode.modelNode().parentProperty().parentModelNode());
} else {
@@ -137,6 +139,10 @@ void QmlAnchorBindingProxy::setup(const QmlItemNode &fxItemNode)
emit verticalTargetChanged();
emit horizontalTargetChanged();
}
+
+ emit invalidated();
+
+ m_ignoreQml = false;
}
void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode)
@@ -146,6 +152,8 @@ void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode)
m_qmlItemNode = fxItemNode;
+ m_ignoreQml = true;
+
m_verticalTarget = m_horizontalTarget = m_topTarget = m_bottomTarget = m_leftTarget = m_rightTarget = m_qmlItemNode.modelNode().parentProperty().parentModelNode();
if (topAnchored()) {
@@ -201,6 +209,10 @@ void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode)
emit verticalTargetChanged();
emit horizontalTargetChanged();
}
+
+ emit invalidated();
+
+ m_ignoreQml = false;
}
bool QmlAnchorBindingProxy::hasParent()
@@ -243,13 +255,20 @@ bool QmlAnchorBindingProxy::hasAnchors()
}
-void QmlAnchorBindingProxy::setTopTarget(const QVariant &target)
+void QmlAnchorBindingProxy::setTopTarget(const QString &target)
{
- QmlItemNode newTarget(target.value<ModelNode>());
+
+ if (m_ignoreQml)
+ return;
+
+ QmlItemNode newTarget(targetIdToNode(target));
if (newTarget == m_topTarget)
return;
+ if (!newTarget.isValid())
+ return;
+
RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
m_topTarget = newTarget;
@@ -259,13 +278,22 @@ void QmlAnchorBindingProxy::setTopTarget(const QVariant &target)
}
-void QmlAnchorBindingProxy::setBottomTarget(const QVariant &target)
+void QmlAnchorBindingProxy::setBottomTarget(const QString &target)
{
- QmlItemNode newTarget(target.value<ModelNode>());
+ if (m_ignoreQml)
+ return;
+
+ if (m_ignoreQml)
+ return;
+
+ QmlItemNode newTarget(targetIdToNode(target));
if (newTarget == m_bottomTarget)
return;
+ if (!newTarget.isValid())
+ return;
+
RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
m_bottomTarget = newTarget;
@@ -274,13 +302,19 @@ void QmlAnchorBindingProxy::setBottomTarget(const QVariant &target)
emit bottomTargetChanged();
}
-void QmlAnchorBindingProxy::setLeftTarget(const QVariant &target)
+void QmlAnchorBindingProxy::setLeftTarget(const QString &target)
{
- QmlItemNode newTarget(target.value<ModelNode>());
+ if (m_ignoreQml)
+ return;
+
+ QmlItemNode newTarget(targetIdToNode(target));
if (newTarget == m_leftTarget)
return;
+ if (!newTarget.isValid())
+ return;
+
RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
m_leftTarget = newTarget;
@@ -289,13 +323,19 @@ void QmlAnchorBindingProxy::setLeftTarget(const QVariant &target)
emit leftTargetChanged();
}
-void QmlAnchorBindingProxy::setRightTarget(const QVariant &target)
+void QmlAnchorBindingProxy::setRightTarget(const QString &target)
{
- QmlItemNode newTarget(target.value<ModelNode>());
+ if (m_ignoreQml)
+ return;
+
+ QmlItemNode newTarget(targetIdToNode(target));
if (newTarget == m_rightTarget)
return;
+ if (!newTarget.isValid())
+ return;
+
RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
m_rightTarget = newTarget;
@@ -304,13 +344,19 @@ void QmlAnchorBindingProxy::setRightTarget(const QVariant &target)
emit rightTargetChanged();
}
-void QmlAnchorBindingProxy::setVerticalTarget(const QVariant &target)
+void QmlAnchorBindingProxy::setVerticalTarget(const QString &target)
{
- QmlItemNode newTarget(target.value<ModelNode>());
+ if (m_ignoreQml)
+ return;
+
+ QmlItemNode newTarget(targetIdToNode(target));
if (newTarget == m_verticalTarget)
return;
+ if (!newTarget.isValid())
+ return;
+
RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
m_verticalTarget = newTarget;
@@ -319,13 +365,19 @@ void QmlAnchorBindingProxy::setVerticalTarget(const QVariant &target)
emit verticalTargetChanged();
}
-void QmlAnchorBindingProxy::setHorizontalTarget(const QVariant &target)
+void QmlAnchorBindingProxy::setHorizontalTarget(const QString &target)
{
- QmlItemNode newTarget(target.value<ModelNode>());
+ if (m_ignoreQml)
+ return;
+
+ QmlItemNode newTarget(targetIdToNode(target));
if (newTarget == m_horizontalTarget)
return;
+ if (!newTarget.isValid())
+ return;
+
RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
m_horizontalTarget = newTarget;
@@ -334,6 +386,43 @@ void QmlAnchorBindingProxy::setHorizontalTarget(const QVariant &target)
emit horizontalTargetChanged();
}
+QStringList QmlAnchorBindingProxy::possibleTargetItems() const
+{
+ QStringList stringList;
+ if (!m_qmlItemNode.isValid())
+ return stringList;
+
+ QList<QmlItemNode> itemList;
+
+ if (m_qmlItemNode.instanceParent().modelNode().isValid())
+ itemList = toQmlItemNodeList(m_qmlItemNode.instanceParent().modelNode().allDirectSubModelNodes());
+ itemList.removeOne(m_qmlItemNode);
+ //We currently have no instanceChildren().
+ //So we double check here if the instanceParents are equal.
+ foreach (const QmlItemNode &node, itemList)
+ if (node.isValid() && (node.instanceParent().modelNode() != m_qmlItemNode.instanceParent().modelNode()))
+ itemList.removeAll(node);
+
+ foreach (const QmlItemNode &itemNode, itemList) {
+ if (itemNode.isValid() && !itemNode.id().isEmpty()) {
+ stringList.append(itemNode.id());
+ }
+ }
+
+ QmlItemNode parent(m_qmlItemNode.instanceParent().toQmlItemNode());
+
+ if (parent.isValid()) {
+ stringList.append(QLatin1String("parent"));
+ }
+
+ return stringList;
+}
+
+int QmlAnchorBindingProxy::indexOfPossibleTargetItem(const QString &targetName) const
+{
+ return possibleTargetItems().indexOf(targetName);
+}
+
void QmlAnchorBindingProxy::resetLayout() {
RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
@@ -512,6 +601,29 @@ void QmlAnchorBindingProxy::calcRightMargin()
m_locked = false;
}
+QmlItemNode QmlAnchorBindingProxy::targetIdToNode(const QString &id) const
+{
+ QmlItemNode itemNode;
+
+ if (m_qmlItemNode.isValid() && m_qmlItemNode.view()) {
+
+ itemNode = m_qmlItemNode.view()->modelNodeForId(id);
+
+ if (id == QLatin1String("parent"))
+ itemNode = m_qmlItemNode.instanceParent().modelNode();
+ }
+
+ return itemNode;
+}
+
+QString QmlAnchorBindingProxy::idForNode(const QmlItemNode &qmlItemNode) const
+{
+ if (m_qmlItemNode.instanceParent().modelNode() == qmlItemNode)
+ return QLatin1String("parent");
+
+ return qmlItemNode.id();
+}
+
ModelNode QmlAnchorBindingProxy::modelNode() const
{
return m_qmlItemNode.modelNode();
@@ -633,6 +745,37 @@ bool QmlAnchorBindingProxy::verticalCentered()
return m_qmlItemNode.isValid() && m_qmlItemNode.anchors().instanceHasAnchor(AnchorLine::VerticalCenter);
}
+QString QmlAnchorBindingProxy::topTarget() const
+{
+ qDebug() << "top node" << idForNode(m_topTarget);
+ return idForNode(m_topTarget);
+}
+
+QString QmlAnchorBindingProxy::bottomTarget() const
+{
+ return idForNode(m_bottomTarget);
+}
+
+QString QmlAnchorBindingProxy::leftTarget() const
+{
+ return idForNode(m_leftTarget);
+}
+
+QString QmlAnchorBindingProxy::rightTarget() const
+{
+ return idForNode(m_rightTarget);
+}
+
+QString QmlAnchorBindingProxy::verticalTarget() const
+{
+ return idForNode(m_verticalTarget);
+}
+
+QString QmlAnchorBindingProxy::horizontalTarget() const
+{
+ return idForNode(m_horizontalTarget);
+}
+
bool QmlAnchorBindingProxy::horizontalCentered()
{
return m_qmlItemNode.isValid() && m_qmlItemNode.anchors().instanceHasAnchor(AnchorLine::HorizontalCenter);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h
index 619fcf0c5c..f79e1b5b93 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h
@@ -52,13 +52,13 @@ class QmlAnchorBindingProxy : public QObject
Q_PROPERTY(bool rightAnchored READ rightAnchored WRITE setRightAnchor NOTIFY rightAnchorChanged)
Q_PROPERTY(bool hasParent READ hasParent NOTIFY parentChanged)
- Q_PROPERTY(QVariant topTarget READ topTarget WRITE setTopTarget NOTIFY topTargetChanged)
- Q_PROPERTY(QVariant bottomTarget READ bottomTarget WRITE setBottomTarget NOTIFY bottomTargetChanged)
- Q_PROPERTY(QVariant leftTarget READ leftTarget WRITE setLeftTarget NOTIFY leftTargetChanged)
- Q_PROPERTY(QVariant rightTarget READ rightTarget WRITE setRightTarget NOTIFY rightTargetChanged)
+ Q_PROPERTY(QString topTarget READ topTarget WRITE setTopTarget NOTIFY topTargetChanged)
+ Q_PROPERTY(QString bottomTarget READ bottomTarget WRITE setBottomTarget NOTIFY bottomTargetChanged)
+ Q_PROPERTY(QString leftTarget READ leftTarget WRITE setLeftTarget NOTIFY leftTargetChanged)
+ Q_PROPERTY(QString rightTarget READ rightTarget WRITE setRightTarget NOTIFY rightTargetChanged)
- Q_PROPERTY(QVariant verticalTarget READ verticalTarget WRITE setVerticalTarget NOTIFY verticalTargetChanged)
- Q_PROPERTY(QVariant horizontalTarget READ horizontalTarget WRITE setHorizontalTarget NOTIFY horizontalTargetChanged)
+ Q_PROPERTY(QString verticalTarget READ verticalTarget WRITE setVerticalTarget NOTIFY verticalTargetChanged)
+ Q_PROPERTY(QString horizontalTarget READ horizontalTarget WRITE setHorizontalTarget NOTIFY horizontalTargetChanged)
Q_PROPERTY(bool hasAnchors READ hasAnchors NOTIFY anchorsChanged)
Q_PROPERTY(bool isFilled READ isFilled NOTIFY anchorsChanged)
@@ -67,6 +67,8 @@ class QmlAnchorBindingProxy : public QObject
Q_PROPERTY(bool verticalCentered READ verticalCentered WRITE setVerticalCentered NOTIFY centeredVChanged)
Q_PROPERTY(QVariant itemNode READ itemNode NOTIFY itemNodeChanged)
+ Q_PROPERTY(QStringList possibleTargetItems READ possibleTargetItems NOTIFY itemNodeChanged)
+
public:
//only enable if node has parent
@@ -92,23 +94,26 @@ public:
bool horizontalCentered();
bool verticalCentered();
- QVariant itemNode() const { return QVariant::fromValue(m_qmlItemNode.modelNode()); }
+ QVariant itemNode() const { return QVariant::fromValue(m_qmlItemNode.modelNode().id()); }
- QVariant topTarget() const { return QVariant::fromValue(m_topTarget.modelNode()); }
- QVariant bottomTarget() const { return QVariant::fromValue(m_bottomTarget.modelNode()); }
- QVariant leftTarget() const { return QVariant::fromValue(m_leftTarget.modelNode()); }
- QVariant rightTarget() const { return QVariant::fromValue(m_rightTarget.modelNode()); }
+ QString topTarget() const;
+ QString bottomTarget() const;
+ QString leftTarget() const;
+ QString rightTarget() const;
- QVariant verticalTarget() const { return QVariant::fromValue(m_verticalTarget.modelNode()); }
- QVariant horizontalTarget() const { return QVariant::fromValue(m_horizontalTarget.modelNode()); }
+ QString verticalTarget() const;
+ QString horizontalTarget() const;
public:
- void setTopTarget(const QVariant &target);
- void setBottomTarget(const QVariant &target);
- void setLeftTarget(const QVariant &target);
- void setRightTarget(const QVariant &target);
- void setVerticalTarget(const QVariant &target);
- void setHorizontalTarget(const QVariant &target);
+ void setTopTarget(const QString &target);
+ void setBottomTarget(const QString &target);
+ void setLeftTarget(const QString &target);
+ void setRightTarget(const QString &target);
+ void setVerticalTarget(const QString &target);
+ void setHorizontalTarget(const QString &target);
+
+ QStringList possibleTargetItems() const;
+ Q_INVOKABLE int indexOfPossibleTargetItem(const QString &targetName) const;
public slots:
@@ -142,12 +147,16 @@ signals:
void verticalTargetChanged();
void horizontalTargetChanged();
+ void invalidated();
+
private:
void setDefaultAnchorTarget(const ModelNode &modelNode);
void calcTopMargin();
void calcBottomMargin();
void calcLeftMargin();
void calcRightMargin();
+ QmlItemNode targetIdToNode(const QString &id) const;
+ QString idForNode(const QmlItemNode &qmlItemNode) const;
ModelNode modelNode() const;
@@ -168,6 +177,7 @@ private:
QmlItemNode m_horizontalTarget;
bool m_locked;
+ bool m_ignoreQml;
};
} // namespace Internal
diff --git a/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp b/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp
index 0bb87dd813..97f0a00eba 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/astobjecttextextractor.cpp
@@ -36,7 +36,7 @@ using namespace QmlDesigner;
using namespace QmlJS::AST;
ASTObjectTextExtractor::ASTObjectTextExtractor(const QString &text):
- m_document(Document::create("<ASTObjectTextExtractor>", Document::QmlLanguage))
+ m_document(Document::create("<ASTObjectTextExtractor>", Language::Qml))
{
m_document->setSource(text);
m_document->parseQml();
diff --git a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
index d35b1d5f93..615d049925 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
@@ -38,7 +38,7 @@ using namespace QmlDesigner;
using namespace QmlJS::AST;
FirstDefinitionFinder::FirstDefinitionFinder(const QString &text):
- m_doc(Document::create("<internal>", Document::QmlLanguage))
+ m_doc(Document::create("<internal>", Language::Qml))
{
m_doc->setSource(text);
bool ok = m_doc->parseQml();
diff --git a/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp b/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp
index 7e0cedd4d4..3290c86d45 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/objectlengthcalculator.cpp
@@ -36,7 +36,7 @@ using namespace QmlDesigner;
using namespace QmlJS::AST;
ObjectLengthCalculator::ObjectLengthCalculator():
- m_doc(Document::create("<internal>", Document::QmlLanguage))
+ m_doc(Document::create("<internal>", Language::Qml))
{
}
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
index 674e2a1aa7..5b1916a9b1 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrefactoring.cpp
@@ -59,7 +59,7 @@ bool QmlRefactoring::reparseDocument()
// qDebug() << "QmlRefactoring::reparseDocument() new QML source:" << newSource;
- Document::MutablePtr tmpDocument(Document::create("<ModelToTextMerger>", Document::QmlLanguage));
+ Document::MutablePtr tmpDocument(Document::create("<ModelToTextMerger>", Language::Qml));
tmpDocument->setSource(newSource);
if (tmpDocument->parseQml()) {
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index 94e9bbc018..e5b5180233 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -40,6 +40,7 @@
#include <qmljs/qmljsscopechain.h>
#include <qmljs/parser/qmljsast_p.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
+#include <languageutils/fakemetaobject.h>
namespace QmlDesigner {
@@ -544,7 +545,7 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, i
m_isFileComponent = true;
const Imports *imports = context()->imports(document());
ImportInfo importInfo = imports->info(lookupNameComponent().last(), context().data());
- if (importInfo.isValid() && importInfo.type() == ImportInfo::LibraryImport) {
+ if (importInfo.isValid() && importInfo.type() == ImportType::Library) {
m_majorVersion = importInfo.version().majorVersion();
m_minorVersion = importInfo.version().minorVersion();
}
@@ -775,8 +776,20 @@ QString NodeMetaInfoPrivate::propertyEnumScope(const PropertyName &propertyName)
return QString();
const CppComponentValue *definedIn = 0;
qmlObjectValue->getEnum(propertyType(propertyName), &definedIn);
- if (definedIn)
+ if (definedIn) {
+ QString nonCppPackage;
+ foreach (const LanguageUtils::FakeMetaObject::Export &qmlExport, definedIn->metaObject()->exports()) {
+ if (qmlExport.package != QLatin1String("<cpp>"))
+ nonCppPackage = qmlExport.package;
+ }
+
+ const LanguageUtils::FakeMetaObject::Export qmlExport =
+ definedIn->metaObject()->exportInPackage(nonCppPackage);
+ if (qmlExport.isValid())
+ return qmlExport.type;
+
return definedIn->className();
+ }
return QString();
}
@@ -937,9 +950,9 @@ QString NodeMetaInfoPrivate::importDirectoryPath() const
const Imports *imports = context()->imports(document());
ImportInfo importInfo = imports->info(lookupNameComponent().last(), context().data());
- if (importInfo.type() == ImportInfo::DirectoryImport) {
+ if (importInfo.type() == ImportType::Directory) {
return importInfo.path();
- } else if (importInfo.type() == ImportInfo::LibraryImport) {
+ } else if (importInfo.type() == ImportType::Library) {
if (modelManager) {
foreach (const QString &importPath, modelManager->importPaths()) {
const QString targetPath = QDir(importPath).filePath(importInfo.path());
diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
index 69191cbe9e..2405ef8412 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
@@ -91,7 +91,7 @@ static inline bool checkIfDerivedFromItem(const QString &fileName)
QmlJS::Document::MutablePtr document =
QmlJS::Document::create(fileName.isEmpty() ?
- QLatin1String("<internal>") : fileName, QmlJS::Document::QmlLanguage);
+ QLatin1String("<internal>") : fileName, QmlJS::Language::Qml);
document->setSource(source);
document->parseQml();
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
index 232b2151c6..67cf034d62 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
@@ -221,7 +221,7 @@ void ModelToTextMerger::applyChanges()
if (m_rewriteActions.isEmpty())
return;
- Document::MutablePtr tmpDocument(Document::create(QLatin1String("<ModelToTextMerger>"), Document::QmlLanguage));
+ Document::MutablePtr tmpDocument(Document::create(QLatin1String("<ModelToTextMerger>"), Language::Qml));
tmpDocument->setSource(m_rewriterView->textModifier()->text());
if (!tmpDocument->parseQml()) {
qDebug() << "*** Possible problem: QML file wasn't parsed correctly.";
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 520b07dac7..106af60869 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -359,12 +359,12 @@ public:
const Imports *imports = m_context->imports(m_doc.data());
ImportInfo importInfo = imports->info(fullTypeName, m_context.data());
- if (importInfo.isValid() && importInfo.type() == ImportInfo::LibraryImport) {
+ if (importInfo.isValid() && importInfo.type() == ImportType::Library) {
QString name = importInfo.name();
majorVersion = importInfo.version().majorVersion();
minorVersion = importInfo.version().minorVersion();
typeName.prepend(name + QLatin1Char('.'));
- } else if (importInfo.isValid() && importInfo.type() == ImportInfo::DirectoryImport) {
+ } else if (importInfo.isValid() && importInfo.type() == ImportType::Directory) {
QString path = importInfo.path();
QDir dir(m_doc->path());
// should probably try to make it relatve to some import path, not to the document path
@@ -372,7 +372,7 @@ public:
QString name = relativeDir.replace(QLatin1Char('/'), QLatin1Char('.'));
if (!name.isEmpty())
typeName.prepend(name + QLatin1Char('.'));
- } else if (importInfo.isValid() && importInfo.type() == ImportInfo::QrcDirectoryImport) {
+ } else if (importInfo.isValid() && importInfo.type() == ImportType::QrcDirectory) {
QString path = QrcParser::normalizedQrcDirectoryPath(importInfo.path());
path = path.mid(1, path.size() - ((path.size() > 1) ? 2 : 1));
const QString name = path.replace(QLatin1Char('/'), QLatin1Char('.'));
@@ -738,7 +738,7 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
try {
Snapshot snapshot = m_rewriterView->textModifier()->getSnapshot();
const QString fileName = url.toLocalFile();
- Document::MutablePtr doc = Document::create(fileName.isEmpty() ? QLatin1String("<internal>") : fileName, Document::QmlLanguage);
+ Document::MutablePtr doc = Document::create(fileName.isEmpty() ? QLatin1String("<internal>") : fileName, Language::Qml);
doc->setSource(data);
doc->parseQml();
@@ -766,13 +766,13 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
setupImports(doc, differenceHandler);
if (m_rewriterView->model()->imports().isEmpty()) {
- const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::DiagnosticMessage::Error, AST::SourceLocation(0, 0, 0, 0), QCoreApplication::translate("QmlDesigner::TextToModelMerger", "No import statements found"));
+ const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, AST::SourceLocation(0, 0, 0, 0), QCoreApplication::translate("QmlDesigner::TextToModelMerger", "No import statements found"));
errors.append(RewriterView::Error(diagnosticMessage, QUrl::fromLocalFile(doc->fileName())));
}
foreach (const QmlDesigner::Import &import, m_rewriterView->model()->imports()) {
if (import.isLibraryImport() && import.url() == QLatin1String("QtQuick") && !supportedQtQuickVersion(import.version())) {
- const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::DiagnosticMessage::Error, AST::SourceLocation(0, 0, 0, 0),
+ const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, AST::SourceLocation(0, 0, 0, 0),
QCoreApplication::translate("QmlDesigner::TextToModelMerger", "Unsupported QtQuick version"));
errors.append(RewriterView::Error(diagnosticMessage, QUrl::fromLocalFile(doc->fileName())));
}
@@ -787,8 +787,8 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
foreach (StaticAnalysis::Type type, StaticAnalysis::Message::allMessageTypes()) {
StaticAnalysis::PrototypeMessageData prototypeMessageData = StaticAnalysis::Message::prototypeForMessageType(type);
- if (prototypeMessageData.severity == StaticAnalysis::MaybeWarning
- || prototypeMessageData.severity == StaticAnalysis::Warning) {
+ if (prototypeMessageData.severity == Severity::MaybeWarning
+ || prototypeMessageData.severity == Severity::Warning) {
check.disableMessage(type);
}
}
@@ -800,9 +800,9 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
check.enableMessage(StaticAnalysis::WarnStatesOnlyInRootItemForVisualDesigner);
foreach (const StaticAnalysis::Message &message, check()) {
- if (message.severity == StaticAnalysis::Error)
+ if (message.severity == Severity::Error)
errors.append(RewriterView::Error(message.toDiagnosticMessage(), QUrl::fromLocalFile(doc->fileName())));
- if (message.severity == StaticAnalysis::Warning)
+ if (message.severity == Severity::Warning)
warnings.append(RewriterView::Error(message.toDiagnosticMessage(), QUrl::fromLocalFile(doc->fileName())));
}
diff --git a/src/plugins/qmljseditor/qmlexpressionundercursor.cpp b/src/plugins/qmljseditor/qmlexpressionundercursor.cpp
index 7e7ea48f65..5f2fe8f94c 100644
--- a/src/plugins/qmljseditor/qmlexpressionundercursor.cpp
+++ b/src/plugins/qmljseditor/qmlexpressionundercursor.cpp
@@ -134,7 +134,7 @@ QmlJS::AST::ExpressionNode *QmlExpressionUnderCursor::operator()(const QTextCurs
_text = expressionUnderCursor(cursor);
Document::MutablePtr newDoc = Document::create(
- QLatin1String("<expression>"), Document::JavaScriptLanguage);
+ QLatin1String("<expression>"), Language::JavaScript);
newDoc->setSource(_text);
newDoc->parseExpression();
exprDoc = newDoc;
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index c8b71c9bda..dc0b419a0a 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1079,7 +1079,7 @@ TextEditor::BaseTextEditorWidget::Link QmlJSTextEditorWidget::findLinkAt(const Q
if (AST::UiImport *importAst = cast<AST::UiImport *>(node)) {
// if it's a file import, link to the file
foreach (const ImportInfo &import, semanticInfo.document->bind()->imports()) {
- if (import.ast() == importAst && import.type() == ImportInfo::FileImport) {
+ if (import.ast() == importAst && import.type() == ImportType::File) {
BaseTextEditorWidget::Link link(import.path());
link.linkTextStart = importAst->firstSourceLocation().begin();
link.linkTextEnd = importAst->lastSourceLocation().end();
diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp
index 11e22d5028..a8b7d70914 100644
--- a/src/plugins/qmljseditor/qmljsfindreferences.cpp
+++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp
@@ -812,7 +812,7 @@ static void find_helper(QFutureInterface<FindReferences::Usage> &future,
if (oldDoc && oldDoc->editorRevision() == it.value().second)
continue;
- Document::Language language;
+ Language::Enum language;
if (oldDoc)
language = oldDoc->language();
else
diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp
index 472cff9c26..b32537362e 100644
--- a/src/plugins/qmljseditor/qmljshoverhandler.cpp
+++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp
@@ -115,7 +115,7 @@ static inline QString getModuleName(const ScopeChain &scopeChain, const Document
const QString moduleName = qmlValue->moduleName();
const Imports *imports = scopeChain.context()->imports(qmlDocument.data());
const ImportInfo importInfo = imports->info(qmlValue->className(), scopeChain.context().data());
- if (importInfo.isValid() && importInfo.type() == ImportInfo::LibraryImport) {
+ if (importInfo.isValid() && importInfo.type() == ImportType::Library) {
const int majorVersion = importInfo.version().majorVersion();
const int minorVersion = importInfo.version().minorVersion();
return moduleName + QString::number(majorVersion) + QLatin1Char('.')
@@ -127,20 +127,20 @@ static inline QString getModuleName(const ScopeChain &scopeChain, const Document
const Imports *imports = scopeChain.context()->imports(qmlDocument.data());
const ImportInfo importInfo = imports->info(typeName, scopeChain.context().data());
- if (importInfo.isValid() && importInfo.type() == ImportInfo::LibraryImport) {
+ if (importInfo.isValid() && importInfo.type() == ImportType::Library) {
const QString moduleName = importInfo.name();
const int majorVersion = importInfo.version().majorVersion();
const int minorVersion = importInfo.version().minorVersion();
return moduleName + QString::number(majorVersion) + QLatin1Char('.')
+ QString::number(minorVersion) ;
- } else if (importInfo.isValid() && importInfo.type() == ImportInfo::DirectoryImport) {
+ } else if (importInfo.isValid() && importInfo.type() == ImportType::Directory) {
const QString path = importInfo.path();
const QDir dir(qmlDocument->path());
// should probably try to make it relatve to some import path, not to the document path
QString relativeDir = dir.relativeFilePath(path);
const QString name = relativeDir.replace(QLatin1Char('/'), QLatin1Char('.'));
return name;
- } else if (importInfo.isValid() && importInfo.type() == ImportInfo::QrcDirectoryImport) {
+ } else if (importInfo.isValid() && importInfo.type() == ImportType::QrcDirectory) {
QString path = QrcParser::normalizedQrcDirectoryPath(importInfo.path());
path = path.mid(1, path.size() - ((path.size() > 1) ? 2 : 1));
const QString name = path.replace(QLatin1Char('/'), QLatin1Char('.'));
@@ -350,7 +350,7 @@ void HoverHandler::handleImport(const ScopeChain &scopeChain, AST::UiImport *nod
foreach (const Import &import, imports->all()) {
if (import.info.ast() == node) {
- if (import.info.type() == ImportInfo::LibraryImport
+ if (import.info.type() == ImportType::Library
&& !import.libraryPath.isEmpty()) {
QString msg = tr("Library at %1").arg(import.libraryPath);
const LibraryInfo &libraryInfo = scopeChain.context()->snapshot().libraryInfo(import.libraryPath);
diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
index 7350583abb..ffafb7a8fe 100644
--- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
+++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
@@ -413,11 +413,11 @@ protected:
length = end-begin;
}
QTextCharFormat format;
- if (d.severity == StaticAnalysis::Warning || d.severity == StaticAnalysis::MaybeWarning)
+ if (d.severity == Severity::Warning || d.severity == Severity::MaybeWarning)
format.setUnderlineColor(Qt::darkYellow);
- else if (d.severity == StaticAnalysis::Error || d.severity == StaticAnalysis::MaybeError)
+ else if (d.severity == Severity::Error || d.severity == Severity::MaybeError)
format.setUnderlineColor(Qt::red);
- else if (d.severity == StaticAnalysis::Hint)
+ else if (d.severity == Severity::Hint)
format.setUnderlineColor(Qt::darkGreen);
format.setUnderlineStyle(QTextCharFormat::WaveUnderline);
diff --git a/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp b/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp
index 38674c9b0c..2e4a73b57e 100644
--- a/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp
+++ b/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp
@@ -128,7 +128,7 @@ QmlJSTools::SemanticInfo SemanticInfoUpdater::makeNewSemanticInfo(const QmlJS::D
ScopeChain *scopeChain = new ScopeChain(doc, semanticInfo.context);
semanticInfo.setRootScopeChain(QSharedPointer<const ScopeChain>(scopeChain));
- if (doc->language() == Document::JsonLanguage) {
+ if (doc->language() == Language::Json) {
Utils::JsonSchema *schema =
QmlJSEditorPlugin::instance()->jsonManager()->schemaForFile(doc->fileName());
if (schema) {
diff --git a/src/plugins/qmljseditor/qmljswrapinloader.cpp b/src/plugins/qmljseditor/qmljswrapinloader.cpp
index d7ee184eb1..8605db7f22 100644
--- a/src/plugins/qmljseditor/qmljswrapinloader.cpp
+++ b/src/plugins/qmljseditor/qmljswrapinloader.cpp
@@ -132,10 +132,11 @@ public:
innerIds.remove(id);
QString comment = tr("// TODO: Move position bindings from the component to the Loader.\n"
- "// Check all uses of 'parent' inside the root element of the component.\n");
+ "// Check all uses of 'parent' inside the root element of the component.")
+ + QLatin1Char('\n');
if (idBinding) {
- comment += tr("// Rename all outer uses of the id '%1' to '%2.item'.\n").arg(
- id, loaderId);
+ comment += tr("// Rename all outer uses of the id '%1' to '%2.item'.").arg(
+ id, loaderId) + QLatin1Char('\n');
}
// handle inner ids
diff --git a/src/plugins/qmljstools/qmljsbundleprovider.cpp b/src/plugins/qmljstools/qmljsbundleprovider.cpp
index 390618c2bb..a938e9d18c 100644
--- a/src/plugins/qmljstools/qmljsbundleprovider.cpp
+++ b/src/plugins/qmljstools/qmljsbundleprovider.cpp
@@ -31,6 +31,7 @@
#include <coreplugin/icore.h>
#include <qmljs/qmljsbundle.h>
+#include <qmljs/qmljsconstants.h>
#include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtsupportconstants.h>
@@ -39,10 +40,10 @@
namespace QmlJSTools {
namespace {
-typedef QmlJS::Document::Language Language;
typedef QmlJS::QmlBundle QmlBundle;
typedef QmlJS::QmlLanguageBundles QmlLanguageBundles;
}
+using namespace QmlJS;
/*!
\class QmlJSEditor::BasicBundleProvider
@@ -106,27 +107,26 @@ QmlBundle BasicBundleProvider::defaultQmlprojectBundle()
}
void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit
- , QmlJS::QmlLanguageBundles &bundles
+ , QmlLanguageBundles &bundles
, const QHash<QString,QString> &replacements)
{
- typedef QmlJS::Document Doc;
QHash<QString,QString> myReplacements = replacements;
- bundles.mergeBundleForLanguage(Doc::QmlQbsLanguage, defaultQbsBundle());
- bundles.mergeBundleForLanguage(Doc::QmlTypeInfoLanguage, defaultQmltypesBundle());
- bundles.mergeBundleForLanguage(Doc::QmlProjectLanguage, defaultQmlprojectBundle());
+ bundles.mergeBundleForLanguage(Language::QmlQbs, defaultQbsBundle());
+ bundles.mergeBundleForLanguage(Language::QmlTypeInfo, defaultQmltypesBundle());
+ bundles.mergeBundleForLanguage(Language::QmlProject, defaultQmlprojectBundle());
QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(kit);
if (!qtVersion) {
QmlBundle b1(defaultQt4QtQuick1Bundle());
- bundles.mergeBundleForLanguage(Doc::QmlLanguage, b1);
- bundles.mergeBundleForLanguage(Doc::QmlQtQuick1Language, b1);
+ bundles.mergeBundleForLanguage(Language::Qml, b1);
+ bundles.mergeBundleForLanguage(Language::QmlQtQuick1, b1);
QmlBundle b11(defaultQt5QtQuick1Bundle());
- bundles.mergeBundleForLanguage(Doc::QmlLanguage, b11);
- bundles.mergeBundleForLanguage(Doc::QmlQtQuick1Language, b11);
+ bundles.mergeBundleForLanguage(Language::Qml, b11);
+ bundles.mergeBundleForLanguage(Language::QmlQtQuick1, b11);
QmlBundle b2(defaultQt5QtQuick2Bundle());
- bundles.mergeBundleForLanguage(Doc::QmlLanguage, b2);
- bundles.mergeBundleForLanguage(Doc::QmlQtQuick2Language, b2);
+ bundles.mergeBundleForLanguage(Language::Qml, b2);
+ bundles.mergeBundleForLanguage(Language::QmlQtQuick2, b2);
return;
}
QString qtImportsPath = qtVersion->qmakeProperty("QT_INSTALL_IMPORTS");
@@ -150,15 +150,15 @@ void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit
qtQuick1Bundle.merge(bAtt);
}
if (!qtQuick1Bundle.supportedImports().contains(QLatin1String("QtQuick 1."),
- QmlJS::PersistentTrie::Partial)) {
+ PersistentTrie::Partial)) {
if (qtVersion->qtVersion().majorVersion == 4)
qtQuick1Bundle.merge(defaultQt4QtQuick1Bundle());
else if (qtVersion->qtVersion().majorVersion > 4)
qtQuick1Bundle.merge(defaultQt5QtQuick1Bundle());
}
qtQuick1Bundle.replaceVars(myReplacements);
- bundles.mergeBundleForLanguage(Doc::QmlLanguage, qtQuick1Bundle);
- bundles.mergeBundleForLanguage(Doc::QmlQtQuick1Language, qtQuick1Bundle);
+ bundles.mergeBundleForLanguage(Language::Qml, qtQuick1Bundle);
+ bundles.mergeBundleForLanguage(Language::QmlQtQuick1, qtQuick1Bundle);
}
if (features.contains(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_2))) {
myReplacements.insert(QLatin1String("$(CURRENT_DIRECTORY)"), qtQmlPath);
@@ -175,12 +175,12 @@ void BasicBundleProvider::mergeBundlesForKit(ProjectExplorer::Kit *kit
qtQuick2Bundle.merge(bAtt);
}
if (!qtQuick2Bundle.supportedImports().contains(QLatin1String("QtQuick 2."),
- QmlJS::PersistentTrie::Partial)) {
+ PersistentTrie::Partial)) {
qtQuick2Bundle.merge(defaultQt5QtQuick2Bundle());
}
qtQuick2Bundle.replaceVars(myReplacements);
- bundles.mergeBundleForLanguage(Doc::QmlLanguage, qtQuick2Bundle);
- bundles.mergeBundleForLanguage(Doc::QmlQtQuick2Language, qtQuick2Bundle);
+ bundles.mergeBundleForLanguage(Language::Qml, qtQuick2Bundle);
+ bundles.mergeBundleForLanguage(Language::QmlQtQuick2, qtQuick2Bundle);
}
}
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index a0bdef083c..24134e4da0 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -178,7 +178,7 @@ static void mergeSuffixes(QStringList &l1, const QStringList &l2)
l1 = l2;
}
-QmlJS::Document::Language QmlJSTools::languageOfFile(const QString &fileName)
+QmlJS::Language::Enum QmlJSTools::languageOfFile(const QString &fileName)
{
QStringList jsSuffixes(QLatin1String("js"));
QStringList qmlSuffixes(QLatin1String("qml"));
@@ -202,14 +202,14 @@ QmlJS::Document::Language QmlJSTools::languageOfFile(const QString &fileName)
const QFileInfo info(fileName);
const QString fileSuffix = info.suffix();
if (jsSuffixes.contains(fileSuffix))
- return QmlJS::Document::JavaScriptLanguage;
+ return QmlJS::Language::JavaScript;
if (qbsSuffixes.contains(fileSuffix))
- return QmlJS::Document::QmlQbsLanguage;
+ return QmlJS::Language::QmlQbs;
if (qmlSuffixes.contains(fileSuffix) || qmlProjectSuffixes.contains(fileSuffix))
- return QmlJS::Document::QmlLanguage;
+ return QmlJS::Language::Qml;
if (jsonSuffixes.contains(fileSuffix))
- return QmlJS::Document::JsonLanguage;
- return QmlJS::Document::UnknownLanguage;
+ return QmlJS::Language::Json;
+ return QmlJS::Language::Unknown;
}
QStringList QmlJSTools::qmlAndJsGlobPatterns()
@@ -666,23 +666,23 @@ static void findNewFileImports(const Document::Ptr &doc, const Snapshot &snapsho
// scan files and directories that are explicitly imported
foreach (const ImportInfo &import, doc->bind()->imports()) {
const QString &importName = import.path();
- if (import.type() == ImportInfo::FileImport) {
+ if (import.type() == ImportType::File) {
if (! snapshot.document(importName))
*importedFiles += importName;
- } else if (import.type() == ImportInfo::DirectoryImport) {
+ } else if (import.type() == ImportType::Directory) {
if (snapshot.documentsInDirectory(importName).isEmpty()) {
if (! scannedPaths->contains(importName)) {
*importedFiles += qmlFilesInDirectory(importName);
scannedPaths->insert(importName);
}
}
- } else if (import.type() == ImportInfo::QrcFileImport) {
+ } else if (import.type() == ImportType::QrcFile) {
QStringList importPaths = ModelManagerInterface::instance()->filesAtQrcPath(importName);
foreach (const QString &importPath, importPaths) {
if (! snapshot.document(importPath))
*importedFiles += importPath;
}
- } else if (import.type() == ImportInfo::QrcDirectoryImport) {
+ } else if (import.type() == ImportType::QrcDirectory) {
QMapIterator<QString,QStringList> dirContents(ModelManagerInterface::instance()->filesInQrcPath(importName));
while (dirContents.hasNext()) {
dirContents.next();
@@ -792,13 +792,13 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap
// scan dir and lib imports
const QStringList importPaths = modelManager->importPaths();
foreach (const ImportInfo &import, doc->bind()->imports()) {
- if (import.type() == ImportInfo::DirectoryImport) {
+ if (import.type() == ImportType::Directory) {
const QString targetPath = import.path();
findNewQmlLibraryInPath(targetPath, snapshot, modelManager,
importedFiles, scannedPaths, newLibraries);
}
- if (import.type() == ImportInfo::LibraryImport) {
+ if (import.type() == ImportType::Library) {
if (!import.version().isValid())
continue;
foreach (const QString &importPath, importPaths) {
@@ -829,8 +829,8 @@ void ModelManager::parse(QFutureInterface<void> &future,
const QString fileName = files.at(i);
- Document::Language language = languageOfFile(fileName);
- if (language == Document::UnknownLanguage) {
+ Language::Enum language = languageOfFile(fileName);
+ if (language == Language::Unknown) {
if (fileName.endsWith(QLatin1String(".qrc")))
modelManager->updateQrcFile(fileName);
continue;
@@ -951,7 +951,7 @@ void ModelManager::updateImportPaths()
while (it.hasNext()) {
it.next();
activeBundles.mergeLanguageBundles(it.value().activeBundle);
- foreach (Document::Language l, it.value().activeBundle.languages()) {
+ foreach (Language::Enum l, it.value().activeBundle.languages()) {
foreach (const QString &path, it.value().activeBundle.bundleForLanguage(l)
.searchPaths().stringList()) {
const QString canonicalPath = QFileInfo(path).canonicalFilePath();
@@ -964,7 +964,7 @@ void ModelManager::updateImportPaths()
while (it.hasNext()) {
it.next();
extendedBundles.mergeLanguageBundles(it.value().extendedBundle);
- foreach (Document::Language l, it.value().extendedBundle.languages()) {
+ foreach (Language::Enum l, it.value().extendedBundle.languages()) {
foreach (const QString &path, it.value().extendedBundle.bundleForLanguage(l)
.searchPaths().stringList()) {
const QString canonicalPath = QFileInfo(path).canonicalFilePath();
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.h b/src/plugins/qmljstools/qmljsmodelmanager.h
index 9f6d2a35f3..f9f4121e39 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.h
+++ b/src/plugins/qmljstools/qmljsmodelmanager.h
@@ -58,7 +58,7 @@ class QrcParser;
namespace QmlJSTools {
-QMLJSTOOLS_EXPORT QmlJS::Document::Language languageOfFile(const QString &fileName);
+QMLJSTOOLS_EXPORT QmlJS::Language::Enum languageOfFile(const QString &fileName);
QMLJSTOOLS_EXPORT QStringList qmlAndJsGlobPatterns();
namespace Internal {
diff --git a/src/plugins/qmljstools/qmljsplugindumper.cpp b/src/plugins/qmljstools/qmljsplugindumper.cpp
index 3356530767..bb8a4a8835 100644
--- a/src/plugins/qmljstools/qmljsplugindumper.cpp
+++ b/src/plugins/qmljstools/qmljsplugindumper.cpp
@@ -233,8 +233,8 @@ static QString noTypeinfoError(const QString &libraryPath)
static QString qmldumpErrorMessage(const QString &libraryPath, const QString &error)
{
return noTypeinfoError(libraryPath) + QLatin1String("\n\n") +
- PluginDumper::tr("Automatic type dump of QML module failed.\nErrors:\n%1\n").
- arg(error);
+ PluginDumper::tr("Automatic type dump of QML module failed.\nErrors:\n%1").
+ arg(error) + QLatin1Char('\n');
}
static QString qmldumpFailedMessage(const QString &libraryPath, const QString &error)
diff --git a/src/plugins/qmljstools/qmljsrefactoringchanges.cpp b/src/plugins/qmljstools/qmljsrefactoringchanges.cpp
index 827a3fddde..06381b313b 100644
--- a/src/plugins/qmljstools/qmljsrefactoringchanges.cpp
+++ b/src/plugins/qmljstools/qmljsrefactoringchanges.cpp
@@ -123,7 +123,7 @@ QmlJSRefactoringFile::QmlJSRefactoringFile(const QString &fileName, const QShare
: RefactoringFile(fileName, data)
{
// the RefactoringFile is invalid if its not for a file with qml or js code
- if (languageOfFile(fileName) == Document::UnknownLanguage)
+ if (languageOfFile(fileName) == Language::Unknown)
m_fileName.clear();
}
diff --git a/src/plugins/qnx/blackberryconfiguration.cpp b/src/plugins/qnx/blackberryconfiguration.cpp
index 81f5ed0469..78b01a30d8 100644
--- a/src/plugins/qnx/blackberryconfiguration.cpp
+++ b/src/plugins/qnx/blackberryconfiguration.cpp
@@ -237,8 +237,8 @@ Kit *BlackBerryConfiguration::createKit(QnxAbstractQtVersion *version, ToolChain
version->qtVersionString(), version->platformDisplayName(),
version->archString(), m_targetName));
- DebuggerItemManager::registerDebugger(debugger);
- DebuggerKitInformation::setDebugger(kit, debugger);
+ QVariant id = DebuggerItemManager::registerDebugger(debugger);
+ DebuggerKitInformation::setDebugger(kit, id);
if (isSimulator)
QmakeProjectManager::QmakeKitInformation::setMkspec(
diff --git a/src/plugins/qnx/blackberryinstallwizardpages.cpp b/src/plugins/qnx/blackberryinstallwizardpages.cpp
index 790a88cdb9..19c9055815 100644
--- a/src/plugins/qnx/blackberryinstallwizardpages.cpp
+++ b/src/plugins/qnx/blackberryinstallwizardpages.cpp
@@ -385,9 +385,9 @@ void BlackBerryInstallWizardProcessPage::initializePage()
}
}
- m_ui->label->setText(tr("Uninstalling target:\n") + m_data.target);
+ m_ui->label->setText(tr("Uninstalling target:") + QLatin1Char('\n') + m_data.target);
} else {
- m_ui->label->setText(tr("Installing target:\n") + m_data.target);
+ m_ui->label->setText(tr("Installing target:") + QLatin1Char('\n') + m_data.target);
}
// m_targetProcess could be running
if (m_targetProcess->state() == QProcess::Running) {
diff --git a/src/plugins/qnx/cascadesimport/importlogconverter.cpp b/src/plugins/qnx/cascadesimport/importlogconverter.cpp
index 896545aa21..bbcb2029d3 100644
--- a/src/plugins/qnx/cascadesimport/importlogconverter.cpp
+++ b/src/plugins/qnx/cascadesimport/importlogconverter.cpp
@@ -54,10 +54,10 @@ bool ImportLogConverter::convertFile(Core::GeneratedFile &file, QString &errorMe
Q_UNUSED(errorMessage);
QString content;
content += QLatin1String("========================================================\n");
- content += tr("Generated by cascades importer ver: %1, %2\n")
+ content += tr("Generated by cascades importer ver: %1, %2")
.arg(QLatin1String(Qnx::Constants::QNX_BLACKBERRY_CASCADESIMPORTER_VERSION))
.arg(QDateTime::currentDateTime().toString(Qt::ISODate));
- content += QLatin1String("========================================================\n\n");
+ content += QLatin1String("\n========================================================\n\n");
content += convertedProjectContext().importLog().toString();
file.setContents(content);
file.setAttributes(file.attributes() | Core::GeneratedFile::OpenEditorAttribute);
diff --git a/src/plugins/qnx/qnxanalyzesupport.cpp b/src/plugins/qnx/qnxanalyzesupport.cpp
index fe9caf70bf..027a4b3b37 100644
--- a/src/plugins/qnx/qnxanalyzesupport.cpp
+++ b/src/plugins/qnx/qnxanalyzesupport.cpp
@@ -65,7 +65,7 @@ void QnxAnalyzeSupport::handleAdapterSetupRequested()
{
QTC_ASSERT(state() == Inactive, return);
- showMessage(tr("Preparing remote side...\n"), Utils::NormalMessageFormat);
+ showMessage(tr("Preparing remote side...") + QLatin1Char('\n'), Utils::NormalMessageFormat);
QnxAbstractRunSupport::handleAdapterSetupRequested();
}
diff --git a/src/plugins/qnx/qnxdebugsupport.cpp b/src/plugins/qnx/qnxdebugsupport.cpp
index 20c238cfdc..df1a7c16e7 100644
--- a/src/plugins/qnx/qnxdebugsupport.cpp
+++ b/src/plugins/qnx/qnxdebugsupport.cpp
@@ -73,7 +73,7 @@ void QnxDebugSupport::handleAdapterSetupRequested()
QTC_ASSERT(state() == Inactive, return);
if (m_engine)
- m_engine->showMessage(tr("Preparing remote side...\n"), Debugger::AppStuff);
+ m_engine->showMessage(tr("Preparing remote side...") + QLatin1Char('\n'), Debugger::AppStuff);
QnxAbstractRunSupport::handleAdapterSetupRequested();
}
diff --git a/src/plugins/qnx/qnxdeviceconfiguration.cpp b/src/plugins/qnx/qnxdeviceconfiguration.cpp
index f5a26bd9bb..d9b64ed9a3 100644
--- a/src/plugins/qnx/qnxdeviceconfiguration.cpp
+++ b/src/plugins/qnx/qnxdeviceconfiguration.cpp
@@ -34,14 +34,22 @@
#include "qnxdeviceprocesslist.h"
#include "qnxdeviceprocesssignaloperation.h"
+#include <projectexplorer/devicesupport/sshdeviceprocess.h>
#include <ssh/sshconnection.h>
+#include <utils/qtcassert.h>
+#include <QApplication>
#include <QRegExp>
#include <QStringList>
+#include <QThread>
using namespace Qnx;
using namespace Qnx::Internal;
+namespace {
+const char QnxVersionKey[] = "QnxVersion";
+}
+
class QnxPortsGatheringMethod : public ProjectExplorer::PortsGatheringMethod
{
// TODO: The command is probably needlessly complicated because the parsing method
@@ -82,20 +90,22 @@ class QnxPortsGatheringMethod : public ProjectExplorer::PortsGatheringMethod
QnxDeviceConfiguration::QnxDeviceConfiguration()
: RemoteLinux::LinuxDevice()
+ , m_versionNumber(0)
{
}
QnxDeviceConfiguration::QnxDeviceConfiguration(const QString &name, Core::Id type, MachineType machineType, Origin origin, Core::Id id)
: RemoteLinux::LinuxDevice(name, type, machineType, origin, id)
+ , m_versionNumber(0)
{
}
QnxDeviceConfiguration::QnxDeviceConfiguration(const QnxDeviceConfiguration &other)
: RemoteLinux::LinuxDevice(other)
+ , m_versionNumber(other.m_versionNumber)
{
}
-
QnxDeviceConfiguration::Ptr QnxDeviceConfiguration::create()
{
return Ptr(new QnxDeviceConfiguration);
@@ -111,6 +121,58 @@ QString QnxDeviceConfiguration::displayType() const
return tr("QNX");
}
+int QnxDeviceConfiguration::qnxVersion() const
+{
+ if (m_versionNumber == 0)
+ updateVersionNumber();
+
+ return m_versionNumber;
+}
+
+void QnxDeviceConfiguration::updateVersionNumber() const
+{
+ QEventLoop eventLoop;
+ ProjectExplorer::SshDeviceProcess versionNumberProcess(sharedFromThis());
+ QObject::connect(&versionNumberProcess, SIGNAL(finished()), &eventLoop, SLOT(quit()));
+ QObject::connect(&versionNumberProcess, SIGNAL(error(QProcess::ProcessError)), &eventLoop, SLOT(quit()));
+
+ QStringList arguments;
+ arguments << QLatin1String("-r");
+ versionNumberProcess.start(QLatin1String("uname"), arguments);
+
+ bool isGuiThread = QThread::currentThread() == QCoreApplication::instance()->thread();
+ if (isGuiThread)
+ QApplication::setOverrideCursor(Qt::WaitCursor);
+
+ eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
+
+ QByteArray output = versionNumberProcess.readAllStandardOutput();
+ QString versionMessage = QString::fromLatin1(output);
+ QRegExp versionNumberRegExp = QRegExp(QLatin1String("(\\d+)\\.(\\d+)\\.(\\d+)"));
+ if (versionNumberRegExp.indexIn(versionMessage) > -1 && versionNumberRegExp.captureCount() == 3) {
+ int major = versionNumberRegExp.cap(1).toInt();
+ int minor = versionNumberRegExp.cap(2).toInt();
+ int patch = versionNumberRegExp.cap(3).toInt();
+ m_versionNumber = (major << 16)|(minor<<8)|(patch);
+ }
+
+ if (isGuiThread)
+ QApplication::restoreOverrideCursor();
+}
+
+void QnxDeviceConfiguration::fromMap(const QVariantMap &map)
+{
+ m_versionNumber = map.value(QLatin1String(QnxVersionKey), 0).toInt();
+ RemoteLinux::LinuxDevice::fromMap(map);
+}
+
+QVariantMap QnxDeviceConfiguration::toMap() const
+{
+ QVariantMap map(RemoteLinux::LinuxDevice::toMap());
+ map.insert(QLatin1String(QnxVersionKey), m_versionNumber);
+ return map;
+}
+
ProjectExplorer::IDevice::Ptr QnxDeviceConfiguration::clone() const
{
return Ptr(new QnxDeviceConfiguration(*this));
diff --git a/src/plugins/qnx/qnxdeviceconfiguration.h b/src/plugins/qnx/qnxdeviceconfiguration.h
index ec67de55d9..5e9fb69070 100644
--- a/src/plugins/qnx/qnxdeviceconfiguration.h
+++ b/src/plugins/qnx/qnxdeviceconfiguration.h
@@ -58,6 +58,11 @@ public:
QString displayType() const;
+ int qnxVersion() const;
+
+ void fromMap(const QVariantMap &map);
+ QVariantMap toMap() const;
+
protected:
QnxDeviceConfiguration();
QnxDeviceConfiguration(const QString &name, Core::Id type, MachineType machineType,
@@ -67,6 +72,10 @@ protected:
QString interruptProcessByNameCommandLine(const QString &filePath) const;
QString killProcessByNameCommandLine(const QString &filePath) const;
+private:
+ void updateVersionNumber() const;
+
+ mutable int m_versionNumber;
};
} // namespace Internal
diff --git a/src/plugins/qnx/qnxdevicetester.cpp b/src/plugins/qnx/qnxdevicetester.cpp
index 634ab3ce42..a229ae2046 100644
--- a/src/plugins/qnx/qnxdevicetester.cpp
+++ b/src/plugins/qnx/qnxdevicetester.cpp
@@ -30,6 +30,7 @@
****************************************************************************/
#include "qnxdevicetester.h"
+#include "qnxdeviceconfiguration.h"
#include <ssh/sshremoteprocessrunner.h>
#include <utils/qtcassert.h>
@@ -44,6 +45,10 @@ QnxDeviceTester::QnxDeviceTester(QObject *parent)
, m_currentCommandIndex(-1)
{
m_genericTester = new RemoteLinux::GenericLinuxDeviceTester(this);
+ connect(m_genericTester, SIGNAL(progressMessage(QString)), SIGNAL(progressMessage(QString)));
+ connect(m_genericTester, SIGNAL(errorMessage(QString)), SIGNAL(errorMessage(QString)));
+ connect(m_genericTester, SIGNAL(finished(ProjectExplorer::DeviceTester::TestResult)),
+ SLOT(handleGenericTestFinished(ProjectExplorer::DeviceTester::TestResult)));
m_processRunner = new QSsh::SshRemoteProcessRunner(this);
connect(m_processRunner, SIGNAL(connectionError()), SLOT(handleConnectionError()));
@@ -68,11 +73,6 @@ void QnxDeviceTester::testDevice(const ProjectExplorer::IDevice::ConstPtr &devic
m_deviceConfiguration = deviceConfiguration;
- connect(m_genericTester, SIGNAL(progressMessage(QString)), SIGNAL(progressMessage(QString)));
- connect(m_genericTester, SIGNAL(errorMessage(QString)), SIGNAL(errorMessage(QString)));
- connect(m_genericTester, SIGNAL(finished(ProjectExplorer::DeviceTester::TestResult)),
- SLOT(handleGenericTestFinished(ProjectExplorer::DeviceTester::TestResult)));
-
m_state = GenericTest;
m_genericTester->testDevice(deviceConfiguration);
}
@@ -107,6 +107,10 @@ void QnxDeviceTester::handleGenericTestFinished(TestResult result)
}
m_state = CommandsTest;
+
+ QnxDeviceConfiguration::ConstPtr qnxDevice = m_deviceConfiguration.dynamicCast<const QnxDeviceConfiguration>();
+ m_commandsToTest.append(versionSpecificCommandsToTest(qnxDevice->qnxVersion()));
+
testNextCommand();
}
@@ -117,13 +121,13 @@ void QnxDeviceTester::handleProcessFinished(int exitStatus)
const QString command = m_commandsToTest[m_currentCommandIndex];
if (exitStatus == QSsh::SshRemoteProcess::NormalExit) {
if (m_processRunner->processExitCode() == 0) {
- emit progressMessage(tr("%1 found.\n").arg(command));
+ emit progressMessage(tr("%1 found.").arg(command) + QLatin1Char('\n'));
} else {
- emit errorMessage(tr("%1 not found.\n").arg(command));
+ emit errorMessage(tr("%1 not found.").arg(command) + QLatin1Char('\n'));
m_result = TestFailure;
}
} else {
- emit errorMessage(tr("An error occurred checking for %1.\n").arg(command));
+ emit errorMessage(tr("An error occurred checking for %1.").arg(command) + QLatin1Char('\n'));
m_result = TestFailure;
}
testNextCommand();
@@ -134,7 +138,7 @@ void QnxDeviceTester::handleConnectionError()
QTC_ASSERT(m_state == CommandsTest, return);
m_result = TestFailure;
- emit errorMessage(tr("SSH connection error: %1\n").arg(m_processRunner->lastConnectionErrorString()));
+ emit errorMessage(tr("SSH connection error: %1").arg(m_processRunner->lastConnectionErrorString()) + QLatin1Char('\n'));
setFinished();
}
@@ -161,3 +165,12 @@ void QnxDeviceTester::setFinished()
disconnect(m_processRunner, 0, this, 0);
emit finished(m_result);
}
+
+QStringList QnxDeviceTester::versionSpecificCommandsToTest(int versionNumber) const
+{
+ QStringList result;
+ if (versionNumber > 0x060500)
+ result << QLatin1String("slog2info");
+
+ return result;
+}
diff --git a/src/plugins/qnx/qnxdevicetester.h b/src/plugins/qnx/qnxdevicetester.h
index 834f6a601e..d0a4a8a286 100644
--- a/src/plugins/qnx/qnxdevicetester.h
+++ b/src/plugins/qnx/qnxdevicetester.h
@@ -68,6 +68,8 @@ private:
void testNextCommand();
void setFinished();
+ QStringList versionSpecificCommandsToTest(int versionNumber) const;
+
RemoteLinux::GenericLinuxDeviceTester *m_genericTester;
ProjectExplorer::IDevice::ConstPtr m_deviceConfiguration;
ProjectExplorer::DeviceTester::TestResult m_result;
diff --git a/src/plugins/qnx/qnxruncontrol.cpp b/src/plugins/qnx/qnxruncontrol.cpp
index 0f717d83be..53a32ac8e8 100644
--- a/src/plugins/qnx/qnxruncontrol.cpp
+++ b/src/plugins/qnx/qnxruncontrol.cpp
@@ -58,6 +58,8 @@ QnxRunControl::QnxRunControl(ProjectExplorer::RunConfiguration *runConfig)
m_slog2Info = new Slog2InfoRunner(applicationId, qnxDevice, this);
connect(m_slog2Info, SIGNAL(output(QString,Utils::OutputFormat)), this, SLOT(appendMessage(QString,Utils::OutputFormat)));
connect(this, SIGNAL(started()), m_slog2Info, SLOT(start()));
+ if (qnxDevice->qnxVersion() > 0x060500)
+ connect(m_slog2Info, SIGNAL(commandMissing()), this, SLOT(printMissingWarning()));
}
ProjectExplorer::RunControl::StopResult QnxRunControl::stop()
@@ -65,3 +67,8 @@ ProjectExplorer::RunControl::StopResult QnxRunControl::stop()
m_slog2Info->stop();
return RemoteLinuxRunControl::stop();
}
+
+void QnxRunControl::printMissingWarning()
+{
+ appendMessage(tr("Warning: \"slog2info\" is not found on the device, debug output not available!"), Utils::ErrorMessageFormat);
+}
diff --git a/src/plugins/qnx/qnxruncontrol.h b/src/plugins/qnx/qnxruncontrol.h
index 20368e6089..c3e44777e5 100644
--- a/src/plugins/qnx/qnxruncontrol.h
+++ b/src/plugins/qnx/qnxruncontrol.h
@@ -47,6 +47,9 @@ public:
RemoteLinux::RemoteLinuxRunControl::StopResult stop();
+private slots:
+ void printMissingWarning();
+
private:
Slog2InfoRunner *m_slog2Info;
};
diff --git a/src/plugins/qnx/qnxutils.cpp b/src/plugins/qnx/qnxutils.cpp
index 4aa9286fcf..f799fb524f 100644
--- a/src/plugins/qnx/qnxutils.cpp
+++ b/src/plugins/qnx/qnxutils.cpp
@@ -196,13 +196,7 @@ QList<Utils::EnvironmentItem> QnxUtils::qnxEnvironmentFromNdkFile(const QString
}
}
- QString modifieddValue;
- if (Utils::HostOsInfo::isWindowsHost())
- modifieddValue = modifiedValues.join(QLatin1String(";"));
- else if (Utils::HostOsInfo::isAnyUnixHost())
- modifieddValue = modifiedValues.join(QLatin1String(":"));
-
- items.append(Utils::EnvironmentItem(key, modifieddValue));
+ items.append(Utils::EnvironmentItem(key, modifiedValues.join(QString(Utils::HostOsInfo::pathListSeparator()))));
}
return items;
diff --git a/src/plugins/qt4projectmanager/addlibrarywizard.cpp b/src/plugins/qt4projectmanager/addlibrarywizard.cpp
index ec3ec3a0e6..554081081e 100644
--- a/src/plugins/qt4projectmanager/addlibrarywizard.cpp
+++ b/src/plugins/qt4projectmanager/addlibrarywizard.cpp
@@ -275,6 +275,7 @@ SummaryPage::SummaryPage(AddLibraryWizard *parent)
QVBoxLayout *layout = new QVBoxLayout(this);
m_summaryLabel = new QLabel(this);
m_snippetLabel = new QLabel(this);
+ m_snippetLabel->setWordWrap(true);
layout->addWidget(m_summaryLabel);
layout->addWidget(m_snippetLabel);
m_summaryLabel->setTextFormat(Qt::RichText);
diff --git a/src/plugins/qt4projectmanager/addlibrarywizard.h b/src/plugins/qt4projectmanager/addlibrarywizard.h
index 9fa7b52e7e..be9b99b2ce 100644
--- a/src/plugins/qt4projectmanager/addlibrarywizard.h
+++ b/src/plugins/qt4projectmanager/addlibrarywizard.h
@@ -78,7 +78,8 @@ public:
enum Platform {
LinuxPlatform = 0x01,
MacPlatform = 0x02,
- WindowsPlatform = 0x04
+ WindowsMinGWPlatform = 0x04,
+ WindowsMSVCPlatform = 0x08
};
Q_DECLARE_FLAGS(Platforms, Platform)
diff --git a/src/plugins/qt4projectmanager/librarydetailscontroller.cpp b/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
index ab0a59d5d4..7253684966 100644
--- a/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
+++ b/src/plugins/qt4projectmanager/librarydetailscontroller.cpp
@@ -55,7 +55,8 @@ LibraryDetailsController::LibraryDetailsController(
QObject(parent),
m_platforms(AddLibraryWizard::LinuxPlatform
| AddLibraryWizard::MacPlatform
- | AddLibraryWizard::WindowsPlatform),
+ | AddLibraryWizard::WindowsMinGWPlatform
+ | AddLibraryWizard::WindowsMSVCPlatform),
m_linkageType(AddLibraryWizard::NoLinkage),
m_macLibraryType(AddLibraryWizard::NoLibraryType),
m_proFile(proFile),
@@ -83,14 +84,24 @@ LibraryDetailsController::LibraryDetailsController(
if (!Utils::HostOsInfo::isLinuxHost()) {
// project for which we are going to insert the snippet
- const ProjectExplorer::Project *project =
- ProjectExplorer::SessionManager::projectForFile(proFile);
- // if its tool chain is maemo behave the same as we would be on linux
- ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(project->activeTarget()->kit());
- if (tc
- && (tc->targetAbi().osFlavor() == ProjectExplorer::Abi::HarmattanLinuxFlavor
- || tc->targetAbi().osFlavor() == ProjectExplorer::Abi::MaemoLinuxFlavor))
- m_creatorPlatform = CreatorLinux;
+ const Project *project = SessionManager::projectForFile(proFile);
+ if (project && project->activeTarget()) {
+ // if its tool chain is maemo behave the same as we would be on linux
+ ProjectExplorer::ToolChain *tc = ToolChainKitInformation::toolChain(project->activeTarget()->kit());
+ if (tc) {
+ switch (tc->targetAbi().os()) {
+ case Abi::WindowsOS:
+ m_creatorPlatform = CreatorWindows;
+ break;
+ case Abi::MacOS:
+ m_creatorPlatform = CreatorMac;
+ break;
+ default:
+ m_creatorPlatform = CreatorLinux;
+ break;
+ }
+ }
+ }
}
setPlatformsVisible(true);
@@ -156,7 +167,8 @@ void LibraryDetailsController::updateGui()
if (libraryDetailsWidget()->macCheckBox->isChecked())
m_platforms |= AddLibraryWizard::MacPlatform;
if (libraryDetailsWidget()->winCheckBox->isChecked())
- m_platforms |= AddLibraryWizard::WindowsPlatform;
+ m_platforms |= AddLibraryWizard::WindowsMinGWPlatform
+ | AddLibraryWizard::WindowsMSVCPlatform;
bool macLibraryTypeUpdated = false;
if (!m_linkageRadiosVisible) {
@@ -409,6 +421,21 @@ static QString appendSeparator(const QString &aString)
return aString + QLatin1Char('/');
}
+static QString windowsScopes(AddLibraryWizard::Platforms scopes)
+{
+ QString scopesString;
+ QTextStream str(&scopesString);
+ AddLibraryWizard::Platforms windowsPlatforms = scopes
+ & (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform);
+ if (windowsPlatforms == AddLibraryWizard::WindowsMinGWPlatform)
+ str << "win32-g++"; // mingw only
+ else if (windowsPlatforms == AddLibraryWizard::WindowsMSVCPlatform)
+ str << "win32:!win32-g++"; // msvc only
+ else if (windowsPlatforms)
+ str << "win32"; // both mingw and msvc
+ return scopesString;
+}
+
static QString commonScopes(AddLibraryWizard::Platforms scopes,
AddLibraryWizard::Platforms excludedScopes)
{
@@ -416,7 +443,8 @@ static QString commonScopes(AddLibraryWizard::Platforms scopes,
QTextStream str(&scopesString);
AddLibraryWizard::Platforms common = scopes | excludedScopes;
bool unixLikeScopes = false;
- if (scopes & ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::WindowsPlatform)) {
+ if (scopes & ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::WindowsMinGWPlatform
+ | AddLibraryWizard::WindowsMSVCPlatform)) {
unixLikeScopes = true;
if (common & AddLibraryWizard::LinuxPlatform) {
str << "unix";
@@ -427,10 +455,12 @@ static QString commonScopes(AddLibraryWizard::Platforms scopes,
str << "macx";
}
}
- if (scopes & AddLibraryWizard::WindowsPlatform) {
+ AddLibraryWizard::Platforms windowsPlatforms = scopes
+ & (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform);
+ if (windowsPlatforms) {
if (unixLikeScopes)
str << "|";
- str << "win32";
+ str << windowsScopes(windowsPlatforms);
}
return scopesString;
}
@@ -457,7 +487,8 @@ static QString generateLibsSnippet(AddLibraryWizard::Platforms platforms,
if (macLibraryType == AddLibraryWizard::FrameworkType) // we will generate a separate -F -framework line
commonPlatforms &= ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::MacPlatform);
if (useSubfolders || addSuffix) // we will generate a separate debug/release conditions
- commonPlatforms &= ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::WindowsPlatform);
+ commonPlatforms &= ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::WindowsMinGWPlatform
+ | AddLibraryWizard::WindowsMSVCPlatform);
AddLibraryWizard::Platforms diffPlatforms = platforms ^ commonPlatforms;
AddLibraryWizard::Platforms generatedPlatforms = 0;
@@ -465,19 +496,22 @@ static QString generateLibsSnippet(AddLibraryWizard::Platforms platforms,
QString snippetMessage;
QTextStream str(&snippetMessage);
- if (diffPlatforms & AddLibraryWizard::WindowsPlatform) {
- str << "win32:CONFIG(release, debug|release): LIBS += ";
+ AddLibraryWizard::Platforms windowsPlatforms = diffPlatforms
+ & (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform);
+ if (windowsPlatforms) {
+ QString windowsString = windowsScopes(windowsPlatforms);
+ str << windowsString << ":CONFIG(release, debug|release): LIBS += ";
if (useSubfolders)
str << simpleLibraryPathSnippet << "release/ " << "-l" << libName << "\n";
else if (addSuffix)
str << appendSpaceIfNotEmpty(simpleLibraryPathSnippet) << "-l" << libName << "\n";
- str << "else:win32:CONFIG(debug, debug|release): LIBS += ";
+ str << "else:" << windowsString << ":CONFIG(debug, debug|release): LIBS += ";
if (useSubfolders)
str << simpleLibraryPathSnippet << "debug/ " << "-l" << libName << "\n";
else if (addSuffix)
str << appendSpaceIfNotEmpty(simpleLibraryPathSnippet) << "-l" << libName << "d\n";
- generatedPlatforms |= AddLibraryWizard::WindowsPlatform;
+ generatedPlatforms |= windowsPlatforms;
}
if (diffPlatforms & AddLibraryWizard::MacPlatform) {
if (generatedPlatforms)
@@ -521,28 +555,55 @@ static QString generatePreTargetDepsSnippet(AddLibraryWizard::Platforms platform
QTextStream str(&snippetMessage);
str << "\n";
AddLibraryWizard::Platforms generatedPlatforms = 0;
- if (platforms & AddLibraryWizard::WindowsPlatform) {
+ AddLibraryWizard::Platforms windowsPlatforms = platforms
+ & (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform);
+ AddLibraryWizard::Platforms commonPlatforms = platforms;
+ if (useSubfolders || addSuffix) // we will generate a separate debug/release conditions, otherwise mingw is unix like
+ commonPlatforms &= ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::WindowsMinGWPlatform);
+ commonPlatforms &= ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::WindowsMSVCPlatform); // this case is different from all platforms
+ if (windowsPlatforms) {
if (useSubfolders || addSuffix) {
- str << "win32:CONFIG(release, debug|release): "
- << preTargetDepsSnippet;
- if (useSubfolders)
- str << "release/" << libName << ".lib\n";
- else if (addSuffix)
- str << libName << ".lib\n";
-
- str << "else:win32:CONFIG(debug, debug|release): "
- << preTargetDepsSnippet;
- if (useSubfolders)
- str << "debug/" << libName << ".lib\n";
- else if (addSuffix)
- str << libName << "d.lib\n";
+ if (windowsPlatforms & AddLibraryWizard::WindowsMinGWPlatform) {
+ str << "win32-g++:CONFIG(release, debug|release): "
+ << preTargetDepsSnippet;
+ if (useSubfolders)
+ str << "release/" << "lib" << libName << ".a\n";
+ else if (addSuffix)
+ str << "lib" << libName << ".a\n";
+
+ str << "else:win32-g++:CONFIG(debug, debug|release): "
+ << preTargetDepsSnippet;
+ if (useSubfolders)
+ str << "debug/" << "lib" << libName << ".a\n";
+ else if (addSuffix)
+ str << "lib" << libName << "d.a\n";
+ }
+ if (windowsPlatforms & AddLibraryWizard::WindowsMSVCPlatform) {
+ if (windowsPlatforms & AddLibraryWizard::WindowsMinGWPlatform)
+ str << "else:";
+ str << "win32:!win32-g++:CONFIG(release, debug|release): "
+ << preTargetDepsSnippet;
+ if (useSubfolders)
+ str << "release/" << libName << ".lib\n";
+ else if (addSuffix)
+ str << libName << ".lib\n";
+
+ str << "else:win32:!win32-g++:CONFIG(debug, debug|release): "
+ << preTargetDepsSnippet;
+ if (useSubfolders)
+ str << "debug/" << libName << ".lib\n";
+ else if (addSuffix)
+ str << libName << "d.lib\n";
+ }
+ generatedPlatforms |= windowsPlatforms;
} else {
- str << "win32: " << preTargetDepsSnippet << libName << ".lib\n";
+ if (windowsPlatforms & AddLibraryWizard::WindowsMSVCPlatform) {
+ str << "win32:!win32-g++ " << preTargetDepsSnippet << libName << ".lib\n";
+ generatedPlatforms |= AddLibraryWizard::WindowsMSVCPlatform; // mingw will be handled with common scopes
+ }
+ // mingw not generated yet, will be joined with unix like
}
- generatedPlatforms |= AddLibraryWizard::WindowsPlatform;
}
- AddLibraryWizard::Platforms commonPlatforms = platforms;
- commonPlatforms &= ~QFlags<AddLibraryWizard::Platform>(AddLibraryWizard::WindowsPlatform);
if (commonPlatforms) {
if (generatedPlatforms)
str << "else:";
@@ -562,7 +623,7 @@ NonInternalLibraryDetailsController::NonInternalLibraryDetailsController(
if (creatorPlatform() == CreatorWindows) {
libraryDetailsWidget()->libraryPathChooser->setPromptDialogFilter(
- QLatin1String("Library file (*.lib)"));
+ QLatin1String("Library file (*.lib lib*.a)"));
setLinkageRadiosVisible(true);
setRemoveSuffixVisible(true);
} else {
@@ -646,7 +707,7 @@ QString NonInternalLibraryDetailsController::suggestedIncludePath() const
void NonInternalLibraryDetailsController::updateWindowsOptionsEnablement()
{
- bool ena = platforms() & AddLibraryWizard::WindowsPlatform;
+ bool ena = platforms() & (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform);
if (creatorPlatform() == CreatorWindows) {
libraryDetailsWidget()->addSuffixCheckBox->setEnabled(ena);
ena = true;
@@ -725,6 +786,8 @@ QString NonInternalLibraryDetailsController::snippet() const
libName = fi.baseName();
if (removeSuffix && !libName.isEmpty()) // remove last letter which needs to be "d"
libName = libName.left(libName.size() - 1);
+ if (fi.completeSuffix() == QLatin1String("a")) // the mingw lib case
+ libName = libName.mid(3); // cut the "lib" prefix
} else if (creatorPlatform() == CreatorMac) {
if (macLibraryType() == AddLibraryWizard::FrameworkType)
libName = fi.baseName();
@@ -742,10 +805,11 @@ QString NonInternalLibraryDetailsController::snippet() const
// when we are on Win but we don't generate the code for Win
// we still need to remove "debug" or "release" subfolder
const bool useSubfoldersCondition = (creatorPlatform() == CreatorWindows)
- ? true : platforms() & AddLibraryWizard::WindowsPlatform;
+ ? true : platforms() & (AddLibraryWizard::WindowsMinGWPlatform
+ | AddLibraryWizard::WindowsMSVCPlatform);
if (useSubfoldersCondition)
useSubfolders = libraryDetailsWidget()->useSubfoldersCheckBox->isChecked();
- if (platforms() & AddLibraryWizard::WindowsPlatform)
+ if (platforms() & (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform))
addSuffix = libraryDetailsWidget()->addSuffixCheckBox->isChecked() || removeSuffix;
}
if (isIncludePathVisible()) { // generate also the path to lib
@@ -960,7 +1024,7 @@ void InternalLibraryDetailsController::updateWindowsOptionsEnablement()
if (creatorPlatform() == CreatorWindows)
libraryDetailsWidget()->addSuffixCheckBox->setEnabled(true);
libraryDetailsWidget()->winGroupBox->setEnabled(platforms()
- & AddLibraryWizard::WindowsPlatform);
+ & (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform));
}
void InternalLibraryDetailsController::updateProFile()
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
index aaa1f95abc..171277b616 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp
@@ -78,7 +78,7 @@ GuiAppWizard::GuiAppWizard(bool isMobile)
setCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY));
setDisplayCategory(QCoreApplication::translate("ProjectExplorer",
ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY));
- setDisplayName(tr("Qt Gui Application"));
+ setDisplayName(tr("Qt Widgets Application"));
setDescription(tr("Creates a Qt application for the desktop. "
"Includes a Qt Designer-based main window.\n\n"
"Preselects a desktop Qt for building the application if available."));
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
index cf15d1f2fa..d6a1c534d5 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
@@ -57,7 +57,7 @@ GuiAppWizardDialog::GuiAppWizardDialog(const QString &templateName,
setWindowTitle(templateName);
setSelectedModules(QLatin1String("core gui"), true);
- setIntroDescription(tr("This wizard generates a Qt GUI application "
+ setIntroDescription(tr("This wizard generates a Qt Widgets Application "
"project. The application derives by default from QApplication "
"and includes an empty widget."));
diff --git a/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp
index c5a7b52a60..1d978acdc9 100644
--- a/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp
+++ b/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp
@@ -349,7 +349,8 @@ LibraryParameters LibraryWizardDialog::libraryParameters() const
{
LibraryParameters rc;
rc.className = m_filesPage->className();
- rc.baseClassName = m_filesPage->baseClassName();
+ rc.baseClassName = type() == QtProjectParameters::Qt4Plugin ?
+ m_filesPage->baseClassName() : QString();
rc.sourceFileName = m_filesPage->sourceFileName();
rc.headerFileName = m_filesPage->headerFileName();
return rc;
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index 0e761bb67a..136a78b4f0 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -361,7 +361,6 @@ void QtVersionManager::updateFromInstaller(bool emitSignal)
}
if (emitSignal)
emit qtVersionsChanged(added, removed, changed);
- saveQtVersions();
}
void QtVersionManager::saveQtVersions()
diff --git a/src/plugins/remotelinux/linuxdevicetester.cpp b/src/plugins/remotelinux/linuxdevicetester.cpp
index 7b30be03a9..4a62f1d602 100644
--- a/src/plugins/remotelinux/linuxdevicetester.cpp
+++ b/src/plugins/remotelinux/linuxdevicetester.cpp
@@ -128,7 +128,7 @@ void GenericLinuxDeviceTester::handleConnectionFailure()
{
QTC_ASSERT(d->state != Inactive, return);
- emit errorMessage(tr("SSH connection failure: %1\n").arg(d->connection->errorString()));
+ emit errorMessage(tr("SSH connection failure: %1").arg(d->connection->errorString()) + QLatin1Char('\n'));
setFinished(TestFailure);
}
@@ -139,9 +139,9 @@ void GenericLinuxDeviceTester::handleProcessFinished(int exitStatus)
if (exitStatus != SshRemoteProcess::NormalExit || d->process->exitCode() != 0) {
const QByteArray stderrOutput = d->process->readAllStandardError();
if (!stderrOutput.isEmpty())
- emit errorMessage(tr("uname failed: %1\n").arg(QString::fromUtf8(stderrOutput)));
+ emit errorMessage(tr("uname failed: %1").arg(QString::fromUtf8(stderrOutput)) + QLatin1Char('\n'));
else
- emit errorMessage(tr("uname failed.\n"));
+ emit errorMessage(tr("uname failed.") + QLatin1Char('\n'));
} else {
emit progressMessage(QString::fromUtf8(d->process->readAllStandardOutput()));
}
@@ -158,7 +158,7 @@ void GenericLinuxDeviceTester::handlePortsGatheringError(const QString &message)
{
QTC_ASSERT(d->state == TestingPorts, return);
- emit errorMessage(tr("Error gathering ports: %1\n").arg(message));
+ emit errorMessage(tr("Error gathering ports: %1").arg(message) + QLatin1Char('\n'));
setFinished(TestFailure);
}
@@ -167,14 +167,14 @@ void GenericLinuxDeviceTester::handlePortListReady()
QTC_ASSERT(d->state == TestingPorts, return);
if (d->portsGatherer.usedPorts().isEmpty()) {
- emit progressMessage(tr("All specified ports are available.\n"));
+ emit progressMessage(tr("All specified ports are available.") + QLatin1Char('\n'));
} else {
QString portList;
foreach (const int port, d->portsGatherer.usedPorts())
portList += QString::number(port) + QLatin1String(", ");
portList.remove(portList.count() - 2, 2);
- emit errorMessage(tr("The following specified ports are currently in use: %1\n")
- .arg(portList));
+ emit errorMessage(tr("The following specified ports are currently in use: %1")
+ .arg(portList) + QLatin1Char('\n'));
}
setFinished(TestSuccess);
}
diff --git a/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp b/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp
index 48680b861f..508e9c0c21 100644
--- a/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp
@@ -115,7 +115,7 @@ void RemoteLinuxAnalyzeSupport::handleRemoteSetupRequested()
{
QTC_ASSERT(state() == Inactive, return);
- showMessage(tr("Checking available ports...\n"), Utils::NormalMessageFormat);
+ showMessage(tr("Checking available ports...") + QLatin1Char('\n'), Utils::NormalMessageFormat);
AbstractRemoteLinuxRunSupport::handleRemoteSetupRequested();
}
diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
index 030df3661e..ab1c0d4150 100644
--- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
@@ -141,7 +141,7 @@ void LinuxDeviceDebugSupport::handleRemoteSetupRequested()
{
QTC_ASSERT(state() == Inactive, return);
- showMessage(tr("Checking available ports...\n"), LogStatus);
+ showMessage(tr("Checking available ports...") + QLatin1Char('\n'), LogStatus);
AbstractRemoteLinuxRunSupport::handleRemoteSetupRequested();
}
diff --git a/src/plugins/valgrind/callgrindengine.cpp b/src/plugins/valgrind/callgrindengine.cpp
index c8e6099c25..574f286370 100644
--- a/src/plugins/valgrind/callgrindengine.cpp
+++ b/src/plugins/valgrind/callgrindengine.cpp
@@ -100,7 +100,7 @@ Valgrind::ValgrindRunner * CallgrindRunControl::runner()
bool CallgrindRunControl::startEngine()
{
- appendMessage(tr("Profiling %1\n").arg(executable()), Utils::NormalMessageFormat);
+ appendMessage(tr("Profiling %1").arg(executable()) + QLatin1Char('\n'), Utils::NormalMessageFormat);
return ValgrindRunControl::startEngine();
}
diff --git a/src/plugins/valgrind/memcheckengine.cpp b/src/plugins/valgrind/memcheckengine.cpp
index 232b01e72f..b416dddc0e 100644
--- a/src/plugins/valgrind/memcheckengine.cpp
+++ b/src/plugins/valgrind/memcheckengine.cpp
@@ -80,7 +80,7 @@ bool MemcheckRunControl::startEngine()
// Clear about-to-be-outdated tasks.
TaskHub::clearTasks(Analyzer::Constants::ANALYZERTASK_ID);
- appendMessage(tr("Analyzing memory of %1\n").arg(executable()),
+ appendMessage(tr("Analyzing memory of %1").arg(executable()) + QLatin1Char('\n'),
Utils::NormalMessageFormat);
return ValgrindRunControl::startEngine();
}
diff --git a/src/plugins/valgrind/valgrindengine.cpp b/src/plugins/valgrind/valgrindengine.cpp
index 337fee3a09..7f5cb77edf 100644
--- a/src/plugins/valgrind/valgrindengine.cpp
+++ b/src/plugins/valgrind/valgrindengine.cpp
@@ -173,7 +173,7 @@ void ValgrindRunControl::handleProgressFinished()
void ValgrindRunControl::runnerFinished()
{
- appendMessage(tr("Analyzing finished.\n"), NormalMessageFormat);
+ appendMessage(tr("Analyzing finished.") + QLatin1Char('\n'), NormalMessageFormat);
emit finished();
m_progress->reportFinished();
@@ -200,11 +200,11 @@ void ValgrindRunControl::receiveProcessError(const QString &message, QProcess::P
if (error == QProcess::FailedToStart) {
const QString valgrind = m_settings->valgrindExecutable();
if (!valgrind.isEmpty())
- appendMessage(tr("Error: \"%1\" could not be started: %2\n").arg(valgrind).arg(message), ErrorMessageFormat);
+ appendMessage(tr("Error: \"%1\" could not be started: %2").arg(valgrind, message) + QLatin1Char('\n'), ErrorMessageFormat);
else
- appendMessage(tr("Error: no Valgrind executable set.\n"), ErrorMessageFormat);
+ appendMessage(tr("Error: no Valgrind executable set.") + QLatin1Char('\n'), ErrorMessageFormat);
} else if (m_isStopping && error == QProcess::Crashed) { // process gets killed on stop
- appendMessage(tr("Process terminated.\n"), ErrorMessageFormat);
+ appendMessage(tr("Process terminated.") + QLatin1Char('\n'), ErrorMessageFormat);
} else {
appendMessage(QString::fromLatin1("** %1 **\n").arg(message), ErrorMessageFormat);
}
diff --git a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
index 200271a325..9fbfe75548 100644
--- a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp
@@ -429,9 +429,9 @@ QString VcsBaseOutputWindow::msgExecutionLogEntry(const QString &workingDir,
const QString args = formatArguments(arguments);
const QString nativeExecutable = QDir::toNativeSeparators(executable);
if (workingDir.isEmpty())
- return tr("Executing: %1 %2\n").arg(nativeExecutable, args);
- return tr("Executing in %1: %2 %3\n").
- arg(QDir::toNativeSeparators(workingDir), nativeExecutable, args);
+ return tr("Executing: %1 %2").arg(nativeExecutable, args) + QLatin1Char('\n');
+ return tr("Executing in %1: %2 %3").
+ arg(QDir::toNativeSeparators(workingDir), nativeExecutable, args) + QLatin1Char('\n');
}
void VcsBaseOutputWindow::appendCommand(const QString &text)
diff --git a/src/tools/qml2puppet/qml2puppet/qml2puppet.pro b/src/tools/qml2puppet/qml2puppet/qml2puppet.pro
index 383affb204..38ae1af110 100644
--- a/src/tools/qml2puppet/qml2puppet/qml2puppet.pro
+++ b/src/tools/qml2puppet/qml2puppet/qml2puppet.pro
@@ -8,9 +8,11 @@ BUILD_PUPPET_IN_CREATOR_BINPATH = $$(BUILD_PUPPET_IN_CREATOR_BINPATH)
CONFIG(debug, debug|release):isEmpty(BUILD_PUPPET_IN_CREATOR_BINPATH) {
QML_TARGET_PATH=$$[QT_INSTALL_BINS]/$$TARGET$$TARGET_EXT
if(write_file($$QML_TARGET_PATH)) {
+ CONVERTED_PATH=$$system_quote($$system_path($$QML_TARGET_PATH))
win32 {
- CONVERTED_PATH=$$system_quote($$system_path($$QML_TARGET_PATH))
system(del $$CONVERTED_PATH)
+ } else {
+ system(rm $$CONVERTED_PATH)
}
DESTDIR = $$[QT_INSTALL_BINS]
message("Build Qml Puppet to the Qt binary directory!")