From 440053f71e52c630ddf2da72d186b5c4f2f0d215 Mon Sep 17 00:00:00 2001 From: dt Date: Fri, 5 Dec 2008 16:30:26 +0100 Subject: [PATCH 1/9] Fixes: Add the cmakestep and makestep to a buildconfigratuion. Task: - RevBy: - AutoTest: - Details: Actually building only works on unix (since the generator is hardcoded.) and make is called without any parameters which is wrong. A lot is missing for basic build support, but this is a start. --- .../cmakeprojectmanager/cmakeproject.cpp | 22 +++++++++++++++++-- src/plugins/cmakeprojectmanager/cmakestep.cpp | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 1268c57b967..fe591fa0041 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -34,6 +34,8 @@ #include "cmakeproject.h" #include "cmakeprojectconstants.h" #include "cmakeprojectnodes.h" +#include "cmakestep.h" +#include "makestep.h" #include #include @@ -187,7 +189,7 @@ QString CMakeProject::buildDirectory(const QString &buildConfiguration) const { Q_UNUSED(buildConfiguration) //TODO - return ""; + return QFileInfo(m_fileName).absolutePath(); } ProjectExplorer::BuildStepConfigWidget *CMakeProject::createConfigWidget() @@ -230,7 +232,23 @@ void CMakeProject::saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &w void CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader &reader) { // TODO - Q_UNUSED(reader) + Q_UNUSED(reader); + if (buildConfigurations().isEmpty()) { + // No build configuration, adding those + + // TODO do we want to create one build configuration per target? + // or how do we want to handle that? + + CMakeStep *cmakeStep = new CMakeStep(this); + MakeStep *makeStep = new MakeStep(this); + + insertBuildStep(0, cmakeStep); + insertBuildStep(1, makeStep); + + addBuildConfiguration("all"); + setActiveBuildConfiguration("all"); + } + // Restoring is fine } diff --git a/src/plugins/cmakeprojectmanager/cmakestep.cpp b/src/plugins/cmakeprojectmanager/cmakestep.cpp index 523741c92ba..0c267ca2c4c 100644 --- a/src/plugins/cmakeprojectmanager/cmakestep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakestep.cpp @@ -54,7 +54,7 @@ bool CMakeStep::init(const QString &buildConfiguration) setEnabled(buildConfiguration, true); setWorkingDirectory(buildConfiguration, m_pro->buildDirectory(buildConfiguration)); setCommand(buildConfiguration, "cmake"); // TODO give full path here? - setArguments(buildConfiguration, QStringList()); // TODO + setArguments(buildConfiguration, QStringList() << "-GUnix Makefiles"); // TODO setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration)); return AbstractProcessStep::init(buildConfiguration); } From 520a5c9e65b677086dbf82a801d07fd784777054 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 8 Dec 2008 12:17:39 +0100 Subject: [PATCH 2/9] Put the preprocessor the CPlusPlus namespace --- src/plugins/cpptools/cppmodelmanager.cpp | 14 +++++++------- src/plugins/cpptools/rpp/pp-cctype.h | 4 ++-- src/plugins/cpptools/rpp/pp-client.h | 4 ++-- src/plugins/cpptools/rpp/pp-engine.cpp | 1 - src/plugins/cpptools/rpp/pp-engine.h | 6 +++--- src/plugins/cpptools/rpp/pp-environment.cpp | 2 +- src/plugins/cpptools/rpp/pp-environment.h | 4 ++-- src/plugins/cpptools/rpp/pp-internal.h | 4 ++-- src/plugins/cpptools/rpp/pp-macro-expander.cpp | 2 +- src/plugins/cpptools/rpp/pp-macro-expander.h | 4 ++-- src/plugins/cpptools/rpp/pp-macro.h | 4 ++-- src/plugins/cpptools/rpp/pp-scanner.h | 4 ++-- 12 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 6be28d36252..af885de622f 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -107,7 +107,7 @@ static const char pp_configuration[] = namespace CppTools { namespace Internal { -class CppPreprocessor: public rpp::Client +class CppPreprocessor: public CPlusPlus::Client { public: CppPreprocessor(QPointer modelManager); @@ -132,9 +132,9 @@ protected: virtual void macroAdded(const QByteArray ¯oName, const QByteArray ¯oText); virtual void startExpandingMacro(unsigned offset, - const rpp::Macro ¯o, + const Macro ¯o, const QByteArray &originalText); - virtual void stopExpandingMacro(unsigned offset, const rpp::Macro ¯o); + virtual void stopExpandingMacro(unsigned offset, const Macro ¯o); virtual void startSkippingBlocks(unsigned offset); virtual void stopSkippingBlocks(unsigned offset); virtual void sourceNeeded(QString &fileName, IncludeType type); @@ -142,8 +142,8 @@ protected: private: QPointer m_modelManager; CppModelManager::DocumentTable m_documents; - rpp::Environment env; - rpp::pp m_proc; + Environment env; + pp m_proc; QStringList m_includePaths; QStringList m_systemIncludePaths; QMap m_workingCopy; @@ -304,7 +304,7 @@ void CppPreprocessor::macroAdded(const QByteArray ¯oName, const QByteArray & } void CppPreprocessor::startExpandingMacro(unsigned offset, - const rpp::Macro &, + const Macro &, const QByteArray &originalText) { if (! m_currentDoc) @@ -314,7 +314,7 @@ void CppPreprocessor::startExpandingMacro(unsigned offset, m_currentDoc->addMacroUse(offset, originalText.length()); } -void CppPreprocessor::stopExpandingMacro(unsigned, const rpp::Macro &) +void CppPreprocessor::stopExpandingMacro(unsigned, const Macro &) { if (! m_currentDoc) return; diff --git a/src/plugins/cpptools/rpp/pp-cctype.h b/src/plugins/cpptools/rpp/pp-cctype.h index 62b44f0bf4c..bec9c25aef1 100644 --- a/src/plugins/cpptools/rpp/pp-cctype.h +++ b/src/plugins/cpptools/rpp/pp-cctype.h @@ -55,7 +55,7 @@ #include -namespace rpp { +namespace CPlusPlus { inline bool pp_isalpha (int __ch) { return std::isalpha ((unsigned char) __ch) != 0; } @@ -69,6 +69,6 @@ inline bool pp_isdigit (int __ch) inline bool pp_isspace (int __ch) { return std::isspace ((unsigned char) __ch) != 0; } -} // namespace rpp +} // namespace CPlusPlus #endif // PP_CCTYPE_H diff --git a/src/plugins/cpptools/rpp/pp-client.h b/src/plugins/cpptools/rpp/pp-client.h index 974004a6ce5..35df6497331 100644 --- a/src/plugins/cpptools/rpp/pp-client.h +++ b/src/plugins/cpptools/rpp/pp-client.h @@ -38,7 +38,7 @@ #include #include -namespace rpp { +namespace CPlusPlus { class Macro; @@ -74,6 +74,6 @@ public: virtual void stopSkippingBlocks(unsigned offset) = 0; }; -} // namespace rpp +} // namespace CPlusPlus #endif // PP_CLIENT_H diff --git a/src/plugins/cpptools/rpp/pp-engine.cpp b/src/plugins/cpptools/rpp/pp-engine.cpp index 66e8957f355..f2e1d4908eb 100644 --- a/src/plugins/cpptools/rpp/pp-engine.cpp +++ b/src/plugins/cpptools/rpp/pp-engine.cpp @@ -57,7 +57,6 @@ #include #include -using namespace rpp; using namespace CPlusPlus; namespace { diff --git a/src/plugins/cpptools/rpp/pp-engine.h b/src/plugins/cpptools/rpp/pp-engine.h index 13135f6a310..d0729b3715b 100644 --- a/src/plugins/cpptools/rpp/pp-engine.h +++ b/src/plugins/cpptools/rpp/pp-engine.h @@ -62,7 +62,7 @@ namespace CPlusPlus { class Token; } -namespace rpp { +namespace CPlusPlus { struct Value { @@ -200,7 +200,7 @@ namespace rpp { Value evalExpression(TokenIterator firstToken, TokenIterator lastToken, - const QByteArray &source) const; + const QByteArray &source) const; QVector tokenize(const QByteArray &text) const; @@ -226,6 +226,6 @@ namespace rpp { bool isQtReservedWord(const QByteArray &name) const; }; -} // namespace rpp +} // namespace CPlusPlus #endif // PP_ENGINE_H diff --git a/src/plugins/cpptools/rpp/pp-environment.cpp b/src/plugins/cpptools/rpp/pp-environment.cpp index 85e432ae5b5..b06d41757dd 100644 --- a/src/plugins/cpptools/rpp/pp-environment.cpp +++ b/src/plugins/cpptools/rpp/pp-environment.cpp @@ -54,7 +54,7 @@ #include "pp.h" #include -using namespace rpp; +using namespace CPlusPlus; Environment::Environment () : currentLine(0), diff --git a/src/plugins/cpptools/rpp/pp-environment.h b/src/plugins/cpptools/rpp/pp-environment.h index 5b97c492d79..e3d130871ba 100644 --- a/src/plugins/cpptools/rpp/pp-environment.h +++ b/src/plugins/cpptools/rpp/pp-environment.h @@ -56,7 +56,7 @@ #include #include -namespace rpp { +namespace CPlusPlus { struct Macro; @@ -104,6 +104,6 @@ private: int _hash_count; }; -} // namespace rpp +} // namespace CPlusPlus #endif // PP_ENVIRONMENT_H diff --git a/src/plugins/cpptools/rpp/pp-internal.h b/src/plugins/cpptools/rpp/pp-internal.h index 13bc7c17e84..c11de37453a 100644 --- a/src/plugins/cpptools/rpp/pp-internal.h +++ b/src/plugins/cpptools/rpp/pp-internal.h @@ -55,7 +55,7 @@ #include -namespace rpp { +namespace CPlusPlus { namespace _PP_internal { inline bool comment_p (const char *__first, const char *__last) @@ -73,6 +73,6 @@ inline bool comment_p (const char *__first, const char *__last) } } // _PP_internal -} // namespace rpp +} // namespace CPlusPlus #endif // PP_INTERNAL_H diff --git a/src/plugins/cpptools/rpp/pp-macro-expander.cpp b/src/plugins/cpptools/rpp/pp-macro-expander.cpp index 6b569eb132f..9ae9702fe18 100644 --- a/src/plugins/cpptools/rpp/pp-macro-expander.cpp +++ b/src/plugins/cpptools/rpp/pp-macro-expander.cpp @@ -35,7 +35,7 @@ #include "pp-macro-expander.h" #include -using namespace rpp; +using namespace CPlusPlus; MacroExpander::MacroExpander (Environment &env, pp_frame *frame) : env(env), frame(frame), diff --git a/src/plugins/cpptools/rpp/pp-macro-expander.h b/src/plugins/cpptools/rpp/pp-macro-expander.h index dd11540c336..c2f636c1385 100644 --- a/src/plugins/cpptools/rpp/pp-macro-expander.h +++ b/src/plugins/cpptools/rpp/pp-macro-expander.h @@ -53,7 +53,7 @@ #ifndef PP_MACRO_EXPANDER_H #define PP_MACRO_EXPANDER_H -namespace rpp { +namespace CPlusPlus { struct pp_frame { @@ -97,7 +97,7 @@ namespace rpp { int generated_lines; }; -} // namespace rpp +} // namespace CPlusPlus #endif // PP_MACRO_EXPANDER_H diff --git a/src/plugins/cpptools/rpp/pp-macro.h b/src/plugins/cpptools/rpp/pp-macro.h index a7bbe35e1d5..b091abd6184 100644 --- a/src/plugins/cpptools/rpp/pp-macro.h +++ b/src/plugins/cpptools/rpp/pp-macro.h @@ -56,7 +56,7 @@ #include #include -namespace rpp { +namespace CPlusPlus { struct Macro { @@ -90,6 +90,6 @@ namespace rpp { { } }; -} // namespace rpp +} // namespace CPlusPlus #endif // PP_MACRO_H diff --git a/src/plugins/cpptools/rpp/pp-scanner.h b/src/plugins/cpptools/rpp/pp-scanner.h index 53fea70b52f..85b65403b0b 100644 --- a/src/plugins/cpptools/rpp/pp-scanner.h +++ b/src/plugins/cpptools/rpp/pp-scanner.h @@ -53,7 +53,7 @@ #ifndef PP_SCANNER_H #define PP_SCANNER_H -namespace rpp { +namespace CPlusPlus { struct pp_skip_blanks { @@ -373,7 +373,7 @@ struct pp_skip_argument } }; -} // namespace rpp +} // namespace CPlusPlus #endif // PP_SCANNER_H From f6fbb274ae715c05fcdee61cba5395b4fd4814b9 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 8 Dec 2008 12:24:40 +0100 Subject: [PATCH 3/9] Moved the preprocessor. --- src/libs/cplusplus/cplusplus.pro | 16 ++++++++++++++-- .../rpp => libs/cplusplus}/pp-cctype.h | 0 .../rpp => libs/cplusplus}/pp-client.h | 0 .../rpp => libs/cplusplus}/pp-engine.cpp | 0 .../rpp => libs/cplusplus}/pp-engine.h | 0 .../rpp => libs/cplusplus}/pp-environment.cpp | 0 .../rpp => libs/cplusplus}/pp-environment.h | 0 .../cpptools/rpp => libs/cplusplus}/pp-fwd.h | 0 .../rpp => libs/cplusplus}/pp-internal.h | 0 .../cplusplus}/pp-macro-expander.cpp | 0 .../rpp => libs/cplusplus}/pp-macro-expander.h | 0 .../cpptools/rpp => libs/cplusplus}/pp-macro.h | 0 .../rpp => libs/cplusplus}/pp-scanner.h | 0 .../cpptools/rpp => libs/cplusplus}/pp.h | 0 src/plugins/cpptools/cpptools.pro | 2 +- src/plugins/cpptools/rpp/rpp.pri | 18 ------------------ 16 files changed, 15 insertions(+), 21 deletions(-) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-cctype.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-client.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-engine.cpp (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-engine.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-environment.cpp (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-environment.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-fwd.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-internal.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-macro-expander.cpp (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-macro-expander.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-macro.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp-scanner.h (100%) rename src/{plugins/cpptools/rpp => libs/cplusplus}/pp.h (100%) delete mode 100644 src/plugins/cpptools/rpp/rpp.pri diff --git a/src/libs/cplusplus/cplusplus.pro b/src/libs/cplusplus/cplusplus.pro index 1a2b5326623..49d78fda8b3 100644 --- a/src/libs/cplusplus/cplusplus.pro +++ b/src/libs/cplusplus/cplusplus.pro @@ -21,7 +21,16 @@ HEADERS += \ TypeOfExpression.h \ TypePrettyPrinter.h \ ResolveExpression.h \ - LookupContext.h + LookupContext.h \ + pp-cctype.h \ + pp-engine.h \ + pp-fwd.h \ + pp-macro-expander.h \ + pp-scanner.h \ + pp-client.h \ + pp-environment.h \ + pp-internal.h \ + pp-macro.h SOURCES += \ SimpleLexer.cpp \ @@ -35,6 +44,9 @@ SOURCES += \ TypeOfExpression.cpp \ TypePrettyPrinter.cpp \ ResolveExpression.cpp \ - LookupContext.cpp + LookupContext.cpp \ + pp-engine.cpp \ + pp-environment.cpp \ + pp-macro-expander.cpp RESOURCES += cplusplus.qrc diff --git a/src/plugins/cpptools/rpp/pp-cctype.h b/src/libs/cplusplus/pp-cctype.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-cctype.h rename to src/libs/cplusplus/pp-cctype.h diff --git a/src/plugins/cpptools/rpp/pp-client.h b/src/libs/cplusplus/pp-client.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-client.h rename to src/libs/cplusplus/pp-client.h diff --git a/src/plugins/cpptools/rpp/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp similarity index 100% rename from src/plugins/cpptools/rpp/pp-engine.cpp rename to src/libs/cplusplus/pp-engine.cpp diff --git a/src/plugins/cpptools/rpp/pp-engine.h b/src/libs/cplusplus/pp-engine.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-engine.h rename to src/libs/cplusplus/pp-engine.h diff --git a/src/plugins/cpptools/rpp/pp-environment.cpp b/src/libs/cplusplus/pp-environment.cpp similarity index 100% rename from src/plugins/cpptools/rpp/pp-environment.cpp rename to src/libs/cplusplus/pp-environment.cpp diff --git a/src/plugins/cpptools/rpp/pp-environment.h b/src/libs/cplusplus/pp-environment.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-environment.h rename to src/libs/cplusplus/pp-environment.h diff --git a/src/plugins/cpptools/rpp/pp-fwd.h b/src/libs/cplusplus/pp-fwd.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-fwd.h rename to src/libs/cplusplus/pp-fwd.h diff --git a/src/plugins/cpptools/rpp/pp-internal.h b/src/libs/cplusplus/pp-internal.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-internal.h rename to src/libs/cplusplus/pp-internal.h diff --git a/src/plugins/cpptools/rpp/pp-macro-expander.cpp b/src/libs/cplusplus/pp-macro-expander.cpp similarity index 100% rename from src/plugins/cpptools/rpp/pp-macro-expander.cpp rename to src/libs/cplusplus/pp-macro-expander.cpp diff --git a/src/plugins/cpptools/rpp/pp-macro-expander.h b/src/libs/cplusplus/pp-macro-expander.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-macro-expander.h rename to src/libs/cplusplus/pp-macro-expander.h diff --git a/src/plugins/cpptools/rpp/pp-macro.h b/src/libs/cplusplus/pp-macro.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-macro.h rename to src/libs/cplusplus/pp-macro.h diff --git a/src/plugins/cpptools/rpp/pp-scanner.h b/src/libs/cplusplus/pp-scanner.h similarity index 100% rename from src/plugins/cpptools/rpp/pp-scanner.h rename to src/libs/cplusplus/pp-scanner.h diff --git a/src/plugins/cpptools/rpp/pp.h b/src/libs/cplusplus/pp.h similarity index 100% rename from src/plugins/cpptools/rpp/pp.h rename to src/libs/cplusplus/pp.h diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro index 8a096900ebf..92905e42ef9 100644 --- a/src/plugins/cpptools/cpptools.pro +++ b/src/plugins/cpptools/cpptools.pro @@ -10,7 +10,7 @@ unix:QMAKE_CXXFLAGS_DEBUG += -O3 INCLUDEPATH += . DEFINES += CPPTOOLS_LIBRARY CONFIG += help -include(rpp/rpp.pri)|error("Can't find RPP") + HEADERS += cpptools_global.h \ cppquickopenfilter.h \ cppclassesfilter.h \ diff --git a/src/plugins/cpptools/rpp/rpp.pri b/src/plugins/cpptools/rpp/rpp.pri deleted file mode 100644 index a79b0028a05..00000000000 --- a/src/plugins/cpptools/rpp/rpp.pri +++ /dev/null @@ -1,18 +0,0 @@ -DEPENDPATH += $$PWD -INCLUDEPATH += $$PWD - -HEADERS += $$PWD/pp-cctype.h \ - $$PWD/pp-engine.h \ - $$PWD/pp-environment.h \ - $$PWD/pp-internal.h \ - $$PWD/pp-macro-expander.h \ - $$PWD/pp-macro.h \ - $$PWD/pp-scanner.h \ - $$PWD/pp.h \ - $$PWD/pp-client.h - -SOURCES += $$PWD/pp-engine.cpp \ - $$PWD/pp-environment.cpp \ - $$PWD/pp-macro-expander.cpp - - From e503e1e4e9e4b4482373f1f17eec0655b9562b3e Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 8 Dec 2008 12:24:31 +0100 Subject: [PATCH 4/9] Fixes: Parse all the targets. Task: - RevBy: - AutoTest: - Details: (Only outputs them via qDebug().) --- .../cmakeprojectmanager/cmakeproject.cpp | 28 +++++++++++++++++-- .../cmakeprojectmanager/cmakeproject.h | 5 ++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index fe591fa0041..4eb31302e65 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -393,12 +393,36 @@ void CMakeCbpParser::parseBuild() void CMakeCbpParser::parseTarget() { + m_targetOutput.clear(); + m_targetType = false; + while(!atEnd()) { + readNext(); + if (isEndElement()) { + if (m_targetType && !m_targetOutput.isEmpty()) { + qDebug()<<"found target "< m_targets; QList m_fileList; QStringList m_includeFiles; + + QString m_targetOutput; + bool m_targetType; }; class CMakeFile : public Core::IFile From 83d5461c7f083277ee5948b6b4bbbd93b63415dc Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 8 Dec 2008 12:44:28 +0100 Subject: [PATCH 5/9] Fixes: Find the qplatformdefs.h file Task: - RevBy: - AutoTest: - Details: Add the include path for qplatformdefs.h to the fot. --- .../cmakeprojectmanager/cmakeproject.cpp | 2 +- src/plugins/qt4projectmanager/qt4project.cpp | 3 ++ .../qt4projectmanager/qtversionmanager.cpp | 47 +++++++++++-------- .../qt4projectmanager/qtversionmanager.h | 2 + 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 4eb31302e65..52c28cbc3d5 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -226,7 +226,7 @@ QStringList CMakeProject::files(FilesMode fileMode) const void CMakeProject::saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer) { // TODO - Q_UNUSED(writer) + Q_UNUSED(writer); } void CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader &reader) diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 501068af004..2e06e1ae4e5 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -474,6 +474,9 @@ void Qt4Project::updateCodeModel() } } + // Add mkspec directory + allIncludePaths.append(qtVersion(activeBuildConfiguration())->mkspecPath()); + QStringList files; files += m_projectFiles->files[HeaderType]; files += m_projectFiles->generatedFiles[HeaderType]; diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index 0c68fcd98eb..1262f901785 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -728,6 +728,12 @@ QString QtVersion::mkspec() const return m_mkspec; } +QString QtVersion::mkspecPath() const +{ + updateMkSpec(); + return m_mkspecFullPath; +} + QHash QtVersion::versionInfo() const { updateVersionInfo(); @@ -1023,24 +1029,24 @@ void QtVersion::updateMkSpec() const //qDebug()<<"Finding mkspec for"< &temp = line.split('='); - if(temp.size() == 2) { - mkspec = temp.at(1).trimmed(); - if (mkspec.startsWith("$$QT_BUILD_TREE/mkspecs/")) - mkspec = mkspec.mid(QString("$$QT_BUILD_TREE/mkspecs/").length()); - else if (mkspec.startsWith("$$QT_BUILD_TREE\\mkspecs\\")) - mkspec = mkspec.mid(QString("$$QT_BUILD_TREE\\mkspecs\\").length()); - } - break; - } - } - f.close(); - } else { +// QFile f(path() + "/.qmake.cache"); +// if (f.exists() && f.open(QIODevice::ReadOnly)) { +// while(!f.atEnd()) { +// QByteArray line = f.readLine(); +// if(line.startsWith("QMAKESPEC")) { +// const QList &temp = line.split('='); +// if(temp.size() == 2) { +// mkspec = temp.at(1).trimmed(); +// if (mkspec.startsWith("$$QT_BUILD_TREE/mkspecs/")) +// mkspec = mkspec.mid(QString("$$QT_BUILD_TREE/mkspecs/").length()); +// else if (mkspec.startsWith("$$QT_BUILD_TREE\\mkspecs\\")) +// mkspec = mkspec.mid(QString("$$QT_BUILD_TREE\\mkspecs\\").length()); +// } +// break; +// } +// } +// f.close(); +// } else { // no .qmake.cache so look at the default mkspec QString mkspecPath = versionInfo().value("QMAKE_MKSPECS"); if (mkspecPath.isEmpty()) @@ -1095,9 +1101,10 @@ void QtVersion::updateMkSpec() const mkspec = f2.symLinkTarget(); } #endif - } +// } - int index =mkspec.lastIndexOf('/'); + m_mkspecFullPath = mkspec; + int index = mkspec.lastIndexOf('/'); if(index == -1) index = mkspec.lastIndexOf('\\'); if (index >= 0 && QDir(mkspec.left(index)).canonicalPath() == QDir(m_path + "/mkspecs/").canonicalPath()) diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index 5810cfa1c2d..a8ca9570895 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -67,6 +67,7 @@ public: QString path() const; QString sourcePath() const; QString mkspec() const; + QString mkspecPath() const; QString makeCommand() const; QString qmakeCommand() const; // Returns the PREFIX, BINPREFIX, DOCPREFIX and similar information @@ -107,6 +108,7 @@ private: QString m_path; QString m_sourcePath; mutable QString m_mkspec; // updated lazily + mutable QString m_mkspecFullPath; QString m_mingwDirectory; QString m_prependPath; QString m_msvcVersion; From 310d50fd0760eed3558d56709b49dca9ffc74530 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 8 Dec 2008 12:59:33 +0100 Subject: [PATCH 6/9] Use Macros. --- src/libs/cplusplus/CppDocument.cpp | 19 +-------- src/libs/cplusplus/CppDocument.h | 15 +++++--- src/libs/cplusplus/pp-cctype.h | 10 +++-- src/libs/cplusplus/pp-client.h | 6 ++- src/libs/cplusplus/pp-engine.cpp | 21 +++------- src/libs/cplusplus/pp-engine.h | 2 +- src/libs/cplusplus/pp-environment.cpp | 4 +- src/libs/cplusplus/pp-environment.h | 8 ++-- src/libs/cplusplus/pp-macro.h | 45 +++++++++++----------- src/plugins/cpptools/cppcodecompletion.cpp | 4 +- src/plugins/cpptools/cppmodelmanager.cpp | 20 +++++----- 11 files changed, 69 insertions(+), 85 deletions(-) diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 3a280416d9b..45ad1f569a5 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -138,19 +138,9 @@ void Document::addIncludeFile(const QString &fileName) _includedFiles.append(fileName); } -QByteArray Document::definedMacros() const +void Document::appendMacro(const Macro ¯o) { - return _definedMacros; -} - -void Document::appendMacro(const QByteArray ¯oName, const QByteArray &text) -{ - int index = macroName.indexOf('('); - if (index == -1) - _macroNames.insert(macroName); - else - _macroNames.insert(macroName.left(index)); - _definedMacros += text; + _definedMacros.append(macro); } void Document::addMacroUse(unsigned offset, unsigned length) @@ -251,11 +241,6 @@ void Document::stopSkippingBlocks(unsigned stop) _skippedBlocks.back() = Block(start, stop); } -QSet Document::macroNames() const -{ - return _macroNames; -} - bool Document::parse(ParseMode mode) { TranslationUnit::ParseMode m = TranslationUnit::ParseTranlationUnit; diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index e952913a07b..d289c579e9c 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -36,6 +36,8 @@ #include +#include "pp-macro.h" + #include #include #include @@ -45,6 +47,8 @@ namespace CPlusPlus { +class Macro; + class CPLUSPLUS_EXPORT Document { Document(const Document &other); @@ -63,10 +67,7 @@ public: QStringList includedFiles() const; void addIncludeFile(const QString &fileName); - QByteArray definedMacros() const; - QSet macroNames() const; - - void appendMacro(const QByteArray ¯oName, const QByteArray &text); + void appendMacro(const Macro ¯o); void addMacroUse(unsigned offset, unsigned length); @@ -81,6 +82,9 @@ public: Scope *globalSymbols() const; // ### deprecate? Namespace *globalNamespace() const; + QList definedMacros() const + { return _definedMacros; } + Symbol *findSymbolAt(unsigned line, unsigned column) const; void setSource(const QByteArray &source); @@ -191,8 +195,7 @@ private: TranslationUnit *_translationUnit; Namespace *_globalNamespace; QList _diagnosticMessages; - QByteArray _definedMacros; - QSet _macroNames; + QList _definedMacros; QList _skippedBlocks; QList _macroUses; }; diff --git a/src/libs/cplusplus/pp-cctype.h b/src/libs/cplusplus/pp-cctype.h index bec9c25aef1..b7558ae5050 100644 --- a/src/libs/cplusplus/pp-cctype.h +++ b/src/libs/cplusplus/pp-cctype.h @@ -53,20 +53,22 @@ #ifndef PP_CCTYPE_H #define PP_CCTYPE_H +#include + #include namespace CPlusPlus { -inline bool pp_isalpha (int __ch) +inline bool CPLUSPLUS_EXPORT pp_isalpha (int __ch) { return std::isalpha ((unsigned char) __ch) != 0; } -inline bool pp_isalnum (int __ch) +inline bool CPLUSPLUS_EXPORT pp_isalnum (int __ch) { return std::isalnum ((unsigned char) __ch) != 0; } -inline bool pp_isdigit (int __ch) +inline bool CPLUSPLUS_EXPORT pp_isdigit (int __ch) { return std::isdigit ((unsigned char) __ch) != 0; } -inline bool pp_isspace (int __ch) +inline bool CPLUSPLUS_EXPORT pp_isspace (int __ch) { return std::isspace ((unsigned char) __ch) != 0; } } // namespace CPlusPlus diff --git a/src/libs/cplusplus/pp-client.h b/src/libs/cplusplus/pp-client.h index 35df6497331..2fc781f22f5 100644 --- a/src/libs/cplusplus/pp-client.h +++ b/src/libs/cplusplus/pp-client.h @@ -34,6 +34,8 @@ #ifndef PP_CLIENT_H #define PP_CLIENT_H +#include + #include #include #include @@ -42,7 +44,7 @@ namespace CPlusPlus { class Macro; -class Client +class CPLUSPLUS_EXPORT Client { Client(const Client &other); void operator=(const Client &other); @@ -60,7 +62,7 @@ public: virtual ~Client() { } - virtual void macroAdded(const QByteArray ¯oId, const QByteArray &text) = 0; + virtual void macroAdded(const Macro ¯o) = 0; virtual void sourceNeeded(QString &fileName, IncludeType mode) = 0; // ### FIX the signature. virtual void startExpandingMacro(unsigned offset, diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index f2e1d4908eb..7bdc9b95d69 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -906,16 +906,8 @@ void pp::processDefine(TokenIterator firstToken, TokenIterator lastToken) env.bind(macro); - QByteArray macroText; - macroText.reserve(64); - macroText += "#define "; - - macroText += macroId; - macroText += ' '; - macroText += macro.definition; - macroText += '\n'; - - client->macroAdded(macroId, macroText); + if (client) + client->macroAdded(macro); } void pp::processIf(TokenIterator firstToken, TokenIterator lastToken) @@ -1019,13 +1011,10 @@ void pp::processUndef(TokenIterator firstToken, TokenIterator lastToken) if (tk->is(T_IDENTIFIER)) { const QByteArray macroName = tokenText(*tk); - env.remove(macroName); + const Macro *macro = env.remove(macroName); - QByteArray macroText; - macroText += "#undef "; - macroText += macroName; - macroText += '\n'; - client->macroAdded(macroName, macroText); + if (client && macro) + client->macroAdded(*macro); } } diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h index d0729b3715b..c909ffab3a7 100644 --- a/src/libs/cplusplus/pp-engine.h +++ b/src/libs/cplusplus/pp-engine.h @@ -134,7 +134,7 @@ namespace CPlusPlus { #undef PP_DEFINE_BIN_OP }; - class pp + class CPLUSPLUS_EXPORT pp { Client *client; Environment &env; diff --git a/src/libs/cplusplus/pp-environment.cpp b/src/libs/cplusplus/pp-environment.cpp index b06d41757dd..a1ade3b189a 100644 --- a/src/libs/cplusplus/pp-environment.cpp +++ b/src/libs/cplusplus/pp-environment.cpp @@ -115,12 +115,12 @@ Macro *Environment::bind(const Macro &__macro) return m; } -void Environment::remove (const QByteArray &name) +Macro *Environment::remove (const QByteArray &name) { Macro macro; macro.name = name; macro.hidden = true; - bind(macro); + return bind(macro); } bool Environment::isBuiltinMacro(const QByteArray &s) const diff --git a/src/libs/cplusplus/pp-environment.h b/src/libs/cplusplus/pp-environment.h index e3d130871ba..e2a75d29b81 100644 --- a/src/libs/cplusplus/pp-environment.h +++ b/src/libs/cplusplus/pp-environment.h @@ -53,14 +53,16 @@ #ifndef PP_ENVIRONMENT_H #define PP_ENVIRONMENT_H +#include "CPlusPlusForwardDeclarations.h" + #include #include namespace CPlusPlus { -struct Macro; +class Macro; -class Environment +class CPLUSPLUS_EXPORT Environment { public: Environment(); @@ -70,7 +72,7 @@ public: Macro *macroAt(unsigned index) const; Macro *bind(const Macro ¯o); - void remove(const QByteArray &name); + Macro *remove(const QByteArray &name); Macro *resolve(const QByteArray &name) const; bool isBuiltinMacro(const QByteArray &name) const; diff --git a/src/libs/cplusplus/pp-macro.h b/src/libs/cplusplus/pp-macro.h index b091abd6184..494b7a4de7f 100644 --- a/src/libs/cplusplus/pp-macro.h +++ b/src/libs/cplusplus/pp-macro.h @@ -53,42 +53,43 @@ #ifndef PP_MACRO_H #define PP_MACRO_H +#include + #include #include namespace CPlusPlus { - struct Macro +class CPLUSPLUS_EXPORT Macro +{ +public: + QByteArray name; + QByteArray definition; + QVector formals; + QByteArray fileName; + int line; + Macro *next; + unsigned hashcode; + + union { - QByteArray name; - QByteArray definition; - QVector formals; - QByteArray fileName; - int line; - int lines; - Macro *next; - unsigned hashcode; + unsigned state; - union + struct { - unsigned state; - - struct - { - unsigned hidden: 1; - unsigned function_like: 1; - unsigned variadics: 1; - }; + unsigned hidden: 1; + unsigned function_like: 1; + unsigned variadics: 1; }; + }; - inline Macro(): + inline Macro(): line(0), - lines(0), next(0), hashcode(0), state(0) - { } - }; + { } +}; } // namespace CPlusPlus diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 7568d2c8877..47ac5c57678 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -699,7 +699,9 @@ void CppCodeCompletion::addMacros(const LookupContext &context) continue; processed.insert(fn); if (Document::Ptr doc = context.document(fn)) { - macroNames += doc->macroNames(); + foreach (const Macro macro, doc->definedMacros()) { + macroNames.insert(macro.name); + } todo += doc->includedFiles(); } } diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index af885de622f..e8359da2b5b 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -31,7 +31,7 @@ ** ***************************************************************************/ -#include "pp.h" +#include #include "cppmodelmanager.h" #include "cpphoverhandler.h" @@ -129,8 +129,7 @@ protected: void mergeEnvironment(CPlusPlus::Document::Ptr doc); void mergeEnvironment(CPlusPlus::Document::Ptr doc, QSet *processed); - virtual void macroAdded(const QByteArray ¯oName, - const QByteArray ¯oText); + virtual void macroAdded(const Macro ¯o); virtual void startExpandingMacro(unsigned offset, const Macro ¯o, const QByteArray &originalText); @@ -295,12 +294,12 @@ QByteArray CppPreprocessor::tryIncludeFile(QString &fileName, IncludeType type) return QByteArray(); } -void CppPreprocessor::macroAdded(const QByteArray ¯oName, const QByteArray ¯oText) +void CppPreprocessor::macroAdded(const Macro ¯o) { if (! m_currentDoc) return; - m_currentDoc->appendMacro(macroName, macroText); + m_currentDoc->appendMacro(macro); } void CppPreprocessor::startExpandingMacro(unsigned offset, @@ -340,14 +339,13 @@ void CppPreprocessor::mergeEnvironment(Document::Ptr doc, QSet *process processed->insert(fn); - foreach (QString includedFile, doc->includedFiles()) + foreach (QString includedFile, doc->includedFiles()) { mergeEnvironment(m_documents.value(includedFile), processed); + } - const QByteArray macros = doc->definedMacros(); - QByteArray localFileName = doc->fileName().toUtf8(); - - QByteArray dummy; - m_proc(localFileName, macros, &dummy); + foreach (const Macro macro, doc->definedMacros()) { + env.bind(macro); + } } void CppPreprocessor::startSkippingBlocks(unsigned offset) From c14896b7d29b701cd653625df09cd4be2597d638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Fri, 5 Dec 2008 15:58:19 +0100 Subject: [PATCH 7/9] Slight optimization in Session::projectForFile Avoid creating a copy of the list of projects. --- src/plugins/cpptools/searchsymbols.cpp | 2 +- src/plugins/projectexplorer/session.cpp | 36 ++++++++++++------------- src/plugins/projectexplorer/session.h | 3 ++- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/plugins/cpptools/searchsymbols.cpp b/src/plugins/cpptools/searchsymbols.cpp index 670d0d6d471..308449ab581 100644 --- a/src/plugins/cpptools/searchsymbols.cpp +++ b/src/plugins/cpptools/searchsymbols.cpp @@ -194,7 +194,7 @@ QString SearchSymbols::symbolName(const Symbol *symbol) const void SearchSymbols::appendItem(const QString &name, const QString &info, ModelItemInfo::ItemType type, - const CPlusPlus::Symbol *symbol) + const Symbol *symbol) { const QIcon icon = icons.iconForSymbol(symbol); items.append(ModelItemInfo(name, info, type, diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 876b8294a37..71057473046 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -709,7 +709,7 @@ void SessionManager::editDependencies() dlg.exec(); } -QList SessionManager::projects() const +const QList &SessionManager::projects() const { return m_file->m_projects; } @@ -839,26 +839,26 @@ Project *SessionManager::projectForFile(const QString &fileName) const if (debug) qDebug() << "SessionManager::projectForFile(" << fileName << ")"; - Project *project = 0; + const QList &projectList = projects(); - QList projectList = projects(); + // Check current project first + Project *currentProject = ProjectExplorerPlugin::instance()->currentProject(); + if (currentProject && projectContainsFile(currentProject, fileName)) + return currentProject; - // Always check current project first - if (Project *currentProject = ProjectExplorerPlugin::instance()->currentProject()) { - projectList.removeOne(currentProject); - projectList.insert(0, currentProject); - } + foreach (Project *p, projectList) + if (p != currentProject && projectContainsFile(p, fileName)) + return p; - foreach (Project *p, projectList) { - if (!m_projectFileCache.contains(p)) { - m_projectFileCache.insert(p, p->files(Project::AllFiles)); - } - if (m_projectFileCache.value(p).contains(fileName)) { - project = p; - break; - } - } - return project; + return 0; +} + +bool SessionManager::projectContainsFile(Project *p, const QString &fileName) const +{ + if (!m_projectFileCache.contains(p)) + m_projectFileCache.insert(p, p->files(Project::AllFiles)); + + return m_projectFileCache.value(p).contains(fileName); } void SessionManager::setEditorCodec(Core::IEditor *editor, const QString &fileName) diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h index fcf98a23ded..d07316f07a4 100644 --- a/src/plugins/projectexplorer/session.h +++ b/src/plugins/projectexplorer/session.h @@ -137,7 +137,7 @@ public: Core::IFile *file() const; Project *startupProject() const; - QList projects() const; + const QList &projects() const; bool isDefaultVirgin() const; bool isDefaultSession(const QString &session) const; @@ -182,6 +182,7 @@ private: bool loadImpl(const QString &fileName); bool createImpl(const QString &fileName); QString sessionNameToFileName(const QString &session); + bool projectContainsFile(Project *p, const QString &fileName) const; bool recursiveDependencyCheck(const QString &newDep, const QString &checkDep) const; QStringList dependencies(const QString &proName) const; From d0a2f567c1967a17d6c136d3092b2d1a076604fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Fri, 5 Dec 2008 16:06:09 +0100 Subject: [PATCH 8/9] Renamed slot to avoid confusement ProjectExplorer::sessionManager -> ProjectExplorer::showSessionManager --- src/plugins/projectexplorer/projectexplorer.cpp | 6 +++--- src/plugins/projectexplorer/projectexplorer.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index b95d5c19463..f67984f0da8 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -605,7 +605,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin } } - connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(sessionManager())); + connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); #if 0 connect(m_loadAction, SIGNAL(triggered()), this, SLOT(loadAction())); @@ -765,10 +765,10 @@ void ProjectExplorerPlugin::newProject() updateActions(); } -void ProjectExplorerPlugin::sessionManager() +void ProjectExplorerPlugin::showSessionManager() { if (debug) - qDebug() << "ProjectExplorerPlugin::newSession"; + qDebug() << "ProjectExplorerPlugin::showSessionManager"; if (m_session->isDefaultVirgin()) { // do not save new virgin default sessions diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 6a7f4beb831..97eb684bb49 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -143,7 +143,7 @@ private slots: void unloadProject(); void clearSession(); void newProject(); - void sessionManager(); + void showSessionManager(); void populateBuildConfigurationMenu(); void buildConfigurationMenuTriggered(QAction *); void populateRunConfigurationMenu(); From bf7486c0118c32fe171cca7e50fd3fb89a5dbe72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Mon, 8 Dec 2008 13:01:54 +0100 Subject: [PATCH 9/9] Don't keep around references to old documents The code completion was keeping around references to old documents after the completion finished. This caused documents to stay in memory when unloading projects, up until the next time you used the completion. --- src/libs/cplusplus/TypeOfExpression.cpp | 1 + src/libs/cplusplus/TypeOfExpression.h | 3 +++ src/plugins/cpptools/cppcodecompletion.cpp | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp index 7dd669365fc..487c9f8a469 100644 --- a/src/libs/cplusplus/TypeOfExpression.cpp +++ b/src/libs/cplusplus/TypeOfExpression.cpp @@ -48,6 +48,7 @@ TypeOfExpression::TypeOfExpression(): void TypeOfExpression::setDocuments(const QMap &documents) { m_documents = documents; + m_lookupContext = LookupContext(); } QList TypeOfExpression::operator()(const QString &expression, diff --git a/src/libs/cplusplus/TypeOfExpression.h b/src/libs/cplusplus/TypeOfExpression.h index ecdfac7b290..cd7a23441fd 100644 --- a/src/libs/cplusplus/TypeOfExpression.h +++ b/src/libs/cplusplus/TypeOfExpression.h @@ -54,6 +54,9 @@ public: /** * Sets the documents used to evaluate expressions. Should be set before * calling this functor. + * + * Also clears the lookup context, so can be used to make sure references + * to the documents previously used are removed. */ void setDocuments(const QMap &documents); diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 47ac5c57678..d24f5a5f81d 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -1027,6 +1027,10 @@ bool CppCodeCompletion::partiallyComplete(const QList()); } int CppCodeCompletion::findStartOfName(const TextEditor::ITextEditor *editor)