32 const ClassList cllist = dom->classList();
33 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
39 for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
48 for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
52 const ClassList cllist = dom->classList();
53 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
59 for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
68 for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
72 const ClassList cllist = dom->classList();
73 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
79 for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
82 relations[*it].ns = dom;
88 const ClassList cllist = dom->classList();
89 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
95 for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
98 relations[*it].klass = dom;
104 const ClassList cllist = dom->classList();
105 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
111 for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
114 relations[*it].klass = dom;
115 relations[*it].ns = nsdom;
128 const ClassList cllist = dom->classList();
129 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
135 for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
144 for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
148 const ClassList cllist = dom->classList();
149 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
155 for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
164 for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
168 const ClassList cllist = dom->classList();
169 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
175 for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
178 relations[*it].ns = dom;
184 const ClassList cllist = dom->classList();
185 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
191 for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
194 relations[*it].klass = dom;
200 const ClassList cllist = dom->classList();
201 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
207 for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
210 relations[*it].klass = dom;
211 relations[*it].ns = nsdom;
225 for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
227 processNamespaces(list, *it);
230 const ClassList cllist = dom->classList();
231 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
233 processClasses(list, *it);
237 for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
251 for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
256 const ClassList cllist = dom->classList();
257 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
263 for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
277 for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
282 const ClassList cllist = dom->classList();
283 for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
289 for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
299 if( !def->resultType().contains(
"::") )
return dec->resultType() == def->resultType();
300 TQStringList l1 = dec->scope() + TQStringList::split(
"::", dec->resultType() );
301 TQStringList l2 = TQStringList::split(
"::", def->resultType() );
303 if( l1.isEmpty() || l2.isEmpty() || l1.back() != l2.back() )
return false;
305 while( !l1.isEmpty() && !l2.isEmpty() ) {
306 if( l1.back() == l2.back() ) {
314 if( l2.isEmpty() )
return true;
322 if (dec->scope() == def->scope() && dec->name() == def->name() && resultTypesFit( dec, def ) && dec->isConstant() == def->isConstant())
324 const ArgumentList defList = def->argumentList(), decList = dec->argumentList();
325 if (defList.size() != decList.size())
328 size_t n = defList.size();
329 for(
size_t i = 0; i < n; ++i)
330 if (defList[i]->type() != decList[i]->type())
341 if (dec->name() == def->name() && resultTypesFit( dec, def ) && dec->isConstant() == def->isConstant())
343 const ArgumentList defList = def->argumentList(), decList = dec->argumentList();
344 if (defList.size() != decList.size())
347 size_t n = defList.size();
348 for(
size_t i = 0; i < n; ++i)
349 if (defList[i]->type() != decList[i]->type())
352 const TQStringList &defScope = def->scope(), &decScope = dec->scope();
353 if (defScope != decScope)
355 if (defScope.size() >= decScope.size())
359 for(
size_t i1 = 0, i2 = 0; i1 < n; ++i1)
361 if (i2 >= defScope.size() || decScope[i1] != defScope[i2])
363 NamespaceImportModel model;
364 model.setName(decScope[i1]);
365 model.setFileName(def->fileName());
366 if (nsImports.find(model) == nsImports.end())
384 PredAmOwner<FunctionDom> ow( dom );
394 PredAmOwner<FunctionDefinitionDom> ow( dom );
410 for (NamespaceList::iterator i = nsList.begin(); i != nsList.end(); ++i)
418 for(ClassList::iterator i = classes.begin(); i != classes.end(); ++i)
434 for(ClassList::iterator i = classes.begin(); i != classes.end(); ++i)
441 int startLine, startCol;
444 if (startLine <= line)
459 const FunctionList functionList = aClass->functionList();
460 for( FunctionList::ConstIterator it=functionList.begin(); it!=functionList.end(); ++it )
462 int funEndLine, funEndColumn;
463 (*it)->getEndPosition( &funEndLine, &funEndColumn );
465 if ((*it)->access() == access && point < funEndLine)
477 for( VariableList::ConstIterator it= varList.begin(); it!= varList.end(); ++it )
479 int varEndLine, varEndColumn;
480 (*it)->getEndPosition( &varEndLine, &varEndColumn );
482 if ((*it)->access() == access && point < varEndLine)
496 default:
return "unknown";
503 NamespaceList::iterator nslEnd = namespaceList.end();
505 for (NamespaceList::iterator it=namespaceList.begin(); it!=nslEnd; ++it)
511 ClassList classList = ns->classList();
512 ClassList::iterator clEnd = classList.end();
514 for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
516 if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
520 FunctionDefinitionList functionDefinitionList = ns->functionDefinitionList();
521 FunctionDefinitionList::iterator fdlEnd = functionDefinitionList.end();
523 for (FunctionDefinitionList::iterator it=functionDefinitionList.begin();
526 if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
530 return FunctionDefinitionDom();
533FunctionDefinitionDom CodeModelHelper::functionDefinitionAt(ClassDom klass,
int line,
int column)
535 ClassList classList = klass->classList();
536 ClassList::iterator clEnd = classList.end();
538 for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
540 if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
544 FunctionDefinitionList functionDefinitionList = klass->functionDefinitionList();
545 FunctionDefinitionList::iterator fdlEnd = functionDefinitionList.end();
546 for (FunctionDefinitionList::Iterator it=functionDefinitionList.begin();
549 if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
553 return FunctionDefinitionDom();
556FunctionDefinitionDom CodeModelHelper::functionDefinitionAt(FunctionDefinitionDom fun,
int line,
int
559 int startLine, startColumn;
560 int endLine, endColumn;
562 fun->getStartPosition(&startLine, &startColumn);
563 fun->getEndPosition(&endLine, &endColumn);
565 if (!(line >= startLine && line <= endLine) || fun->fileName() != m_fileName )
566 return FunctionDefinitionDom();
580FunctionDom CodeModelHelper::functionDeclarationAt(NamespaceDom ns,
int line,
int column)
582 NamespaceList namespaceList = ns->namespaceList();
583 NamespaceList::iterator nsEnd = namespaceList.end();
584 for (NamespaceList::iterator it=namespaceList.begin(); it!=nsEnd; ++it)
586 if (FunctionDom def = functionDeclarationAt(*it, line, column))
590 ClassList classList = ns->classList();
591 ClassList::iterator clEnd = classList.end();
592 for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
594 if (FunctionDom def = functionDeclarationAt(*it, line, column))
598 FunctionList functionList = ns->functionList();
599 FunctionList::iterator flEnd = functionList.end();
600 for (FunctionList::iterator it=functionList.begin();
603 if (FunctionDom def = functionDeclarationAt(*it, line, column))
607 return FunctionDom();
610FunctionDom CodeModelHelper::functionDeclarationAt(ClassDom klass,
int line,
int column)
612 ClassList classList = klass->classList();
613 ClassList::iterator clEnd = classList.end();
614 for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
616 if (FunctionDom def = functionDeclarationAt(*it, line, column))
620 FunctionList functionList = klass->functionList();
621 FunctionList::iterator flEnd = functionList.end();
622 for (FunctionList::Iterator it=functionList.begin();
625 if (FunctionDom def = functionDeclarationAt(*it, line, column))
629 return FunctionDom();
632FunctionDom CodeModelHelper::functionDeclarationAt(FunctionDom fun,
int line,
int
635 int startLine, startColumn;
636 int endLine, endColumn;
638 fun->getStartPosition(&startLine, &startColumn);
639 fun->getEndPosition(&endLine, &endColumn);
641 if (!(line >= startLine && line <= endLine) || fun->fileName() != m_fileName )
642 return FunctionDom();
657ClassDom CodeModelHelper::classAt(NamespaceDom ns,
int line,
int column)
659 NamespaceList namespaceList = ns->namespaceList();
660 NamespaceList::iterator nsEnd = namespaceList.end();
662 for (NamespaceList::iterator it=namespaceList.begin(); it!=nsEnd; ++it)
664 if (ClassDom def = classAt(*it, line, column))
668 ClassList classList = ns->classList();
669 ClassList::iterator clEnd = classList.end();
670 for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
672 if (ClassDom def = classAt(*it, line, column))
679ClassDom CodeModelHelper::classAt(ClassDom klass,
int line,
int column)
681 ClassList classList = klass->classList();
682 ClassList::iterator clEnd = classList.end();
683 for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
685 if (ClassDom def = classAt(*it, line, column))
689 int startLine, startColumn;
690 int endLine, endColumn;
692 klass->getStartPosition(&startLine, &startColumn);
693 klass->getEndPosition(&endLine, &endColumn);
695 if (!(line >= startLine && line <= endLine) || klass->fileName() != m_fileName )
702CodeModelHelper::CodeModelHelper( CodeModel* model, FileDom file ) : m_model( model ) {
704 m_files = file->wholeGroup();
705 m_fileName = file->name();
709FunctionDom CodeModelHelper::functionAt(
int line,
int column, FunctionTypes types ) {
714 FileList::iterator it = m_files.begin();
715 while( it != m_files.end() ) {
716 if( types & Declaration ) {
720 if( types & Definition ) {
733ClassDom CodeModelHelper::classAt(
int line,
int column ) {
734 if( m_files.isEmpty() )
return ClassDom();
737 FileList::iterator it = m_files.begin();
738 while( it != m_files.end() ) {