diff --git a/languages/clang/CMakeLists.txt b/languages/clang/CMakeLists.txt --- a/languages/clang/CMakeLists.txt +++ b/languages/clang/CMakeLists.txt @@ -21,11 +21,100 @@ -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_BYTEARRAY ) -add_subdirectory(clangsettings) -add_subdirectory(duchain) -add_subdirectory(codecompletion) -add_subdirectory(codegen) -add_subdirectory(util) +# TODO: Move to kdevplatform +function(add_private_library target) + set(options) + set(oneValueArgs) + set(multiValueArgs SOURCES) + cmake_parse_arguments(KDEV_ADD_PRIVATE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + string(REPLACE "KDev" "" shortTargetName ${target}) + if (${shortTargetName} STREQUAL ${target}) + message(FATAL_ERROR "Target passed to add_private_library needs to start with \"KDev\", was \"${target}\"") + endif() + + string(TOLOWER ${shortTargetName} shortTargetNameToLower) + + add_library(${target} SHARED ${KDEV_ADD_PRIVATE_SOURCES}) + generate_export_header(${target} EXPORT_FILE_NAME ${shortTargetNameToLower}export.h) + set_target_properties(${target} PROPERTIES + VERSION ${KDEV_PLUGIN_VERSION} + SOVERSION ${KDEV_PLUGIN_VERSION} + ) + install(TARGETS ${target} ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY NAMELINK_SKIP) +endfunction() + +set(kdevclangprivate_SRCS + clangsettings/clangsettingsmanager.cpp + clangsettings/sessionsettings/sessionsettings.cpp + + codecompletion/completionhelper.cpp + codecompletion/context.cpp + codecompletion/includepathcompletioncontext.cpp + codecompletion/model.cpp + + codegen/adaptsignatureaction.cpp + codegen/adaptsignatureassistant.cpp + codegen/codegenhelper.cpp + + duchain/builder.cpp + duchain/clangdiagnosticevaluator.cpp + duchain/clangducontext.cpp + duchain/clanghelpers.cpp + duchain/clangindex.cpp + duchain/clangparsingenvironment.cpp + duchain/clangparsingenvironmentfile.cpp + duchain/clangpch.cpp + duchain/clangproblem.cpp + duchain/debugvisitor.cpp + duchain/documentfinderhelpers.cpp + duchain/duchainutils.cpp + duchain/macrodefinition.cpp + duchain/macronavigationcontext.cpp + duchain/missingincludepathproblem.cpp + duchain/navigationwidget.cpp + duchain/parsesession.cpp + duchain/todoextractor.cpp + duchain/types/classspecializationtype.cpp + duchain/unknowndeclarationproblem.cpp + duchain/unsavedfile.cpp + + util/clangdebug.cpp + util/clangtypes.cpp + util/clangutils.cpp +) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} +) + +ki18n_wrap_ui(kdevclangprivate_SRCS + clangsettings/sessionsettings/sessionsettings.ui +) + +kconfig_add_kcfg_files(kdevclangprivate_SRCS clangsettings/sessionsettings/sessionconfig.kcfgc) + +add_private_library(KDevClangPrivate SOURCES ${kdevclangprivate_SRCS}) +target_link_libraries(KDevClangPrivate +LINK_PRIVATE + Qt5::Core + KF5::TextEditor + KF5::ThreadWeaver + KDev::Util +LINK_PUBLIC + KDev::Language + KDev::Project + KDev::Util + ${CLANG_LIBCLANG_LIB} +) + +install(FILES duchain/gcc_compat.h DESTINATION ${DATA_INSTALL_DIR}/kdevclangsupport PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) +install(DIRECTORY duchain/wrappedQtHeaders DESTINATION ${DATA_INSTALL_DIR}/kdevclangsupport + DIRECTORY_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_WRITE GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) set(kdevclangsupport_SRCS clangparsejob.cpp @@ -36,13 +125,8 @@ qt5_add_resources(kdevclangsupport_SRCS kdevclangsupport.qrc) kdevplatform_add_plugin(kdevclangsupport JSON kdevclangsupport.json SOURCES ${kdevclangsupport_SRCS}) - target_link_libraries(kdevclangsupport - kdevclangduchain - kdevclangcodecompletion - kdevclangcodegen - kdevclangutil - sessionsettings + KDevClangPrivate KF5::ThreadWeaver KF5::TextEditor diff --git a/languages/clang/clangparsejob.cpp b/languages/clang/clangparsejob.cpp --- a/languages/clang/clangparsejob.cpp +++ b/languages/clang/clangparsejob.cpp @@ -54,7 +54,7 @@ #include "util/clangtypes.h" #include "clangsupport.h" -#include "documentfinderhelpers.h" +#include "duchain/documentfinderhelpers.h" #include #include diff --git a/languages/clang/clangsettings/CMakeLists.txt b/languages/clang/clangsettings/CMakeLists.txt deleted file mode 100644 --- a/languages/clang/clangsettings/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ - -add_library(settingsmanager -STATIC - clangsettingsmanager.cpp -) - -target_link_libraries(settingsmanager -LINK_PUBLIC - KDev::Project - KDev::Util -) - -set(sessionsettings_SRCS - sessionsettings/sessionsettings.cpp -) - -ki18n_wrap_ui(sessionsettings_SRCS - sessionsettings/sessionsettings.ui -) - -kconfig_add_kcfg_files(sessionsettings_SRCS sessionsettings/sessionconfig.kcfgc) - -add_library(sessionsettings -STATIC - ${sessionsettings_SRCS} -) - -target_link_libraries(sessionsettings -LINK_PUBLIC - KDev::Project - KDev::Util -) diff --git a/languages/clang/clangsettings/clangsettingsmanager.h b/languages/clang/clangsettings/clangsettingsmanager.h --- a/languages/clang/clangsettings/clangsettingsmanager.h +++ b/languages/clang/clangsettings/clangsettingsmanager.h @@ -27,6 +27,8 @@ #include #include +#include "clangprivateexport.h" + class KConfig; namespace KDevelop @@ -55,7 +57,7 @@ bool forwardDeclare = true; }; -class ClangSettingsManager +class KDEVCLANGPRIVATE_EXPORT ClangSettingsManager { public: static ClangSettingsManager* self(); diff --git a/languages/clang/clangsettings/sessionsettings/sessionconfig.kcfgc b/languages/clang/clangsettings/sessionsettings/sessionconfig.kcfgc --- a/languages/clang/clangsettings/sessionsettings/sessionconfig.kcfgc +++ b/languages/clang/clangsettings/sessionsettings/sessionconfig.kcfgc @@ -2,4 +2,5 @@ ClassName=SessionConfig Singleton=true Inherits=SessionConfigSkeleton -IncludeFiles="sessionsettings/sessionconfigskeleton.h" +IncludeFiles=clangsettings/sessionsettings/sessionconfigskeleton.h,clangprivateexport.h +Visibility=KDEVCLANGPRIVATE_EXPORT diff --git a/languages/clang/clangsettings/sessionsettings/sessionsettings.h b/languages/clang/clangsettings/sessionsettings/sessionsettings.h --- a/languages/clang/clangsettings/sessionsettings/sessionsettings.h +++ b/languages/clang/clangsettings/sessionsettings/sessionsettings.h @@ -25,15 +25,16 @@ #define SESSIONSETTINGS_H #include +#include "clangprivateexport.h" #include namespace Ui { class SessionSettings; } -class SessionSettings: public KDevelop::ConfigPage +class KDEVCLANGPRIVATE_EXPORT SessionSettings: public KDevelop::ConfigPage { Q_OBJECT public: diff --git a/languages/clang/codecompletion/CMakeLists.txt b/languages/clang/codecompletion/CMakeLists.txt deleted file mode 100644 --- a/languages/clang/codecompletion/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -add_library(kdevclangcodecompletion STATIC - model.cpp - context.cpp - includepathcompletioncontext.cpp - completionhelper.cpp -) -target_link_libraries(kdevclangcodecompletion -LINK_PRIVATE - KF5::TextEditor - KDev::Language - kdevclangduchain -) -set_target_properties(kdevclangcodecompletion PROPERTIES - POSITION_INDEPENDENT_CODE TRUE) diff --git a/languages/clang/codecompletion/context.h b/languages/clang/codecompletion/context.h --- a/languages/clang/codecompletion/context.h +++ b/languages/clang/codecompletion/context.h @@ -31,8 +31,9 @@ #include #include "completionhelper.h" +#include "clangprivateexport.h" -class ClangCodeCompletionContext : public KDevelop::CodeCompletionContext +class KDEVCLANGPRIVATE_EXPORT ClangCodeCompletionContext : public KDevelop::CodeCompletionContext { public: enum ContextFilter diff --git a/languages/clang/codecompletion/includepathcompletioncontext.h b/languages/clang/codecompletion/includepathcompletioncontext.h --- a/languages/clang/codecompletion/includepathcompletioncontext.h +++ b/languages/clang/codecompletion/includepathcompletioncontext.h @@ -23,11 +23,12 @@ #define INCLUDEPATHCOMPLETIONCONTEXT_H #include "duchain/parsesession.h" +#include "clangprivateexport.h" #include #include -class IncludePathCompletionContext : public KDevelop::CodeCompletionContext +class KDEVCLANGPRIVATE_EXPORT IncludePathCompletionContext : public KDevelop::CodeCompletionContext { public: IncludePathCompletionContext(const KDevelop::DUContextPointer& context, diff --git a/languages/clang/codecompletion/model.h b/languages/clang/codecompletion/model.h --- a/languages/clang/codecompletion/model.h +++ b/languages/clang/codecompletion/model.h @@ -26,14 +26,16 @@ #include +#include "clangprivateexport.h" + #include #if KTEXTEDITOR_VERSION < QT_VERSION_CHECK(5, 10, 0) Q_DECLARE_METATYPE(KTextEditor::Cursor) #endif class ClangIndex; -class ClangCodeCompletionModel : public KDevelop::CodeCompletionModel +class KDEVCLANGPRIVATE_EXPORT ClangCodeCompletionModel : public KDevelop::CodeCompletionModel { Q_OBJECT diff --git a/languages/clang/codegen/CMakeLists.txt b/languages/clang/codegen/CMakeLists.txt deleted file mode 100644 --- a/languages/clang/codegen/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -add_library(kdevclangcodegen STATIC - adaptsignatureaction.cpp - adaptsignatureassistant.cpp - codegenhelper.cpp -) -target_link_libraries(kdevclangcodegen -LINK_PRIVATE - KF5::TextEditor - KF5::ThreadWeaver - KDev::Language - kdevclangduchain -) -set_target_properties(kdevclangcodegen PROPERTIES - POSITION_INDEPENDENT_CODE TRUE) diff --git a/languages/clang/codegen/adaptsignatureassistant.h b/languages/clang/codegen/adaptsignatureassistant.h --- a/languages/clang/codegen/adaptsignatureassistant.h +++ b/languages/clang/codegen/adaptsignatureassistant.h @@ -21,6 +21,7 @@ #define SIGNATUREASSISTANT_H #include "adaptsignatureaction.h" +#include "clangprivateexport.h" #include #include @@ -33,7 +34,7 @@ class View; } -class AdaptSignatureAssistant : public KDevelop::StaticAssistant +class KDEVCLANGPRIVATE_EXPORT AdaptSignatureAssistant : public KDevelop::StaticAssistant { Q_OBJECT diff --git a/languages/clang/duchain/CMakeLists.txt b/languages/clang/duchain/CMakeLists.txt deleted file mode 100644 --- a/languages/clang/duchain/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -add_library(kdevclangduchain STATIC - parsesession.cpp - clangdiagnosticevaluator.cpp - clangducontext.cpp - clangindex.cpp - clangparsingenvironmentfile.cpp - clangparsingenvironment.cpp - clangproblem.cpp - debugvisitor.cpp - duchainutils.cpp - builder.cpp - clangpch.cpp - clanghelpers.cpp - unknowndeclarationproblem.cpp - macrodefinition.cpp - missingincludepathproblem.cpp - macronavigationcontext.cpp - navigationwidget.cpp - todoextractor.cpp - types/classspecializationtype.cpp - unsavedfile.cpp - documentfinderhelpers.cpp -) - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} -) - -generate_export_header(kdevclangduchain EXPORT_FILE_NAME clangduchainexport.h) -target_link_libraries(kdevclangduchain -LINK_PRIVATE - Qt5::Core - kdevclangcodegen - kdevclangcodecompletion - kdevclangutil - settingsmanager -LINK_PUBLIC - KDev::Language - KDev::Project - KDev::Util - ${CLANG_LIBCLANG_LIB} -) - -install(FILES gcc_compat.h DESTINATION ${DATA_INSTALL_DIR}/kdevclangsupport PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) -install(DIRECTORY wrappedQtHeaders DESTINATION ${DATA_INSTALL_DIR}/kdevclangsupport - DIRECTORY_PERMISSIONS - OWNER_READ OWNER_WRITE OWNER_EXECUTE - GROUP_READ GROUP_WRITE GROUP_EXECUTE - WORLD_READ WORLD_EXECUTE - FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) diff --git a/languages/clang/duchain/builder.h b/languages/clang/duchain/builder.h --- a/languages/clang/duchain/builder.h +++ b/languages/clang/duchain/builder.h @@ -23,7 +23,7 @@ #ifndef BUILDER_H #define BUILDER_H -#include +#include "clangprivateexport.h" #include "clanghelpers.h" @@ -34,7 +34,7 @@ * * @param update Set to true when an existing DUChain cache is getting updated. */ -KDEVCLANGDUCHAIN_EXPORT void visit(CXTranslationUnit tu, CXFile file, +KDEVCLANGPRIVATE_EXPORT void visit(CXTranslationUnit tu, CXFile file, const IncludeFileContexts& includes, const bool update); } diff --git a/languages/clang/duchain/clangdiagnosticevaluator.h b/languages/clang/duchain/clangdiagnosticevaluator.h --- a/languages/clang/duchain/clangdiagnosticevaluator.h +++ b/languages/clang/duchain/clangdiagnosticevaluator.h @@ -22,14 +22,14 @@ #ifndef CLANGDIAGNOSTICEVALUATOR_H #define CLANGDIAGNOSTICEVALUATOR_H -#include +#include "clangprivateexport.h" #include class ClangProblem; namespace ClangDiagnosticEvaluator { -KDEVCLANGDUCHAIN_EXPORT ClangProblem* createProblem(CXDiagnostic diagnostic, CXTranslationUnit unit); +KDEVCLANGPRIVATE_EXPORT ClangProblem* createProblem(CXDiagnostic diagnostic, CXTranslationUnit unit); enum DiagnosticType { Unknown, @@ -43,7 +43,7 @@ * @return Type of @p diagnostic * @sa DiagnosticType */ -KDEVCLANGDUCHAIN_EXPORT DiagnosticType diagnosticType(CXDiagnostic diagnostic); +KDEVCLANGPRIVATE_EXPORT DiagnosticType diagnosticType(CXDiagnostic diagnostic); } #endif // CLANGDIAGNOSTICEVALUATOR_H diff --git a/languages/clang/duchain/clanghelpers.h b/languages/clang/duchain/clanghelpers.h --- a/languages/clang/duchain/clanghelpers.h +++ b/languages/clang/duchain/clanghelpers.h @@ -26,7 +26,7 @@ #include #include -#include +#include "clangprivateexport.h" class ParseSession; class ClangIndex; @@ -62,15 +62,15 @@ /** * @returns all the Imports for each file in the @param tu */ -KDEVCLANGDUCHAIN_EXPORT Imports tuImports(CXTranslationUnit tu); +KDEVCLANGPRIVATE_EXPORT Imports tuImports(CXTranslationUnit tu); /** * Recursively builds a duchain with the specified @param features for the * @param file and each of its @param imports using the TU from @param session. * The resulting contexts are placed in @param includedFiles. * @returns the context created for @param file */ -KDEVCLANGDUCHAIN_EXPORT KDevelop::ReferencedTopDUContext buildDUChain( +KDEVCLANGPRIVATE_EXPORT KDevelop::ReferencedTopDUContext buildDUChain( CXFile file, const Imports& imports, const ParseSession& session, KDevelop::TopDUContext::Features features, IncludeFileContexts& includedFiles, ClangIndex* index = nullptr); @@ -88,12 +88,12 @@ /** * @return True if the given file @p path has the extension of a C++ source file */ -bool isSource(const QString& path); +KDEVCLANGPRIVATE_EXPORT bool isSource(const QString& path); /** * @return True if the given file @p path has the extension of a C++ header file */ -bool isHeader(const QString& path); +KDEVCLANGPRIVATE_EXPORT bool isHeader(const QString& path); } diff --git a/languages/clang/duchain/clangindex.h b/languages/clang/duchain/clangindex.h --- a/languages/clang/duchain/clangindex.h +++ b/languages/clang/duchain/clangindex.h @@ -24,7 +24,7 @@ #include "clanghelpers.h" -#include +#include "clangprivateexport.h" #include #include @@ -37,7 +37,7 @@ class ClangParsingEnvironment; class ClangPCH; -class KDEVCLANGDUCHAIN_EXPORT ClangIndex +class KDEVCLANGPRIVATE_EXPORT ClangIndex { public: ClangIndex(); diff --git a/languages/clang/duchain/clangparsingenvironment.h b/languages/clang/duchain/clangparsingenvironment.h --- a/languages/clang/duchain/clangparsingenvironment.h +++ b/languages/clang/duchain/clangparsingenvironment.h @@ -25,11 +25,11 @@ #include #include -#include +#include "clangprivateexport.h" #include "clangsettings/clangsettingsmanager.h" -class KDEVCLANGDUCHAIN_EXPORT ClangParsingEnvironment : public KDevelop::ParsingEnvironment +class KDEVCLANGPRIVATE_EXPORT ClangParsingEnvironment : public KDevelop::ParsingEnvironment { public: virtual ~ClangParsingEnvironment() = default; diff --git a/languages/clang/duchain/clangparsingenvironmentfile.h b/languages/clang/duchain/clangparsingenvironmentfile.h --- a/languages/clang/duchain/clangparsingenvironmentfile.h +++ b/languages/clang/duchain/clangparsingenvironmentfile.h @@ -26,11 +26,11 @@ #include "clangparsingenvironment.h" #include -#include +#include "clangprivateexport.h" class ClangParsingEnvironmentFileData; -class KDEVCLANGDUCHAIN_EXPORT ClangParsingEnvironmentFile : public KDevelop::ParsingEnvironmentFile +class KDEVCLANGPRIVATE_EXPORT ClangParsingEnvironmentFile : public KDevelop::ParsingEnvironmentFile { public: using Ptr = QExplicitlySharedDataPointer; diff --git a/languages/clang/duchain/clangpch.h b/languages/clang/duchain/clangpch.h --- a/languages/clang/duchain/clangpch.h +++ b/languages/clang/duchain/clangpch.h @@ -29,7 +29,7 @@ class ClangParsingEnvironment; -class KDEVCLANGDUCHAIN_EXPORT ClangPCH +class KDEVCLANGPRIVATE_EXPORT ClangPCH { public: ClangPCH(const ClangParsingEnvironment& environment, ClangIndex* index); diff --git a/languages/clang/duchain/clangproblem.h b/languages/clang/duchain/clangproblem.h --- a/languages/clang/duchain/clangproblem.h +++ b/languages/clang/duchain/clangproblem.h @@ -23,14 +23,14 @@ #ifndef CLANGPROBLEM_H #define CLANGPROBLEM_H -#include +#include "clangprivateexport.h" #include #include #include -struct KDEVCLANGDUCHAIN_EXPORT ClangFixit +struct KDEVCLANGPRIVATE_EXPORT ClangFixit { QString replacementText; KDevelop::DocumentRange range; @@ -44,11 +44,11 @@ } }; -QDebug KDEVCLANGDUCHAIN_EXPORT operator<<(QDebug debug, const ClangFixit& fixit); +QDebug KDEVCLANGPRIVATE_EXPORT operator<<(QDebug debug, const ClangFixit& fixit); using ClangFixits = QVector; -class KDEVCLANGDUCHAIN_EXPORT ClangProblem : public KDevelop::Problem +class KDEVCLANGPRIVATE_EXPORT ClangProblem : public KDevelop::Problem { public: using Ptr = QExplicitlySharedDataPointer; @@ -78,7 +78,7 @@ }; -class KDEVCLANGDUCHAIN_EXPORT ClangFixitAssistant : public KDevelop::IAssistant +class KDEVCLANGPRIVATE_EXPORT ClangFixitAssistant : public KDevelop::IAssistant { Q_OBJECT @@ -97,7 +97,7 @@ ClangFixits m_fixits; }; -class KDEVCLANGDUCHAIN_EXPORT ClangFixitAction : public KDevelop::IAssistantAction +class KDEVCLANGPRIVATE_EXPORT ClangFixitAction : public KDevelop::IAssistantAction { Q_OBJECT diff --git a/languages/clang/duchain/debugvisitor.h b/languages/clang/duchain/debugvisitor.h --- a/languages/clang/duchain/debugvisitor.h +++ b/languages/clang/duchain/debugvisitor.h @@ -23,9 +23,9 @@ #define DEBUGVISITOR_H #include "parsesession.h" -#include +#include "clangprivateexport.h" -class KDEVCLANGDUCHAIN_EXPORT DebugVisitor +class KDEVCLANGPRIVATE_EXPORT DebugVisitor { public: DebugVisitor(ParseSession* session); diff --git a/languages/clang/duchain/documentfinderhelpers.h b/languages/clang/duchain/documentfinderhelpers.h --- a/languages/clang/duchain/documentfinderhelpers.h +++ b/languages/clang/duchain/documentfinderhelpers.h @@ -27,24 +27,26 @@ #include +#include "clangprivateexport.h" + /// Helper class for handling @see IBuddyDocumentFinder features. namespace DocumentFinderHelpers { /// @return All supported mime types -QStringList mimeTypesList(); +KDEVCLANGPRIVATE_EXPORT QStringList mimeTypesList(); /** * Considers the URLs as buddy documents if the base path (without extension) * is the same, and one extension starts with h/H and the other one with c/C. * For example, foo.hpp and foo.C are buddies. */ -bool areBuddies(const QUrl &url1, const QUrl& url2); +KDEVCLANGPRIVATE_EXPORT bool areBuddies(const QUrl &url1, const QUrl& url2); /// @see KDevelop::IBuddyDocumentFinder -bool buddyOrder(const QUrl &url1, const QUrl& url2); +KDEVCLANGPRIVATE_EXPORT bool buddyOrder(const QUrl &url1, const QUrl& url2); /// @see KDevelop::IBuddyDocumentFinder -QVector< QUrl > getPotentialBuddies(const QUrl &url, bool checkDUChain = true); +KDEVCLANGPRIVATE_EXPORT QVector< QUrl > getPotentialBuddies(const QUrl &url, bool checkDUChain = true); }; #endif // DOCUMENTFINDERHELPERS_H diff --git a/languages/clang/duchain/duchainutils.h b/languages/clang/duchain/duchainutils.h --- a/languages/clang/duchain/duchainutils.h +++ b/languages/clang/duchain/duchainutils.h @@ -21,7 +21,7 @@ #ifndef DUCHAINUTILS_H #define DUCHAINUTILS_H -#include +#include "clangprivateexport.h" #include "duchain/parsesession.h" @@ -37,17 +37,17 @@ namespace DUChainUtils { -KDEVCLANGDUCHAIN_EXPORT KTextEditor::Range functionSignatureRange(const KDevelop::Declaration* decl); +KDEVCLANGPRIVATE_EXPORT KTextEditor::Range functionSignatureRange(const KDevelop::Declaration* decl); -KDEVCLANGDUCHAIN_EXPORT void registerDUChainItems(); -KDEVCLANGDUCHAIN_EXPORT void unregisterDUChainItems(); +KDEVCLANGPRIVATE_EXPORT void registerDUChainItems(); +KDEVCLANGPRIVATE_EXPORT void unregisterDUChainItems(); /** * Finds attached parse session data (aka AST) to the @p file * * If no session data found, then @p tuFile asked for the attached session data */ -ParseSessionData::Ptr findParseSessionData(const KDevelop::IndexedString &file, const KDevelop::IndexedString &tufile); +KDEVCLANGPRIVATE_EXPORT ParseSessionData::Ptr findParseSessionData(const KDevelop::IndexedString &file, const KDevelop::IndexedString &tufile); }; diff --git a/languages/clang/duchain/macrodefinition.h b/languages/clang/duchain/macrodefinition.h --- a/languages/clang/duchain/macrodefinition.h +++ b/languages/clang/duchain/macrodefinition.h @@ -21,7 +21,7 @@ #ifndef MACRODEFINITION_H #define MACRODEFINITION_H -#include +#include "clangprivateexport.h" #include #include @@ -41,7 +41,7 @@ * * @note API designed after of http://clang.llvm.org/doxygen/classclang_1_1MacroInfo.html */ -class KDEVCLANGDUCHAIN_EXPORT MacroDefinition : public KDevelop::Declaration +class KDEVCLANGPRIVATE_EXPORT MacroDefinition : public KDevelop::Declaration { public: using Ptr = KDevelop::DUChainPointer; diff --git a/languages/clang/duchain/macronavigationcontext.h b/languages/clang/duchain/macronavigationcontext.h --- a/languages/clang/duchain/macronavigationcontext.h +++ b/languages/clang/duchain/macronavigationcontext.h @@ -20,16 +20,16 @@ #ifndef MACRONAVIGATIONCONTEXT_H #define MACRONAVIGATIONCONTEXT_H -#include +#include "clangprivateexport.h" #include "macrodefinition.h" #include #include #include -class KDEVCLANGDUCHAIN_EXPORT MacroNavigationContext : public KDevelop::AbstractNavigationContext +class KDEVCLANGPRIVATE_EXPORT MacroNavigationContext : public KDevelop::AbstractNavigationContext { public: MacroNavigationContext(const MacroDefinition::Ptr& macro, diff --git a/languages/clang/duchain/navigationwidget.h b/languages/clang/duchain/navigationwidget.h --- a/languages/clang/duchain/navigationwidget.h +++ b/languages/clang/duchain/navigationwidget.h @@ -23,7 +23,7 @@ #ifndef NAVIGATIONWIDGET_H #define NAVIGATIONWIDGET_H -#include +#include "clangprivateexport.h" #include "macrodefinition.h" @@ -35,7 +35,7 @@ class IncludeItem; } -class KDEVCLANGDUCHAIN_EXPORT ClangNavigationWidget : public KDevelop::AbstractNavigationWidget +class KDEVCLANGPRIVATE_EXPORT ClangNavigationWidget : public KDevelop::AbstractNavigationWidget { public: ClangNavigationWidget(const KDevelop::DeclarationPointer& declaration); diff --git a/languages/clang/duchain/parsesession.h b/languages/clang/duchain/parsesession.h --- a/languages/clang/duchain/parsesession.h +++ b/languages/clang/duchain/parsesession.h @@ -36,14 +36,14 @@ #include #include -#include +#include "clangprivateexport.h" #include "clangparsingenvironment.h" #include "unsavedfile.h" class ClangIndex; -class KDEVCLANGDUCHAIN_EXPORT ParseSessionData : public KDevelop::IAstContainer +class KDEVCLANGPRIVATE_EXPORT ParseSessionData : public KDevelop::IAstContainer { public: using Ptr = QExplicitlySharedDataPointer; @@ -88,7 +88,7 @@ * It will lock the mutex of the currently set ParseSessionData and thereby ensure * only one ParseSession can operate on a given CXTranslationUnit stored therein. */ -class KDEVCLANGDUCHAIN_EXPORT ParseSession +class KDEVCLANGPRIVATE_EXPORT ParseSession { public: /** diff --git a/languages/clang/duchain/todoextractor.h b/languages/clang/duchain/todoextractor.h --- a/languages/clang/duchain/todoextractor.h +++ b/languages/clang/duchain/todoextractor.h @@ -22,13 +22,13 @@ #ifndef TODOEXTRACTOR_H #define TODOEXTRACTOR_H -#include +#include "clangprivateexport.h" #include #include -class KDEVCLANGDUCHAIN_EXPORT TodoExtractor +class KDEVCLANGPRIVATE_EXPORT TodoExtractor { public: TodoExtractor(CXTranslationUnit unit, CXFile file); diff --git a/languages/clang/duchain/unknowndeclarationproblem.h b/languages/clang/duchain/unknowndeclarationproblem.h --- a/languages/clang/duchain/unknowndeclarationproblem.h +++ b/languages/clang/duchain/unknowndeclarationproblem.h @@ -24,12 +24,12 @@ #ifndef UNKNOWNDECLARATION_H #define UNKNOWNDECLARATION_H -#include +#include "clangprivateexport.h" #include "clangproblem.h" #include -class KDEVCLANGDUCHAIN_EXPORT UnknownDeclarationProblem : public ClangProblem +class KDEVCLANGPRIVATE_EXPORT UnknownDeclarationProblem : public ClangProblem { public: using Ptr = QExplicitlySharedDataPointer; diff --git a/languages/clang/duchain/unsavedfile.h b/languages/clang/duchain/unsavedfile.h --- a/languages/clang/duchain/unsavedfile.h +++ b/languages/clang/duchain/unsavedfile.h @@ -24,12 +24,14 @@ #include +#include "clangprivateexport.h" + struct CXUnsavedFile; /** * Wrapper API to map unsaved editor contents to the CXUnsavedFile API for clang. */ -class UnsavedFile +class KDEVCLANGPRIVATE_EXPORT UnsavedFile { public: UnsavedFile(const QString& fileName = {}, const QStringList& contents = {}); diff --git a/languages/clang/tests/CMakeLists.txt b/languages/clang/tests/CMakeLists.txt --- a/languages/clang/tests/CMakeLists.txt +++ b/languages/clang/tests/CMakeLists.txt @@ -4,15 +4,14 @@ target_link_libraries(clang-parser KDev::Tests - kdevclangduchain + KDevClangPrivate ) add_library(codecompletiontestbase STATIC codecompletiontestbase.cpp) target_link_libraries(codecompletiontestbase PUBLIC KDev::Tests Qt5::Test - kdevclangcodecompletion - kdevclangduchain + KDevClangPrivate ) add_executable(clang-minimal-visitor WIN32 @@ -41,42 +40,40 @@ LINK_LIBRARIES KDev::Tests Qt5::Test - kdevclangduchain - kdevclangutil + KDevClangPrivate ) ecm_add_test(test_clangutils.cpp TEST_NAME test_clangutils LINK_LIBRARIES KDev::Tests Qt5::Test ${CLANG_LIBCLANG_LIB} - kdevclangduchain + KDevClangPrivate ) ecm_add_test(test_duchain.cpp TEST_NAME test_duchain-clang LINK_LIBRARIES KDev::Tests Qt5::Test - kdevclangduchain + KDevClangPrivate ) ecm_add_test(test_duchainutils.cpp TEST_NAME test_duchainutils LINK_LIBRARIES KDev::Tests Qt5::Test - kdevclangcodecompletion - kdevclangduchain + KDevClangPrivate ) ecm_add_test(test_problems.cpp TEST_NAME test_problems LINK_LIBRARIES KDev::Tests Qt5::Test - kdevclangduchain + KDevClangPrivate ) configure_file("testfilepaths.h.cmake" "testfilepaths.h" ESCAPE_QUOTES) diff --git a/languages/clang/util/CMakeLists.txt b/languages/clang/util/CMakeLists.txt deleted file mode 100644 --- a/languages/clang/util/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -add_library(kdevclangutil STATIC - clangdebug.cpp - clangutils.cpp - clangtypes.cpp -) -target_link_libraries(kdevclangutil -LINK_PRIVATE - KDev::Util - KF5::TextEditor) -set_target_properties(kdevclangutil PROPERTIES POSITION_INDEPENDENT_CODE TRUE) diff --git a/languages/clang/util/clangdebug.h b/languages/clang/util/clangdebug.h --- a/languages/clang/util/clangdebug.h +++ b/languages/clang/util/clangdebug.h @@ -26,11 +26,15 @@ #include -Q_DECLARE_LOGGING_CATEGORY(KDEV_CLANG) +#include "clangprivateexport.h" + +//TODO: FIXME +//Q_DECLARE_LOGGING_CATEGORY(KDEV_CLANG) +extern KDEVCLANGPRIVATE_EXPORT const QLoggingCategory &KDEV_CLANG(); #define clangDebug() qCDebug(KDEV_CLANG) -QDebug operator<<(QDebug dbg, CXString string); -QDebug operator<<(QDebug dbg, CXSourceLocation location); -QDebug operator<<(QDebug dbg, CXSourceRange range); +KDEVCLANGPRIVATE_EXPORT QDebug operator<<(QDebug dbg, CXString string); +KDEVCLANGPRIVATE_EXPORT QDebug operator<<(QDebug dbg, CXSourceLocation location); +KDEVCLANGPRIVATE_EXPORT QDebug operator<<(QDebug dbg, CXSourceRange range); #endif // CLANGDEBUG_H diff --git a/languages/clang/util/clangtypes.h b/languages/clang/util/clangtypes.h --- a/languages/clang/util/clangtypes.h +++ b/languages/clang/util/clangtypes.h @@ -27,6 +27,8 @@ #include +#include "clangprivateexport.h" + #include class QTextStream; @@ -98,7 +100,7 @@ CXSourceLocation location; }; -class ClangRange +class KDEVCLANGPRIVATE_EXPORT ClangRange { public: ClangRange(CXSourceRange range); @@ -120,7 +122,7 @@ CXSourceRange m_range; }; -class ClangTokens +class KDEVCLANGPRIVATE_EXPORT ClangTokens { public: ClangTokens(CXTranslationUnit unit, CXSourceRange range); diff --git a/languages/clang/util/clangutils.h b/languages/clang/util/clangutils.h --- a/languages/clang/util/clangutils.h +++ b/languages/clang/util/clangutils.h @@ -28,6 +28,8 @@ #include +#include "clangprivateexport.h" + namespace KDevelop { class IndexedString; } @@ -80,7 +82,7 @@ * By default this will be set to the cursors lexical parent. * @return the cursor's scope as a string */ - QString getScope(CXCursor cursor, CXCursor context = clang_getNullCursor()); + KDEVCLANGPRIVATE_EXPORT QString getScope(CXCursor cursor, CXCursor context = clang_getNullCursor()); /** * Given a cursor representing some sort of function, returns its signature. The @@ -99,7 +101,7 @@ * @param cursor The cursor to work with * @return A QStringList of the template's arguments */ - QStringList templateArgumentTypes(CXCursor cursor); + KDEVCLANGPRIVATE_EXPORT QStringList templateArgumentTypes(CXCursor cursor); /** * Extract the raw contents of the range @p range @@ -113,7 +115,7 @@ * * @param unit Translation unit this range is part of */ - QByteArray getRawContents(CXTranslationUnit unit, CXSourceRange range); + KDEVCLANGPRIVATE_EXPORT QByteArray getRawContents(CXTranslationUnit unit, CXSourceRange range); /** * @brief Return true if file @p file1 and file @p file2 are equal @@ -152,7 +154,7 @@ * * @return Range pointing to the path-spec of the include or invalid range if there is no #include directive on the line. */ - KTextEditor::Range rangeForIncludePathSpec(const QString& line, const KTextEditor::Range& originalRange = KTextEditor::Range()); + KDEVCLANGPRIVATE_EXPORT KTextEditor::Range rangeForIncludePathSpec(const QString& line, const KTextEditor::Range& originalRange = KTextEditor::Range()); enum SpecialQtAttributes { NoQtAttribute,