File indexing completed on 2024-05-12 04:39:39

0001 /*
0002     SPDX-FileCopyrightText: 2014 Sergey Kalinichev <kalinichev.so.0@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #ifndef COMPILERPROVIDER_H
0008 #define COMPILERPROVIDER_H
0009 
0010 #include "icompilerfactory.h"
0011 
0012 #include <QVector>
0013 
0014 class SettingsManager;
0015 
0016 class CompilerProvider : public QObject, public KDevelop::IDefinesAndIncludesManager::Provider
0017 {
0018     Q_OBJECT
0019 
0020 public:
0021     explicit CompilerProvider( SettingsManager* settings, QObject* parent = nullptr );
0022     ~CompilerProvider() override;
0023 
0024     KDevelop::Defines defines( const QString& path ) const override;
0025     KDevelop::Defines defines( KDevelop::ProjectBaseItem* item ) const override;
0026     KDevelop::Path::List includes( const QString& path ) const override;
0027     KDevelop::Path::List includes( KDevelop::ProjectBaseItem* item ) const override;
0028     KDevelop::Path::List frameworkDirectories( const QString& path ) const override;
0029     KDevelop::Path::List frameworkDirectories( KDevelop::ProjectBaseItem* item ) const override;
0030     KDevelop::IDefinesAndIncludesManager::Type type() const override;
0031 
0032     /// @return current compiler for the @p item
0033     CompilerPointer compilerForItem( KDevelop::ProjectBaseItem* item ) const;
0034 
0035     /// @return list of all available compilers
0036     QVector<CompilerPointer> compilers() const;
0037     /**
0038      * Adds compiler to the list of available compilers
0039      * @return true on success (if there is no compiler with the same name registered).
0040      */
0041     bool registerCompiler(const CompilerPointer& compiler);
0042     /// Removes compiler from the list of available compilers
0043     void unregisterCompiler( const CompilerPointer& compiler );
0044 
0045     /// @return All available factories
0046     QVector<CompilerFactoryPointer> compilerFactories() const;
0047 
0048     /// @returns a default compiler
0049     CompilerPointer defaultCompiler() const;
0050 
0051 private Q_SLOTS:
0052     void retrieveUserDefinedCompilers();
0053     void projectChanged(KDevelop::IProject* p);
0054 
0055 private:
0056     mutable CompilerPointer m_defaultProvider;
0057 
0058     QVector<CompilerPointer> m_compilers;
0059     QVector<CompilerFactoryPointer> m_factories;
0060 
0061     SettingsManager* m_settings;
0062 };
0063 
0064 #endif // COMPILERSPROVIDER_H