Doxygen
Loading...
Searching...
No Matches
definition.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2023 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#ifndef DEFINITION_H
17#define DEFINITION_H
18
19#include <vector>
20
21#include "types.h"
22#include "reflist.h"
23#include "construct.h"
24#include "requirement.h"
25
26#ifdef _MSC_VER
27// To disable 'inherits via dominance' warnings with MSVC.
28// See also https://stackoverflow.com/a/14487243/784672
29#pragma warning( disable: 4250 )
30#endif
31
32class FileDef;
33class OutputList;
34class SectionRefs;
35class MemberDef;
36class MemberVector;
37class GroupDef;
38class GroupList;
39class SectionInfo;
40class Definition;
42class DefinitionImpl;
43class TextStream;
44
45/** Data associated with a detailed description. */
46struct DocInfo
47{
49 int line = -1;
51};
52
53/** Data associated with a brief description. */
61
62/** Data associated with description found in the body. */
64{
65 int defLine = -1; //!< line number of the start of the definition
66 int startLine = -1; //!< line number of the start of the definition's body
67 int endLine = -1; //!< line number of the end of the definition's body
68 const FileDef *fileDef = nullptr; //!< file definition containing the function body
69};
70
71/** The common base class of all entity definitions found in the sources.
72 *
73 * This can be a class or a member function, or a file, or a namespace, etc.
74 * Use definitionType() to find which type of definition this is.
75 */
77{
78 public:
80
81 /*! Types of derived classes */
95
96
97 //-----------------------------------------------------------------------------------
98 // ---- getters -----
99 //-----------------------------------------------------------------------------------
100
101 /*! Use this for dynamic inspection of the type of the derived class */
102 virtual DefType definitionType() const = 0;
103
104 /*! Used for syntax highlighting symbol class */
105 virtual CodeSymbolType codeSymbolType() const = 0;
106
107 /*! Returns TRUE if this is an alias of another definition */
108 virtual bool isAlias() const = 0;
109
110 /*! Returns the name of the definition */
111 virtual const QCString &name() const = 0;
112
113 /*! Returns TRUE iff this definition has an artificially generated name
114 * (typically starting with a @) that is used for nameless definitions
115 */
116 virtual bool isAnonymous() const = 0;
117
118 /*! Returns the name of the definition as it appears in the output */
119 virtual QCString displayName(bool includeScope=TRUE) const = 0;
120
121 /*! Returns the local name without any scope qualifiers. */
122 virtual const QCString &localName() const = 0;
123
124 /*! Returns the fully qualified name of this definition
125 */
126 virtual QCString qualifiedName() const = 0;
127
128 /*! Returns the name of this definition as it appears in the symbol map.
129 */
130 virtual QCString symbolName() const = 0;
131
132 /*! Returns the base file name (without extension) of this definition.
133 * as it is referenced to/written to disk.
134 */
135 virtual QCString getOutputFileBase() const = 0;
136
137 /*! Returns the anchor within a page where this item can be found */
138 virtual QCString anchor() const = 0;
139
140 /*! Returns the name of the source listing of this definition. */
141 virtual QCString getSourceFileBase() const = 0;
142
143 /*! Returns the anchor of the source listing of this definition. */
144 virtual QCString getSourceAnchor() const = 0;
145
146 /*! Returns the detailed description of this definition */
147 virtual QCString documentation() const = 0;
148
149 /*! Returns the line number at which the detailed documentation was found. */
150 virtual int docLine() const = 0;
151
152 /*! Returns the file in which the detailed documentation block was found.
153 * This can differ from getDefFileName().
154 */
155 virtual QCString docFile() const = 0;
156
157 /*! Returns the brief description of this definition. This can include commands. */
158 virtual QCString briefDescription(bool abbreviate=FALSE) const = 0;
159
160 /*! Returns a plain text version of the brief description suitable for use
161 * as a tool tip.
162 */
164
165 /*! Returns the line number at which the brief description was found. */
166 virtual int briefLine() const = 0;
167
168 /*! Returns the file in which the brief description was found.
169 * This can differ from getDefFileName().
170 */
171 virtual QCString briefFile() const = 0;
172
173 /*! Returns the documentation found inside the body of a member */
174 virtual QCString inbodyDocumentation() const = 0;
175
176 /*! Returns the file in which the in body documentation was found */
177 virtual QCString inbodyFile() const = 0;
178
179 /*! Returns the line at which the first in body documentation
180 part was found */
181 virtual int inbodyLine() const = 0;
182
183 /*! returns the file in which this definition was found */
184 virtual QCString getDefFileName() const = 0;
185
186 /*! returns the extension of the file in which this definition was found */
187 virtual QCString getDefFileExtension() const = 0;
188
189 /*! returns the line number at which the definition was found (can be the declaration) */
190 virtual int getDefLine() const = 0;
191
192 /*! returns the column number at which the definition was found */
193 virtual int getDefColumn() const = 0;
194
195 /*! Returns TRUE iff the definition is documented
196 * (which could be generated documentation)
197 * @see hasUserDocumentation()
198 */
199 virtual bool hasDocumentation() const = 0;
200
201 /*! Returns TRUE iff the definition is documented by the user. */
202 virtual bool hasUserDocumentation() const = 0;
203
204 /*! Returns TRUE iff it is possible to link to this item within this
205 * project.
206 */
207 virtual bool isLinkableInProject() const = 0;
208
209 /*! Returns TRUE iff it is possible to link to this item. This can
210 * be a link to another project imported via a tag file.
211 */
212 virtual bool isLinkable() const = 0;
213
214 /*! Returns TRUE iff the name is part of this project and
215 * may appear in the output
216 */
217 virtual bool isVisibleInProject() const = 0;
218
219 /*! Returns TRUE iff the name may appear in the output */
220 virtual bool isVisible() const = 0;
221
222 /*! Returns TRUE iff this item is supposed to be hidden from the output. */
223 virtual bool isHidden() const = 0;
224
225 /*! Returns TRUE if this entity was artificially introduced, for
226 * instance because it is used to show a template instantiation relation.
227 */
228 virtual bool isArtificial() const = 0;
229
230 /*! Returns TRUE iff this entity was exported from a C++20 module. */
231 virtual bool isExported() const = 0;
232
233 /*! If this definition was imported via a tag file, this function
234 * returns the tagfile for the external project. This can be
235 * translated into an external link target via
236 * Doxygen::tagDestinationDict
237 */
238 virtual QCString getReference() const = 0;
239
240 /*! Returns TRUE if this definition is imported via a tag file. */
241 virtual bool isReference() const = 0;
242
243 /*! Convenience method to return a resolved external link */
244 virtual QCString externalReference(const QCString &relPath) const = 0;
245
246 /*! Returns the first line of the implementation of this item. See also getDefLine() */
247 virtual int getStartDefLine() const = 0;
248
249 /*! Returns the first line of the body of this item (applicable to classes and
250 * functions).
251 */
252 virtual int getStartBodyLine() const = 0;
253
254 /*! Returns the last line of the body of this item (applicable to classes and
255 * functions).
256 */
257 virtual int getEndBodyLine() const = 0;
258
259 /*! Returns the file in which the body of this item is located or 0 if no
260 * body is available.
261 */
262 virtual const FileDef *getBodyDef() const = 0;
263
264 /** Returns the programming language this definition was written in. */
265 virtual SrcLangExt getLanguage() const = 0;
266
267 virtual const GroupList &partOfGroups() const = 0;
268 virtual bool isLinkableViaGroup() const = 0;
269
270 virtual const RefItemVector &xrefListItems() const = 0;
271
272 virtual const RequirementRefs &requirementReferences() const = 0;
273
274 virtual const Definition *findInnerCompound(const QCString &name) const = 0;
275 virtual Definition *getOuterScope() const = 0;
276
277 virtual const MemberVector &getReferencesMembers() const = 0;
278 virtual const MemberVector &getReferencedByMembers() const = 0;
279
280 virtual bool hasSections() const = 0;
281 virtual bool hasSources() const = 0;
282
283
284 /** returns TRUE if this class has a brief description */
285 virtual bool hasBriefDescription() const = 0;
286
287 virtual QCString id() const = 0;
288
289 /** returns the section dictionary, only of importance for pagedef */
290 virtual const SectionRefs &getSectionRefs() const = 0;
291
292 virtual QCString navigationPathAsString() const = 0;
293 virtual QCString pathFragment() const = 0;
294
295 //-----------------------------------------------------------------------------------
296 // --- symbol name ----
297 //-----------------------------------------------------------------------------------
298 virtual void _setSymbolName(const QCString &name) = 0;
299 virtual QCString _symbolName() const = 0;
300
301 private:
302 friend class DefinitionImpl;
305 virtual const DefinitionImpl *toDefinitionImpl_() const = 0;
306};
307
309{
310 public:
312
313 //-----------------------------------------------------------------------------------
314 // ---- setters -----
315 //-----------------------------------------------------------------------------------
316
317 /*! Sets a new \a name for the definition */
318 virtual void setName(const QCString &name) = 0;
319
320 /*! Sets a unique id for the symbol. Used for libclang integration. */
321 virtual void setId(const QCString &name) = 0;
322
323 /*! Set a new file name and position */
324 virtual void setDefFile(const QCString& df,int defLine,int defColumn) = 0;
325
326 /*! Sets the documentation of this definition to \a d. */
327 virtual void setDocumentation(const QCString &d,const QCString &docFile,int docLine,bool stripWhiteSpace=TRUE) = 0;
328
329 /*! Sets the brief description of this definition to \a b.
330 * A dot is added to the sentence if not available.
331 */
332 virtual void setBriefDescription(const QCString &b,const QCString &briefFile,int briefLine) = 0;
333
334 /*! Set the documentation that was found inside the body of an item.
335 * If there was already some documentation set, the new documentation
336 * will be appended.
337 */
338 virtual void setInbodyDocumentation(const QCString &d,const QCString &docFile,int docLine) = 0;
339
340 /*! Sets the tag file id via which this definition was imported. */
341 virtual void setReference(const QCString &r) = 0;
342
343 // source references
344 virtual void setBodySegment(int defLine, int bls,int ble) = 0;
345 virtual void setBodyDef(const FileDef *fd) = 0;
346
347 virtual void setRefItems(const RefItemVector &sli) = 0;
348 virtual void setRequirementReferences(const RequirementRefs &rqli) = 0;
349 virtual void setOuterScope(Definition *d) = 0;
350
351 virtual void setHidden(bool b) = 0;
352
353 virtual void setArtificial(bool b) = 0;
354 virtual void setExported(bool b) = 0;
355 virtual void setLanguage(SrcLangExt lang) = 0;
356 virtual void setLocalName(const QCString &name) = 0;
357
358 //-----------------------------------------------------------------------------------
359 // --- actions ----
360 //-----------------------------------------------------------------------------------
361
362 virtual void makePartOfGroup(GroupDef *gd) = 0;
363
364 /*! Add the list of anchors that mark the sections that are found in the
365 * documentation.
366 */
367 virtual void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList) = 0;
368 virtual void addSourceReferencedBy(MemberDef *d,const QCString &sourceRefName) = 0;
369 virtual void addSourceReferences(MemberDef *d,const QCString &sourceRefName) = 0;
370 virtual void mergeRefItems(Definition *d) = 0;
371 virtual void addInnerCompound(Definition *d) = 0;
372 virtual void mergeReferences(const Definition *other) = 0;
373 virtual void mergeReferencedBy(const Definition *other) = 0;
374 virtual void computeTooltip() = 0;
375
376 //-----------------------------------------------------------------------------------
377 // --- writing output ----
378 //-----------------------------------------------------------------------------------
379 virtual void writeSourceDef(OutputList &ol) const = 0;
380 virtual void writeInlineCode(OutputList &ol,const QCString &scopeName) const = 0;
381 virtual bool hasSourceRefs() const = 0;
382 virtual bool hasSourceReffedBy() const = 0;
383 virtual void writeSourceRefs(OutputList &ol,const QCString &scopeName) const = 0;
384 virtual void writeSourceReffedBy(OutputList &ol,const QCString &scopeName) const = 0;
385 virtual bool hasRequirementRefs() const = 0;
386 virtual void writeRequirementRefs(OutputList &ol) const = 0;
387 virtual void writeNavigationPath(OutputList &ol) const = 0;
388 virtual void writeQuickMemberLinks(OutputList &,const MemberDef *) const = 0;
389 virtual void writeSummaryLinks(OutputList &) const = 0;
390 virtual void writePageNavigation(OutputList &) const = 0;
391 virtual void writeDocAnchorsToTagFile(TextStream &) const = 0;
392 virtual void writeToc(OutputList &ol, const LocalToc &lt) const = 0;
393
394 private:
396 virtual Definition *toDefinition_() = 0;
397};
398
401
402/** Reads a fragment from file \a fileName starting with line \a startLine
403 * and ending with line \a endLine. The result is returned as a string
404 * via \a result. The function returns TRUE if successful and FALSE
405 * in case of an error.
406 */
407bool readCodeFragment(const QCString &fileName,bool isMacro,
408 int &startLine,int &endLine,
409 QCString &result);
410#endif
The common base class of all entity definitions found in the sources.
Definition definition.h:77
virtual QCString docFile() const =0
virtual bool isVisible() const =0
virtual const QCString & localName() const =0
virtual int getEndBodyLine() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual bool hasSections() const =0
virtual bool isVisibleInProject() const =0
virtual int docLine() const =0
virtual const RefItemVector & xrefListItems() const =0
virtual QCString navigationPathAsString() const =0
virtual QCString getDefFileName() const =0
virtual bool isLinkable() const =0
virtual bool isLinkableViaGroup() const =0
virtual int getDefLine() const =0
virtual bool hasBriefDescription() const =0
returns TRUE if this class has a brief description
virtual DefType definitionType() const =0
virtual const SectionRefs & getSectionRefs() const =0
returns the section dictionary, only of importance for pagedef
virtual QCString pathFragment() const =0
virtual QCString anchor() const =0
virtual QCString briefDescriptionAsTooltip() const =0
virtual QCString getSourceAnchor() const =0
virtual int inbodyLine() const =0
virtual DefinitionMutable * toDefinitionMutable_()=0
virtual const FileDef * getBodyDef() const =0
virtual int briefLine() const =0
virtual bool hasDocumentation() const =0
virtual QCString id() const =0
virtual bool isLinkableInProject() const =0
virtual QCString symbolName() const =0
virtual bool isExported() const =0
virtual bool hasSources() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual bool hasUserDocumentation() const =0
virtual bool isAnonymous() const =0
virtual const RequirementRefs & requirementReferences() const =0
virtual bool isHidden() const =0
virtual const Definition * findInnerCompound(const QCString &name) const =0
virtual int getStartDefLine() const =0
virtual QCString getReference() const =0
virtual void _setSymbolName(const QCString &name)=0
virtual QCString getSourceFileBase() const =0
virtual const GroupList & partOfGroups() const =0
virtual QCString documentation() const =0
virtual QCString qualifiedName() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual bool isAlias() const =0
virtual bool isArtificial() const =0
virtual QCString briefFile() const =0
virtual CodeSymbolType codeSymbolType() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual const MemberVector & getReferencedByMembers() const =0
virtual int getStartBodyLine() const =0
friend class DefinitionImpl
Definition definition.h:302
virtual QCString getDefFileExtension() const =0
virtual QCString _symbolName() const =0
virtual int getDefColumn() const =0
virtual bool isReference() const =0
virtual const MemberVector & getReferencesMembers() const =0
virtual QCString inbodyDocumentation() const =0
virtual const DefinitionImpl * toDefinitionImpl_() const =0
virtual QCString inbodyFile() const =0
virtual const QCString & name() const =0
friend DefinitionMutable * toDefinitionMutable(Definition *)
virtual QCString externalReference(const QCString &relPath) const =0
virtual void mergeReferencedBy(const Definition *other)=0
virtual bool hasSourceRefs() const =0
virtual bool hasRequirementRefs() const =0
virtual void setExported(bool b)=0
virtual void setBodySegment(int defLine, int bls, int ble)=0
virtual void setName(const QCString &name)=0
virtual void writePageNavigation(OutputList &) const =0
virtual void setLocalName(const QCString &name)=0
virtual void setHidden(bool b)=0
virtual void mergeReferences(const Definition *other)=0
virtual bool hasSourceReffedBy() const =0
virtual void writeSourceRefs(OutputList &ol, const QCString &scopeName) const =0
virtual void setDocumentation(const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace=TRUE)=0
virtual void setDefFile(const QCString &df, int defLine, int defColumn)=0
virtual void writeSummaryLinks(OutputList &) const =0
virtual Definition * toDefinition_()=0
virtual void addSourceReferences(MemberDef *d, const QCString &sourceRefName)=0
virtual void addInnerCompound(Definition *d)=0
virtual void writeQuickMemberLinks(OutputList &, const MemberDef *) const =0
virtual void addSectionsToDefinition(const std::vector< const SectionInfo * > &anchorList)=0
virtual void writeSourceDef(OutputList &ol) const =0
virtual void setInbodyDocumentation(const QCString &d, const QCString &docFile, int docLine)=0
virtual void writeRequirementRefs(OutputList &ol) const =0
virtual void writeInlineCode(OutputList &ol, const QCString &scopeName) const =0
virtual void setLanguage(SrcLangExt lang)=0
virtual void setOuterScope(Definition *d)=0
friend Definition * toDefinition(DefinitionMutable *)
virtual void writeSourceReffedBy(OutputList &ol, const QCString &scopeName) const =0
virtual void setArtificial(bool b)=0
virtual void writeToc(OutputList &ol, const LocalToc &lt) const =0
virtual void setId(const QCString &name)=0
virtual void mergeRefItems(Definition *d)=0
virtual void writeDocAnchorsToTagFile(TextStream &) const =0
virtual void makePartOfGroup(GroupDef *gd)=0
virtual void setBodyDef(const FileDef *fd)=0
virtual void setBriefDescription(const QCString &b, const QCString &briefFile, int briefLine)=0
virtual void setReference(const QCString &r)=0
virtual void setRequirementReferences(const RequirementRefs &rqli)=0
virtual void addSourceReferencedBy(MemberDef *d, const QCString &sourceRefName)=0
virtual void writeNavigationPath(OutputList &ol) const =0
virtual void setRefItems(const RefItemVector &sli)=0
virtual void computeTooltip()=0
A model of a file symbol.
Definition filedef.h:99
A model of a group of symbols.
Definition groupdef.h:52
A model of a class/file/namespace member symbol.
Definition memberdef.h:48
A vector of MemberDef object.
Definition memberlist.h:35
Class representing a list of output generators that are written to in parallel.
Definition outputlist.h:315
This is an alternative implementation of QCString.
Definition qcstring.h:101
class that provide information about a section.
Definition section.h:58
class that represents a list of constant references to sections.
Definition section.h:103
Text streaming class that buffers data.
Definition textstream.h:36
#define ABSTRACT_BASE_CLASS(cls)
Macro to implement rule of 5 for an abstract base class.
Definition construct.h:20
static QCString abbreviate(const QCString &s, const QCString &name)
bool readCodeFragment(const QCString &fileName, bool isMacro, int &startLine, int &endLine, QCString &result)
Reads a fragment from file fileName starting with line startLine and ending with line endLine.
DefinitionMutable * toDefinitionMutable(Definition *d)
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
std::vector< RefItem * > RefItemVector
Definition reflist.h:133
std::vector< RequirementRef > RequirementRefs
List of requirement references.
Definition requirement.h:56
std::string_view stripWhiteSpace(std::string_view s)
Given a string view s, returns a new, narrower view on that string, skipping over any leading or trai...
Definition stringutil.h:72
Data associated with description found in the body.
Definition definition.h:64
int startLine
line number of the start of the definition's body
Definition definition.h:66
const FileDef * fileDef
file definition containing the function body
Definition definition.h:68
int endLine
line number of the end of the definition's body
Definition definition.h:67
int defLine
line number of the start of the definition
Definition definition.h:65
Data associated with a brief description.
Definition definition.h:55
QCString tooltip
Definition definition.h:57
QCString file
Definition definition.h:59
QCString doc
Definition definition.h:56
Data associated with a detailed description.
Definition definition.h:47
QCString doc
Definition definition.h:48
int line
Definition definition.h:49
QCString file
Definition definition.h:50
This file contains a number of basic enums and types.
CodeSymbolType
Definition types.h:481
SrcLangExt
Definition types.h:207