Custom CodeModel like Repository

Milian Wolff mail at
Wed Feb 17 13:20:23 UTC 2010

David Nolden, 17.02.2010:
> Am Dienstag 16 Februar 2010 18:32:23 schrieb Niko Sams:
> > Hi David,
> > 
> > For my Php problem we talked about yesterday I think I found a pretty
> > good solution.
> > I created a custom Repository where I store the needed information.
> > Basically I copied CodeModel, added additional needed members and
> > store class declarations
> > in there.
> > It's blazingly fast :D
> > 
> > But the problem I have with it: it's a almost exact copy of CodeModel.
> > 
> > Do you think it's a good idea?
> > 
> > Do you think it is a good idea to make a generic base class and add a
> > mechanism that allows
> > declarations updating multiple CodeModels?
> Not sure if such a base class really makes sense. Since it would have to
> deal with different data-types in each case, it would have to be a
> template class, and it would be ugly.

But a template/abstract class could at least be used to share code and remove 
duplication. Adding the data members can be done by inheritance or something?

> At some point maybe we can find a way to store additional information into
> the code-model, but we don't want it to replace the duchain, the better
> option would be making the duchain faster.

The duchain is fast afaik, last time I profiled the slow part was the disk-
access. And since in PHP you don't have #include's you can follow, you have to 
load every single file of the probably hundreds of files in your project (esp. 
with frameworks that have one class per file).

> A maybe better solution for you would be to create a separate repository
> where you only store the additional information that doesn't fit into the
> normal code-model, by mapping from IndexedDeclaration to that specific
> information (like duchain/defintiions.h and duchain/definitions.cpp).
> Just out of interest, what exact new members did you require in the code-
> model?

- "is class with static members" (since in PHP, Classes don't act as 
namespaces you don't have to show them during global code completion, when 
they don't have static functions/constants etc. pp.)

- "is exception class" - there are a few special cases where you only require 
a list of classes that inherit from the Exception class, otherwise you'd have 
to iterate over every class and check that yourself

- "pretty identifier" (see case insensitivity etc.)

Maybe more, niko is out to get something to eat :)

Milian Wolff
mail at
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <>

More information about the KDevelop-devel mailing list