diff --git a/language/interfaces/idefinesandincludesmanager.h b/language/interfaces/idefinesandincludesmanager.h index 13caa3a0b8..77e1a9fb05 100644 --- a/language/interfaces/idefinesandincludesmanager.h +++ b/language/interfaces/idefinesandincludesmanager.h @@ -1,109 +1,122 @@ /* * This file is part of KDevelop * * Copyright 2014 Sergey Kalinichev * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef IDEFINESANDINCLUDES_H #define IDEFINESANDINCLUDES_H #include #include #include #include #include #include "../languageexport.h" namespace KDevelop { class ProjectBaseItem; class IProject; typedef QHash Defines; struct ConfigEntry { QString path; QStringList includes; Defines defines; ConfigEntry( const QString& path = QString() ) : path( path ) {} }; /** An interface that provides language plugins with include directories/files and defines. * Call IDefinesAndIncludesManager::manager() to get the instance of the plugin. **/ class KDEVPLATFORMLANGUAGE_EXPORT IDefinesAndIncludesManager { public: /// The type of includes/defines enum Type { CompilerSpecific = 1, ///< Those that compiler provides ProjectSpecific = 2, ///< Those that project manager provides UserDefined = 4, ///< Those that user defines All = CompilerSpecific | ProjectSpecific | UserDefined }; /// Class that actually does all the work of calculating i/d. /// Implement one in e.g. project manager and register it with @see registerProvider /// To unregister it use @see unregisterProvider class Provider { public: virtual ~Provider() = default; virtual QHash defines( ProjectBaseItem* item ) const = 0; virtual Path::List includes( ProjectBaseItem* item ) const = 0; /// @return the type of i/d this provider provides virtual Type type() const = 0; }; - ///@param item project item, use nullptr for files without project + ///@param item project item ///@return list of defines for @p item ///NOTE: call it from the foreground thread only. virtual QHash defines( ProjectBaseItem* item, Type type = All ) const = 0; - ///@param item project item, use nullptr for files without project + ///@param item project item ///@return list of include directories/files for @p item ///NOTE: call it from the foreground thread only. virtual Path::List includes( ProjectBaseItem* item, Type type = All ) const = 0; + ///@param path path to an out-of-project file. + ///@return list of defines for @p path + ///NOTE: call it from the foreground thread only. + virtual QHash defines( const QString& path ) const = 0; + + ///@param path path to an out-of-project file. + ///@return list of include directories/files for @p path + ///NOTE: call it from the foreground thread only. + virtual Path::List includes( const QString& path ) const = 0; + ///@return the instance of the plugin. static IDefinesAndIncludesManager* manager(); virtual ~IDefinesAndIncludesManager(); /// Register the @p provider virtual void registerProvider(Provider* provider) = 0; /** * Unregister the provider * * @return true on success, false otherwise (e.g. if not registered) */ virtual bool unregisterProvider(Provider* provider) = 0; + + /// Opens a configuration dialog for @p pathToFile to modify include directories/files and defined macros. + virtual void openConfigurationDialog(const QString& pathToFile) = 0; }; } Q_DECLARE_INTERFACE( KDevelop::IDefinesAndIncludesManager, "org.kdevelop.IDefinesAndIncludesManager" ) #endif