Static access to ICore

David Nolden zwabel at
Fri Nov 16 10:53:51 UTC 2007

Hi! The design of kdevelop currently is, that although there is by definition 
only exactly one instance of ICore, it is not possible to access that 
instance statically. It can only be accessed from within IPlugin.

I find this limitation quite annoying again and again, because it forces me to 
add useless pointers either to ICore, or to a plugin that has access to 
ICore, and create additional(useless) code in many places.

Just for some recent examples:
In project_file_quickopen.cpp, each ProjectFileData item is self-contained, 
and needs to trigger the specific actions once it is executed. That means 
that it needs access to the document-controller so a file can be opened.
Currently I need to add a pointer to ICore into each of these many objects, 
although it would save some memory and some error-prone code if ICore::self() 
could be used instead.

In the cpp language-support part, there's many places where static access to 
ICore is needed. That's why there is a CppLanguageSupport::self(), so the 
access is statically possible(Imo just a not nice workaround for the fact 
that there is no ICore::self()). Now I've moved navigationwidget.cpp to a 
sub-library, but the navigation-widgets still need access to ICore, so it can 
jump to a specific file. Now it's getting even worse, because the 
navigation-widget is created from within that library(cppduchain), so there 
is noone who can reach a pointer to ICore on creation.

3. In the teamwork-plugin, similar workarond were needed many times.

Now, instead of adding even more static pointers to ICore to workaround the 
problem, I propose simply adding a static ICore::self() function to access 
the core from anywhere.

greetings, David

More information about the KDevelop-devel mailing list