• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • TDevelop Interfaces Library
 

TDevelop Interfaces Library

  • lib
  • interfaces
codemodel_utils.cpp
1 /* This file is part of TDevelop
2  Copyright (C) 2003 Roberto Raggi <roberto@kdevelop.org>
3  Copyright (C) 2003 Alexander Dymo <adymo@kdevelop.org>
4  Copyright (C) 2004 Jonas Jacobi <j.jacobi@gmx.de>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Library General Public
8  License as published by the Free Software Foundation; either
9  version 2 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Library General Public License for more details.
15 
16  You should have received a copy of the GNU Library General Public License
17  along with this library; see the file COPYING.LIB. If not, write to
18  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  Boston, MA 02110-1301, USA.
20 */
21 
22 #include "codemodel_utils.h"
23 
24 namespace CodeModelUtils
25 {
26 
27 namespace Functions
28 {
29 
30 void processClasses(FunctionList &list, const ClassDom dom)
31 {
32  const ClassList cllist = dom->classList();
33  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
34  {
35  processClasses(list, *it);
36  }
37 
38  const FunctionList fnlist = dom->functionList();
39  for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
40  {
41  list.append(*it);
42  }
43 }
44 
45 void processNamespaces(FunctionList &list, const NamespaceDom dom)
46 {
47  const NamespaceList nslist = dom->namespaceList();
48  for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
49  {
50  processNamespaces(list, *it);
51  }
52  const ClassList cllist = dom->classList();
53  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
54  {
55  processClasses(list, *it);
56  }
57 
58  const FunctionList fnlist = dom->functionList();
59  for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
60  {
61  list.append(*it);
62  }
63 }
64 
65 void processNamespaces( FunctionList & list, const NamespaceDom dom, TQMap< FunctionDom, Scope > & relations )
66 {
67  const NamespaceList nslist = dom->namespaceList();
68  for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
69  {
70  processNamespaces(list, *it, relations);
71  }
72  const ClassList cllist = dom->classList();
73  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
74  {
75  processClasses(list, *it, relations, dom);
76  }
77 
78  const FunctionList fnlist = dom->functionList();
79  for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
80  {
81  list.append(*it);
82  relations[*it].ns = dom;
83  }
84 }
85 
86 void processClasses( FunctionList & list, const ClassDom dom, TQMap< FunctionDom, Scope > & relations )
87 {
88  const ClassList cllist = dom->classList();
89  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
90  {
91  processClasses(list, *it, relations);
92  }
93 
94  const FunctionList fnlist = dom->functionList();
95  for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
96  {
97  list.append(*it);
98  relations[*it].klass = dom;
99  }
100 }
101 
102 void processClasses( FunctionList & list, const ClassDom dom, TQMap< FunctionDom, Scope > & relations, const NamespaceDom & nsdom )
103 {
104  const ClassList cllist = dom->classList();
105  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
106  {
107  processClasses(list, *it, relations, nsdom);
108  }
109 
110  const FunctionList fnlist = dom->functionList();
111  for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
112  {
113  list.append(*it);
114  relations[*it].klass = dom;
115  relations[*it].ns = nsdom;
116  }
117 }
118 
119 } // end of Functions namespace
120 
121 
122 
123 namespace FunctionDefinitions
124 {
125 
126 void processClasses(FunctionDefinitionList &list, const ClassDom dom)
127 {
128  const ClassList cllist = dom->classList();
129  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
130  {
131  processClasses(list, *it);
132  }
133 
134  const FunctionDefinitionList fnlist = dom->functionDefinitionList();
135  for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
136  {
137  list.append(*it);
138  }
139 }
140 
141 void processNamespaces(FunctionDefinitionList &list, const NamespaceDom dom)
142 {
143  const NamespaceList nslist = dom->namespaceList();
144  for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
145  {
146  processNamespaces(list, *it);
147  }
148  const ClassList cllist = dom->classList();
149  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
150  {
151  processClasses(list, *it);
152  }
153 
154  const FunctionDefinitionList fnlist = dom->functionDefinitionList();
155  for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
156  {
157  list.append(*it);
158  }
159 }
160 
161 void processNamespaces( FunctionDefinitionList & list, const NamespaceDom dom, TQMap< FunctionDefinitionDom, Scope > & relations )
162 {
163  const NamespaceList nslist = dom->namespaceList();
164  for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
165  {
166  processNamespaces(list, *it, relations);
167  }
168  const ClassList cllist = dom->classList();
169  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
170  {
171  processClasses(list, *it, relations, dom);
172  }
173 
174  const FunctionDefinitionList fnlist = dom->functionDefinitionList();
175  for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
176  {
177  list.append(*it);
178  relations[*it].ns = dom;
179  }
180 }
181 
182 void processClasses( FunctionDefinitionList & list, const ClassDom dom, TQMap< FunctionDefinitionDom, Scope > & relations )
183 {
184  const ClassList cllist = dom->classList();
185  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
186  {
187  processClasses(list, *it, relations);
188  }
189 
190  const FunctionDefinitionList fnlist = dom->functionDefinitionList();
191  for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
192  {
193  list.append(*it);
194  relations[*it].klass = dom;
195  }
196 }
197 
198 void processClasses( FunctionDefinitionList & list, const ClassDom dom, TQMap< FunctionDefinitionDom, Scope > & relations, const NamespaceDom & nsdom )
199 {
200  const ClassList cllist = dom->classList();
201  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
202  {
203  processClasses(list, *it, relations, nsdom);
204  }
205 
206  const FunctionDefinitionList fnlist = dom->functionDefinitionList();
207  for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
208  {
209  list.append(*it);
210  relations[*it].klass = dom;
211  relations[*it].ns = nsdom;
212  }
213 }
214 
215 } // end of FunctionDefinitions namespace
216 
217 
218 
219 FunctionList allFunctions(const FileDom &dom)
220 {
221  using namespace Functions;
222  FunctionList list;
223 
224  const NamespaceList nslist = dom->namespaceList();
225  for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
226  {
227  processNamespaces(list, *it);
228  }
229 
230  const ClassList cllist = dom->classList();
231  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
232  {
233  processClasses(list, *it);
234  }
235 
236  const FunctionList fnlist = dom->functionList();
237  for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
238  {
239  list.append(*it);
240  }
241 
242  return list;
243 }
244 
245 AllFunctions allFunctionsDetailed( const FileDom & dom )
246 {
247  using namespace Functions;
248  AllFunctions list;
249 
250  const NamespaceList nslist = dom->namespaceList();
251  for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
252  {
253  processNamespaces(list.functionList, *it, list.relations);
254  }
255 
256  const ClassList cllist = dom->classList();
257  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
258  {
259  processClasses(list.functionList, *it, list.relations);
260  }
261 
262  const FunctionList fnlist = dom->functionList();
263  for (FunctionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
264  {
265  list.functionList.append(*it);
266  }
267 
268  return list;
269 }
270 
271 AllFunctionDefinitions allFunctionDefinitionsDetailed( const FileDom & dom )
272 {
273  using namespace FunctionDefinitions;
274  AllFunctionDefinitions list;
275 
276  const NamespaceList nslist = dom->namespaceList();
277  for (NamespaceList::ConstIterator it = nslist.begin(); it != nslist.end(); ++it)
278  {
279  processNamespaces(list.functionList, *it, list.relations);
280  }
281 
282  const ClassList cllist = dom->classList();
283  for (ClassList::ConstIterator it = cllist.begin(); it != cllist.end(); ++it)
284  {
285  processClasses(list.functionList, *it, list.relations);
286  }
287 
288  const FunctionDefinitionList fnlist = dom->functionDefinitionList();
289  for (FunctionDefinitionList::ConstIterator it = fnlist.begin(); it != fnlist.end(); ++it)
290  {
291  list.functionList.append(*it);
292  }
293 
294  return list;
295 }
296 
297 
298 bool resultTypesFit( const FunctionDom & dec, const FunctionDefinitionDom & def ) {
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() );
302 
303  if( l1.isEmpty() || l2.isEmpty() || l1.back() != l2.back() ) return false;
304 
305  while( !l1.isEmpty() && !l2.isEmpty() ) {
306  if( l1.back() == l2.back() ) {
307  l1.pop_back();
308  l2.pop_back();
309  } else {
310  l1.pop_back();
311  }
312  }
313 
314  if( l2.isEmpty() ) return true;
315 
316  return false;
317 }
318 
319 
320 bool compareDeclarationToDefinition( const FunctionDom & dec, const FunctionDefinitionDom & def )
321 {
322  if (dec->scope() == def->scope() && dec->name() == def->name() && resultTypesFit( dec, def ) && dec->isConstant() == def->isConstant())
323  {
324  const ArgumentList defList = def->argumentList(), decList = dec->argumentList();
325  if (defList.size() != decList.size())
326  return false;
327 
328  size_t n = defList.size();
329  for(size_t i = 0; i < n; ++i)
330  if (defList[i]->type() != decList[i]->type())
331  return false;
332 
333  return true;
334  }
335  return false;
336 }
337 
338 
339 bool compareDeclarationToDefinition( const FunctionDom & dec, const FunctionDefinitionDom & def, const std::set<NamespaceImportModel> & nsImports )
340 {
341  if (dec->name() == def->name() && resultTypesFit( dec, def ) && dec->isConstant() == def->isConstant())
342  {
343  const ArgumentList defList = def->argumentList(), decList = dec->argumentList();
344  if (defList.size() != decList.size())
345  return false;
346 
347  size_t n = defList.size();
348  for(size_t i = 0; i < n; ++i)
349  if (defList[i]->type() != decList[i]->type())
350  return false;
351 
352  const TQStringList &defScope = def->scope(), &decScope = dec->scope();
353  if (defScope != decScope)
354  {
355  if (defScope.size() >= decScope.size())
356  return false;
357 
358  n = decScope.size();
359  for(size_t i1 = 0, i2 = 0; i1 < n; ++i1)
360  {
361  if (i2 >= defScope.size() || decScope[i1] != defScope[i2])
362  {
363  NamespaceImportModel model;
364  model.setName(decScope[i1]);
365  model.setFileName(def->fileName());
366  if (nsImports.find(model) == nsImports.end())
367  return false;
368  }
369  else
370  {
371  ++i2;
372  }
373  }
374  }
375 
376  return true;
377  }
378  return false;
379 }
380 
381 
382 
383 FunctionList allFunctionsExhaustive(FileDom &dom) {
384  PredAmOwner<FunctionDom> ow( dom );
385  FunctionList ret;
386 
387  findFunctionDeclarations( ow, dom->wholeGroup(), ret );
388 
389  return ret;
390 }
391 
392 
393 FunctionDefinitionList allFunctionDefinitionsExhaustive(FileDom &dom) {
394  PredAmOwner<FunctionDefinitionDom> ow( dom );
395  FunctionDefinitionList ret;
396 
397  findFunctionDefinitions( ow, dom->wholeGroup(), ret );
398 
399  return ret;
400 }
401 
402 
403 
404 ClassDom findClassByPosition( NamespaceModel* nameSpace, int line, int col )
405 {
406  if (nameSpace == 0)
407  return 0;
408 
409  NamespaceList nsList = nameSpace->namespaceList();
410  for (NamespaceList::iterator i = nsList.begin(); i != nsList.end(); ++i)
411  {
412  ClassDom result = findClassByPosition(*i, line, col);
413  if (result != 0)
414  return result;
415  }
416 
417  ClassList classes = nameSpace->classList();
418  for(ClassList::iterator i = classes.begin(); i != classes.end(); ++i)
419  {
420  ClassDom result = findClassByPosition( *i, line, col );
421  if (result != 0)
422  return result;
423  }
424 
425  return 0;
426 }
427 
428 ClassDom findClassByPosition( ClassModel* aClass, int line, int col )
429 {
430  if (aClass == 0)
431  return 0;
432 
433  ClassList classes = aClass->classList();
434  for(ClassList::iterator i = classes.begin(); i != classes.end(); ++i)
435  {
436  ClassDom result = findClassByPosition( *i, line, col );
437  if (result != 0)
438  return result;
439  }
440 
441  int startLine, startCol;
442  aClass->getStartPosition(&startLine, &startCol);
443 
444  if (startLine <= line)
445  {
446  int endLine, endCol;
447  aClass->getEndPosition(&endLine, &endCol);
448  if (endLine >= line)
449  return (aClass);
450  }
451 
452  return 0;
453 }
454 
455 int findLastMethodLine( ClassDom aClass, CodeModelItem::Access access )
456 {
457  int point = -1;
458 
459  const FunctionList functionList = aClass->functionList();
460  for( FunctionList::ConstIterator it=functionList.begin(); it!=functionList.end(); ++it )
461  {
462  int funEndLine, funEndColumn;
463  (*it)->getEndPosition( &funEndLine, &funEndColumn );
464 
465  if ((*it)->access() == access && point < funEndLine)
466  point = funEndLine;
467  }
468 
469  return point;
470 }
471 
472 int findLastVariableLine( ClassDom aClass, CodeModelItem::Access access )
473 {
474  int point = -1;
475 
476  const VariableList varList = aClass->variableList();
477  for( VariableList::ConstIterator it= varList.begin(); it!= varList.end(); ++it )
478  {
479  int varEndLine, varEndColumn;
480  (*it)->getEndPosition( &varEndLine, &varEndColumn );
481 
482  if ((*it)->access() == access && point < varEndLine)
483  point = varEndLine;
484  }
485 
486  return point;
487 }
488 
489 TQString accessSpecifierToString( CodeModelItem::Access access )
490 {
491  switch(access)
492  {
493  case CodeModelItem::Public: return "public";
494  case CodeModelItem::Protected: return "protected";
495  case CodeModelItem::Private: return "private";
496  default: return "unknown";
497  }
498 }
499 
500 FunctionDefinitionDom CodeModelHelper::functionDefinitionAt(NamespaceDom ns, int line, int column)
501 {
502  NamespaceList namespaceList = ns->namespaceList();
503  NamespaceList::iterator nslEnd = namespaceList.end();
504 
505  for (NamespaceList::iterator it=namespaceList.begin(); it!=nslEnd; ++it)
506  {
507  if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
508  return def;
509  }
510 
511  ClassList classList = ns->classList();
512  ClassList::iterator clEnd = classList.end();
513 
514  for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
515  {
516  if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
517  return def;
518  }
519 
520  FunctionDefinitionList functionDefinitionList = ns->functionDefinitionList();
521  FunctionDefinitionList::iterator fdlEnd = functionDefinitionList.end();
522 
523  for (FunctionDefinitionList::iterator it=functionDefinitionList.begin();
524  it!=fdlEnd; ++it )
525  {
526  if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
527  return def;
528  }
529 
530  return FunctionDefinitionDom();
531 }
532 
533 FunctionDefinitionDom CodeModelHelper::functionDefinitionAt(ClassDom klass, int line, int column)
534 {
535  ClassList classList = klass->classList();
536  ClassList::iterator clEnd = classList.end();
537 
538  for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
539  {
540  if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
541  return def;
542  }
543 
544  FunctionDefinitionList functionDefinitionList = klass->functionDefinitionList();
545  FunctionDefinitionList::iterator fdlEnd = functionDefinitionList.end();
546  for (FunctionDefinitionList::Iterator it=functionDefinitionList.begin();
547  it!=fdlEnd; ++it)
548  {
549  if (FunctionDefinitionDom def = functionDefinitionAt(*it, line, column))
550  return def;
551  }
552 
553  return FunctionDefinitionDom();
554 }
555 
556 FunctionDefinitionDom CodeModelHelper::functionDefinitionAt(FunctionDefinitionDom fun, int line, int // column
557  )
558 {
559  int startLine, startColumn;
560  int endLine, endColumn;
561 
562  fun->getStartPosition(&startLine, &startColumn);
563  fun->getEndPosition(&endLine, &endColumn);
564 
565  if (!(line >= startLine && line <= endLine) || fun->fileName() != m_fileName )
566  return FunctionDefinitionDom();
567 
568  /*
569  if (line == startLine && column < startColumn)
570  return FunctionDefinitionDom();
571 
572  if (line == endLine && column > endColumn)
573  return FunctionDefinitionDom();*/
574 
575  return fun;
576 }
577 
578 
579 
580 FunctionDom CodeModelHelper::functionDeclarationAt(NamespaceDom ns, int line, int column)
581 {
582  NamespaceList namespaceList = ns->namespaceList();
583  NamespaceList::iterator nsEnd = namespaceList.end();
584  for (NamespaceList::iterator it=namespaceList.begin(); it!=nsEnd; ++it)
585  {
586  if (FunctionDom def = functionDeclarationAt(*it, line, column))
587  return def;
588  }
589 
590  ClassList classList = ns->classList();
591  ClassList::iterator clEnd = classList.end();
592  for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
593  {
594  if (FunctionDom def = functionDeclarationAt(*it, line, column))
595  return def;
596  }
597 
598  FunctionList functionList = ns->functionList();
599  FunctionList::iterator flEnd = functionList.end();
600  for (FunctionList::iterator it=functionList.begin();
601  it!=flEnd; ++it )
602  {
603  if (FunctionDom def = functionDeclarationAt(*it, line, column))
604  return def;
605  }
606 
607  return FunctionDom();
608 }
609 
610 FunctionDom CodeModelHelper::functionDeclarationAt(ClassDom klass, int line, int column)
611 {
612  ClassList classList = klass->classList();
613  ClassList::iterator clEnd = classList.end();
614  for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
615  {
616  if (FunctionDom def = functionDeclarationAt(*it, line, column))
617  return def;
618  }
619 
620  FunctionList functionList = klass->functionList();
621  FunctionList::iterator flEnd = functionList.end();
622  for (FunctionList::Iterator it=functionList.begin();
623  it!=flEnd; ++it)
624  {
625  if (FunctionDom def = functionDeclarationAt(*it, line, column))
626  return def;
627  }
628 
629  return FunctionDom();
630 }
631 
632 FunctionDom CodeModelHelper::functionDeclarationAt(FunctionDom fun, int line, int // column
633  )
634 {
635  int startLine, startColumn;
636  int endLine, endColumn;
637 
638  fun->getStartPosition(&startLine, &startColumn);
639  fun->getEndPosition(&endLine, &endColumn);
640 
641  if (!(line >= startLine && line <= endLine) || fun->fileName() != m_fileName )
642  return FunctionDom();
643 
644 
645  /* if (line == startLine && column < startColumn)
646  return FunctionDom();
647 
648  if (line == endLine && column > endColumn)
649  return FunctionDom();*/
650 
651  return fun;
652 }
653 
654 
655 
656 
657 ClassDom CodeModelHelper::classAt(NamespaceDom ns, int line, int column)
658 {
659  NamespaceList namespaceList = ns->namespaceList();
660  NamespaceList::iterator nsEnd = namespaceList.end();
661 
662  for (NamespaceList::iterator it=namespaceList.begin(); it!=nsEnd; ++it)
663  {
664  if (ClassDom def = classAt(*it, line, column))
665  return def;
666  }
667 
668  ClassList classList = ns->classList();
669  ClassList::iterator clEnd = classList.end();
670  for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
671  {
672  if (ClassDom def = classAt(*it, line, column))
673  return def;
674  }
675 
676  return ClassDom();
677 }
678 
679 ClassDom CodeModelHelper::classAt(ClassDom klass, int line, int column)
680 {
681  ClassList classList = klass->classList();
682  ClassList::iterator clEnd = classList.end();
683  for (ClassList::iterator it=classList.begin(); it!=clEnd; ++it)
684  {
685  if (ClassDom def = classAt(*it, line, column))
686  return def;
687  }
688 
689  int startLine, startColumn;
690  int endLine, endColumn;
691 
692  klass->getStartPosition(&startLine, &startColumn);
693  klass->getEndPosition(&endLine, &endColumn);
694 
695  if (!(line >= startLine && line <= endLine) || klass->fileName() != m_fileName )
696  return ClassDom();
697 
698  return klass;
699 }
700 
701 
702 CodeModelHelper::CodeModelHelper( CodeModel* model, FileDom file ) : m_model( model ) {
703  if( !file ) return;
704  m_files = file->wholeGroup();
705  m_fileName = file->name();
706 }
707 
708 
709 FunctionDom CodeModelHelper::functionAt( int line, int column, FunctionTypes types ) {
710  if( m_files.isEmpty() ) return FunctionDom();
711 
712 
713  FunctionDom ret;
714  FileList::iterator it = m_files.begin();
715  while( it != m_files.end() ) {
716  if( types & Declaration ) {
717  ret = functionDeclarationAt(model_cast<NamespaceDom>(*it), line, column);
718  if(ret) return ret;
719  }
720  if( types & Definition ) {
721  FunctionDefinitionDom r = functionDefinitionAt(model_cast<NamespaceDom>(*it), line, column);
722  if(r) {
723  ret = model_cast<FunctionDom>( r );
724  return ret;
725  }
726  }
727  ++it;
728  }
729 
730  return ret;
731 }
732 
733 ClassDom CodeModelHelper::classAt( int line, int column ) {
734  if( m_files.isEmpty() ) return ClassDom();
735 
736  ClassDom ret;
737  FileList::iterator it = m_files.begin();
738  while( it != m_files.end() ) {
739  ret = classAt( model_cast<NamespaceDom>(*it), line, column );
740  if(ret) return ret;
741  ++it;
742  }
743 
744  return ret;
745 }
746 
747 }//end of namespace CodeModeUtils
CodeModelUtils::allFunctionsDetailed
AllFunctions allFunctionsDetailed(const FileDom &dom)
Definition: codemodel_utils.cpp:245
CodeModelItem::Private
Private.
Definition: codemodel.h:490
CodeModelUtils::findLastMethodLine
int findLastMethodLine(ClassDom aClass, CodeModelItem::Access access)
Finds the last occurrence (line of file wise) of a method inside a class declaration with specific ac...
Definition: codemodel_utils.cpp:455
CodeModelUtils::allFunctionDefinitionsExhaustive
FunctionDefinitionList allFunctionDefinitionsExhaustive(FileDom &dom)
Definition: codemodel_utils.cpp:393
ArgumentList
The list of code model arguments.
CodeModelUtils::AllFunctions::functionList
FunctionList functionList
List of functions.
Definition: codemodel_utils.h:338
CodeModelUtils::AllFunctions::relations
TQMap< FunctionDom, Scope > relations
Scope of functions.
Definition: codemodel_utils.h:336
CodeModelUtils::allFunctionDefinitionsDetailed
AllFunctionDefinitions allFunctionDefinitionsDetailed(const FileDom &dom)
Definition: codemodel_utils.cpp:271
CodeModelItem::Protected
Protected.
Definition: codemodel.h:489
CodeModelUtils::allFunctionsExhaustive
FunctionList allFunctionsExhaustive(FileDom &dom)
Definition: codemodel_utils.cpp:383
CodeModelUtils::findFunctionDefinitions
void findFunctionDefinitions(Pred pred, const FileList &fileList, FunctionDefinitionList &lst)
Finds function definitions which match given predicate in files.
Definition: codemodel_utils.h:224
codemodel_utils.h
Utility functions and classes for the CodeModel.
CodeModelUtils::AllFunctionDefinitions::functionList
FunctionDefinitionList functionList
List of function definitions.
Definition: codemodel_utils.h:345
CodeModelUtils::AllFunctionDefinitions
Information about function definitions.
Definition: codemodel_utils.h:341
model_cast
Result model_cast(TDESharedPtr< T > x)
Casts safe code model pointers (TDESharedPtr<T> objects like FileDom, NamespaceDom, etc.) to the Result type.
Definition: codemodel.h:285
NamespaceList
The list of code model namespaces.
CodeModelUtils::Functions::processNamespaces
void processNamespaces(FunctionList &list, const NamespaceDom dom)
Looks for functions in the namespace.
Definition: codemodel_utils.cpp:45
VariableList
The list of code model variables.
FunctionDefinitionList
The list of code model function definitions.
CodeModelUtils::accessSpecifierToString
TQString accessSpecifierToString(CodeModelItem::Access access)
Get the string representation of an accesss pecifier.
Definition: codemodel_utils.cpp:489
CodeModelUtils::findLastVariableLine
int findLastVariableLine(ClassDom aClass, CodeModelItem::Access access)
Same as above, but finds a membervariable instead of a method.
Definition: codemodel_utils.cpp:472
CodeModelUtils::findClassByPosition
ClassDom findClassByPosition(NamespaceModel *nameSpace, int line, int col)
Finds a class by its position in a file(position inside the part of the file, where the class is decl...
Definition: codemodel_utils.cpp:404
ClassList
The list of code model classes.
CodeModelUtils::AllFunctions
Information about functions.
Definition: codemodel_utils.h:334
NamespaceModel
Namespace model.
Definition: codemodel.h:1039
CodeModelItem::getStartPosition
void getStartPosition(int *line, int *col) const
Gets the start position of the item.
Definition: codemodel.cpp:625
FunctionDom
Safe pointer to the FunctionModel.
CodeModelItem::Access
Access
An access to the code model item.
Definition: codemodel.h:486
ClassDom
Safe pointer to the ClassModel.
CodeModelUtils::AllFunctionDefinitions::relations
TQMap< FunctionDefinitionDom, Scope > relations
Scope of function definitions.
Definition: codemodel_utils.h:343
CodeModel
Code Model - a memory symbol store.
Definition: codemodel.h:324
CodeModelUtils::findFunctionDeclarations
void findFunctionDeclarations(Pred pred, const FileList &fileList, FunctionList &lst)
Finds function declarations which match given predicate in files.
Definition: codemodel_utils.h:276
ClassModel::classList
ClassList classList()
Definition: codemodel.cpp:737
FunctionDefinitionDom
Safe pointer to the FunctionDefinitionModel.
CodeModelItem::Public
Public.
Definition: codemodel.h:488
FileDom
Safe pointer to the FileModel.
CodeModelUtils
Namespace which contains utility functions and classes for the CodeModel.
Definition: codemodel_utils.cpp:24
CodeModelUtils::allFunctions
FunctionList allFunctions(const FileDom &dom)
Definition: codemodel_utils.cpp:219
NamespaceDom
Safe pointer to the NamespaceModel.
FunctionList
The list of code model functions.
ClassModel
Class model.
Definition: codemodel.h:696
CodeModelUtils::compareDeclarationToDefinition
bool compareDeclarationToDefinition(const FunctionDom &dec, const FunctionDefinitionDom &def)
Compares a declaration and a defintion of a function.
Definition: codemodel_utils.cpp:320
CodeModelUtils::Functions::processClasses
void processClasses(FunctionList &list, const ClassDom dom)
Looks for functions in the class.
Definition: codemodel_utils.cpp:30
NamespaceModel::namespaceList
NamespaceList namespaceList()
Definition: codemodel.cpp:670
CodeModelItem::getEndPosition
void getEndPosition(int *line, int *col) const
Get the end position of the item.
Definition: codemodel.cpp:637

TDevelop Interfaces Library

Skip menu "TDevelop Interfaces Library"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

TDevelop Interfaces Library

Skip menu "TDevelop Interfaces Library"
  • buildtools
  •   lib
  •     base
  •     parsers
  •       autotools
  •       qmake
  •     widgets
  •   api
  • languages
  •   lib
  •     debugger
  •     designer_integration
  •     interfaces
  • lib
  •   catalog
  •   interfaces
  •     extensions
  •     external
  •     extras
  •   util
  •   widgets
  •     propeditor
  • parts
  •   documentation
  •     interfaces
  • src
  •   profileengine
  •     lib
Generated for TDevelop Interfaces Library by doxygen 1.8.13
This website is maintained by Timothy Pearson.