diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h index 014d1be2c91e931c99b5a866cfb48ed6842b1805..f4e418843430976e8f24d6ac7666e54a028858a5 100644 --- a/src/libs/cplusplus/LookupContext.h +++ b/src/libs/cplusplus/LookupContext.h @@ -34,7 +34,7 @@ #ifndef CPLUSPLUS_LOOKUPCONTEXT_H #define CPLUSPLUS_LOOKUPCONTEXT_H -#include <cplusplus/CppDocument.h> +#include "CppDocument.h" #include <QPair> namespace CPlusPlus { diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp index 90ec7837a738589ae39c683a67d9d4d57ba0a5e9..fe9a664d18e6d85c93813abf77af16927dc8473b 100644 --- a/src/libs/cplusplus/TypeOfExpression.cpp +++ b/src/libs/cplusplus/TypeOfExpression.cpp @@ -32,12 +32,12 @@ ***************************************************************************/ #include "TypeOfExpression.h" +#include <TranslationUnit.h> +#include "LookupContext.h" +#include "ResolveExpression.h" +#include "pp.h" #include <AST.h> -#include <TranslationUnit.h> -#include <cplusplus/LookupContext.h> -#include <cplusplus/ResolveExpression.h> -#include <cplusplus/pp.h> #include <QSet> using namespace CPlusPlus; diff --git a/src/libs/cplusplus/TypeOfExpression.h b/src/libs/cplusplus/TypeOfExpression.h index 78af0346347b329379ad7d9f89320604ae94830b..4b057ce292b8f9718f8d9ec578b12d6f948d5fde 100644 --- a/src/libs/cplusplus/TypeOfExpression.h +++ b/src/libs/cplusplus/TypeOfExpression.h @@ -33,10 +33,10 @@ #ifndef CPLUSPLUS_TYPEOFEXPRESSION_H #define CPLUSPLUS_TYPEOFEXPRESSION_H -#include <ASTfwd.h> -#include <cplusplus/CppDocument.h> -#include <cplusplus/LookupContext.h> +#include "CppDocument.h" +#include "LookupContext.h" +#include <ASTfwd.h> #include <QtCore/QMap> #include <QtCore/QObject> #include <QtCore/QString> diff --git a/src/libs/cplusplus/cplusplus-lib.pri b/src/libs/cplusplus/cplusplus-lib.pri new file mode 100644 index 0000000000000000000000000000000000000000..d3053228fc31e4285f603498c7abca622f30f4e8 --- /dev/null +++ b/src/libs/cplusplus/cplusplus-lib.pri @@ -0,0 +1,48 @@ +DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE CPLUSPLUS_BUILD_LIB +INCLUDEPATH += $$PWD + +include(../../shared/cplusplus/cplusplus.pri) + +HEADERS += \ + $$PWD/SimpleLexer.h \ + $$PWD/ExpressionUnderCursor.h \ + $$PWD/TokenUnderCursor.h \ + $$PWD/CppDocument.h \ + $$PWD/Icons.h \ + $$PWD/Overview.h \ + $$PWD/OverviewModel.h \ + $$PWD/NamePrettyPrinter.h \ + $$PWD/TypeOfExpression.h \ + $$PWD/TypePrettyPrinter.h \ + $$PWD/ResolveExpression.h \ + $$PWD/LookupContext.h \ + $$PWD/PreprocessorClient.h \ + $$PWD/PreprocessorEnvironment.h \ + $$PWD/Macro.h \ + $$PWD/pp.h \ + $$PWD/pp-cctype.h \ + $$PWD/pp-engine.h \ + $$PWD/pp-macro-expander.h \ + $$PWD/pp-scanner.h + +SOURCES += \ + $$PWD/SimpleLexer.cpp \ + $$PWD/ExpressionUnderCursor.cpp \ + $$PWD/TokenUnderCursor.cpp \ + $$PWD/CppDocument.cpp \ + $$PWD/Icons.cpp \ + $$PWD/Overview.cpp \ + $$PWD/OverviewModel.cpp \ + $$PWD/NamePrettyPrinter.cpp \ + $$PWD/TypeOfExpression.cpp \ + $$PWD/TypePrettyPrinter.cpp \ + $$PWD/ResolveExpression.cpp \ + $$PWD/LookupContext.cpp \ + $$PWD/PreprocessorClient.cpp \ + $$PWD/PreprocessorEnvironment.cpp \ + $$PWD/Macro.cpp \ + $$PWD/pp-engine.cpp \ + $$PWD/pp-macro-expander.cpp \ + $$PWD/pp-scanner.cpp + +RESOURCES += $$PWD/cplusplus.qrc diff --git a/src/libs/cplusplus/cplusplus.pro b/src/libs/cplusplus/cplusplus.pro index ccc38abb49023ab063c150c86923eb72431f68e2..f13ef15fa2a0082dc8be83bc0bc38253d99dcaab 100644 --- a/src/libs/cplusplus/cplusplus.pro +++ b/src/libs/cplusplus/cplusplus.pro @@ -2,53 +2,8 @@ TEMPLATE = lib TARGET = CPlusPlus -DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE CPLUSPLUS_BUILD_LIB DEFINES += NDEBUG unix:QMAKE_CXXFLAGS_DEBUG += -O3 include(../../qworkbenchlibrary.pri) -include(../../shared/cplusplus/cplusplus.pri) - -HEADERS += \ - SimpleLexer.h \ - ExpressionUnderCursor.h \ - TokenUnderCursor.h \ - CppDocument.h \ - Icons.h \ - Overview.h \ - OverviewModel.h \ - NamePrettyPrinter.h \ - TypeOfExpression.h \ - TypePrettyPrinter.h \ - ResolveExpression.h \ - LookupContext.h \ - PreprocessorClient.h \ - PreprocessorEnvironment.h \ - Macro.h \ - pp.h \ - pp-cctype.h \ - pp-engine.h \ - pp-macro-expander.h \ - pp-scanner.h - -SOURCES += \ - SimpleLexer.cpp \ - ExpressionUnderCursor.cpp \ - TokenUnderCursor.cpp \ - CppDocument.cpp \ - Icons.cpp \ - Overview.cpp \ - OverviewModel.cpp \ - NamePrettyPrinter.cpp \ - TypeOfExpression.cpp \ - TypePrettyPrinter.cpp \ - ResolveExpression.cpp \ - LookupContext.cpp \ - PreprocessorClient.cpp \ - PreprocessorEnvironment.cpp \ - Macro.cpp \ - pp-engine.cpp \ - pp-macro-expander.cpp \ - pp-scanner.cpp - -RESOURCES += cplusplus.qrc +include(cplusplus-lib.pri) diff --git a/tests/auto/cplusplus/cplusplus.pro b/tests/auto/cplusplus/cplusplus.pro index 55e6cd83f0e906d29efcadc9ea2340cc12f5d214..af3bc066700dceeb021c73d1bea58bd48200ab22 100644 --- a/tests/auto/cplusplus/cplusplus.pro +++ b/tests/auto/cplusplus/cplusplus.pro @@ -1,3 +1,3 @@ TEMPLATE = subdirs -SUBDIRS = shared ast semantic +SUBDIRS = shared ast semantic lookup CONFIG += ordered diff --git a/tests/auto/cplusplus/lookup/lookup.pro b/tests/auto/cplusplus/lookup/lookup.pro new file mode 100644 index 0000000000000000000000000000000000000000..5b68c169a8f4f22d9e93d70ae3196e3569cb8165 --- /dev/null +++ b/tests/auto/cplusplus/lookup/lookup.pro @@ -0,0 +1,4 @@ +load(qttest_p4) +include(../../../../src/libs/cplusplus/cplusplus-lib.pri) + +SOURCES += tst_lookup.cpp diff --git a/tests/auto/cplusplus/lookup/tst_lookup.cpp b/tests/auto/cplusplus/lookup/tst_lookup.cpp new file mode 100644 index 0000000000000000000000000000000000000000..12b1d1b6dfab24d2068ab0e65c6b928e086cf4ed --- /dev/null +++ b/tests/auto/cplusplus/lookup/tst_lookup.cpp @@ -0,0 +1,56 @@ + +#include <QtTest> +#include <QObject> +#include <CppDocument.h> +#include <LookupContext.h> +#include <Symbols.h> +#include <Overview.h> + +CPLUSPLUS_USE_NAMESPACE + +class tst_Lookup: public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void base_class_defined_1(); +}; + +void tst_Lookup::base_class_defined_1() +{ + Overview overview; + + const QByteArray source = "\n" + "class base {};\n" + "class derived: public base {};\n"; + + Document::Ptr doc = Document::create("base_class_defined_1"); + doc->setSource(source); + doc->parse(); + doc->check(); + + QVERIFY(doc->diagnosticMessages().isEmpty()); + QCOMPARE(doc->globalSymbolCount(), 2U); + + Snapshot snapshot; + snapshot.insert(doc->fileName(), doc); + + Document::Ptr emptyDoc = Document::create("empty"); + + Class *baseClass = doc->globalSymbolAt(0)->asClass(); + QVERIFY(baseClass); + + Class *derivedClass = doc->globalSymbolAt(1)->asClass(); + QVERIFY(derivedClass); + + LookupContext ctx(derivedClass, emptyDoc, doc, snapshot); + + const QList<Symbol *> candidates = + ctx.resolveClass(derivedClass->baseClassAt(0)->name()); + + QCOMPARE(candidates.size(), 1); + QCOMPARE(candidates.at(0), baseClass); +} + +QTEST_APPLESS_MAIN(tst_Lookup) +#include "tst_lookup.moc"