CppParser, CodeCompletion and ClassView Problem

Robert Gruber rgruber at users.sourceforge.net
Wed May 31 07:51:05 UTC 2006


Hi,

i've got some questions about the classview and the new codecompletion in 
"kdevelop/3.5" branch.

At work I use KDevelop to develop our software. It is written mainly in ANSI-C 
but gets compiled by g++ and therefor each implementation file (*.cc and *.c) 
and header file has a >> extern "C" { .... } << around the declaration and 
the definition of the functions.


1) [ Actually I don't really know if this is a problem of the parser or the 
classview ]
Unfortunatly the functions that are defined inside the extern "C" block do not 
show up in the classview at all but gets shown in the "Functions in file" 
combobox.

What is really strange is this. If I remove the extern "C" part from both the 
header and the implementation file, the functions show up in the classview 
and when I select one KDevelop jumps to the declaration of the function. But 
I still cannot jump to the implementation of the function. I only saw this 
behavior if the implementation of the function is inside a *.cc file. It 
seams to me that if the functions are in a *.c file the classview can jump to 
both the declaration as well as to the implementation.

So my questions are: Is there a problem with extern "C" in the parser? And 
does the parser or the classview ignore *.cc files?


2)
I also have some strange behavior with the codecompletion. 
First of all our project contains several hundreds of files. In some files I 
get codecompletion in most of then not. 

If codecompletion works in a file I only get the localy defined variables and 
the parameters of the function. Not a single function shows up in the 
selection list. (This might be related to the extern "C" problem 
somehow!?!?). But for most of the files codecompletion does not works at all. 
Hitting <Ctrl>+<Space> has no effect. What really confuses me is, that I 
can't find big differences between files with working and files with none 
working codecompletion.



Here are some messages that get written to stdout while loading the project:
kdevelop (cpp support): projectOpened( )
kdevelop (cpp support): CppSupportPart::setupCatalog()
kdevelop (cpp support): ProblemReporter::configure()
kdevelop (cpp support): [void 
CppCodeCompletion::slotActivePartChanged(KParts::Part*)]
kdevelop (cpp support): [void 
CppCodeCompletion::slotActivePartChanged(KParts::Part*)] -- end
kdevelop (cpp support): [void CppCodeCompletion::integratePart(KParts::Part*)] 
integrate document: 0x9574e10
kdevelop (cpp support): CppSupportPart::parseProject 1
kdevelop (cpp support): CppSupportPart::parseProject 2
kdevelop (cpp support): CppSupportPart::parseProject 3
kdevelop (cpp support): CppSupportPart::parseProject 4
kdevelop (cpp support): CppSupportPart::parseProject 5
ASSERT: "part && parent" in /tmp/kdevelop_34/parts/fileview/partwidget.cpp 
(41)
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
ERROR: syntax error
kdevelop (cpp support): CppSupportPart::customEvent(2000)
kdevelop (cpp support): ParseEmitWaiting: file 
"/mybig/product/WAMAS/llr/src.rgruber.HEAD/wamas-wamasp/wppool/wppool_s/dcckommprn_util.cc" 
has no group waiting for it
kdevelop (cpp support): remove with 
references: /mybig/product/WAMAS/llr/src.rgruber.HEAD/wamas-wamasp/wpgirad/wpgirad_s/wpgirad_ctxutil.h
kdevelop (cpp support): remove with 
references: /mybig/product/WAMAS/llr/src.rgruber.HEAD/wamas-wamasp/wpgirad/wpgirad_s/wpgirad_lists.h
kdevelop (cpp support): remove with 
references: /mybig/product/WAMAS/llr/src.rgruber.HEAD/wamas-wamasp/wpgirad/wpgirad_s/wpgirad_ctxutil.cc
kdevelop (cpp support): updating sourceinfo




When hitting <Ctrl>+<Space> in a file where codecompletion works this shows 
up:
kdevelop (cpp 
support): /mybig/product/WAMAS/llr/src.rgruber.HEAD/wamas-wamasp/wppool/wppool_s/dcckommprn_util.cc---> 
file added to background-parser(by problem-reporter)
kdevelop (cpp support): CppSupportPart::customEvent(2000)
kdevelop (cpp support): not updating code-model because at least one file has 
errors
kdevelop (cpp support): CppCodeCompletion::computeRecoveryPoints
kdevelop (cpp support): found 3 recovery points
kdevelop (cpp support): CppCodeCompletion::completeText()
kdevelop (cpp support): using code-model for completion
kdevelop (cpp support): startLine = int GetNextTeIdToIdentifyByKsNrPos (
kdevelop (cpp support): -------------> reparse text
kdevelop (cpp support): int GetNextTeIdToIdentifyByKsNrPos (
                const void *kpvTid,
                const char *kpcFac,
                const long klKsNr,
                const POS *kptTpmPos,
                TEK *ptTek)
{
        const char                      *kpcFctName = 
"GetNextTeIdToIdentifyByKsNrPos";
        int                                     iDbRv = 0;
        string                          strStmt = "";

pt
kdevelop (cpp support): --------------------------------------------
kdevelop (cpp support): is function definition= true
kdevelop (cpp support): endLine = 11, endColumn 2
kdevelop (cpp support): [int CppCodeCompletion::expressionAt(const QString&, 
int)]
kdevelop (cpp support): CppCodeCompletion::computeContext() -- main
kdevelop (cpp support): scope is empty
kdevelop (cpp support): inserting import (std) into the global scole
kdevelop (cpp support): (34)Initializing evaluation of expression false
kdevelop (cpp support): ===========================> type is:
kdevelop (cpp support): ===========================> word is: pt
kdevelop (cpp support): 8types in type-store before destruction
kdevelop (cpp support): type-store is not empty, 8 types are left over
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp 
support): /mybig/product/WAMAS/llr/src.rgruber.HEAD/wamas-wamasp/wppool/wppool_s/dcckommprn_util.cc---> 
file added to background-parser(by problem-reporter)
kdevelop (cpp support): CppSupportPart::customEvent(2000)
kdevelop (cpp support): not updating code-model because at least one file has 
errors
kdevelop (cpp support): CppCodeCompletion::computeRecoveryPoints
kdevelop (cpp support): found 3 recovery points








When hitting <Ctrl>+<Space> in a file where codecompletion does NOT work this 
shows up:
kdevelop (cpp support): CppCodeCompletion::completeText()
kdevelop (cpp support): using code-model for completion
kdevelop (cpp support): startLine = int WpGiRad_HandleCbStack(void* pvTid, 
const char* pkcFac,
kdevelop (cpp support): -------------> reparse text
kdevelop (cpp support): int WpGiRad_HandleCbStack(void* pvTid, const char* 
pkcFac,
                        OpmsgTCbStackPtr ptStack, int iError, CbStackQuestion& 
question)
{
        int iRv;
kdevelop (cpp support):
kdevelop (cpp support): --------------------------------------------
kdevelop (cpp support): is function definition= true
kdevelop (cpp support): endLine = 3, endColumn 9
kdevelop (cpp support): [int CppCodeCompletion::expressionAt(const QString&, 
int)]
kdevelop (cpp support): CppCodeCompletion::computeContext() -- main
kdevelop (cpp support): inserting import (wamas,wamasp) into the global scole
kdevelop (cpp support): (70)Initializing evaluation of expression false
kdevelop (cpp support): ===========================> type is:
kdevelop (cpp support): ===========================> word is:
kdevelop (cpp support): 30types in type-store before destruction
kdevelop (cpp support): type-store is not empty, 10 types are left over
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left: wamasp (wamas::wamasp)
kdevelop (cpp support): type left: wamasp ()
kdevelop (cpp support): type left: wamasp (wamas::wamasp)
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left: wamasp* (wamas::wamasp)
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left:  ()
kdevelop (cpp support): type left: wamasp ()





Hopefully this helps you in any way. If you need any further information or 
there is anything else I could do just let me know.

Just to make sure, I'm using KDevelop compiled from sources from the 
"kdevelop/3.5" branch. Last updated on 30th of May with my developer svn 
account.


Best Regards, Robert




More information about the KDevelop-devel mailing list