Add option to recurse referencedSourceUnits

This commit is contained in:
Alex Beregszaszi 2017-07-13 00:17:25 +01:00
parent a9bddf71aa
commit ed592d6ccb
2 changed files with 10 additions and 5 deletions

View File

@ -84,12 +84,17 @@ SourceUnitAnnotation& SourceUnit::annotation() const
return dynamic_cast<SourceUnitAnnotation&>(*m_annotation); return dynamic_cast<SourceUnitAnnotation&>(*m_annotation);
} }
vector<SourceUnit const*> SourceUnit::referencedSourceUnits() const set<SourceUnit const*> SourceUnit::referencedSourceUnits(bool _recurse) const
{ {
vector<SourceUnit const*> sourceUnits; set<SourceUnit const*> sourceUnits;
for (ImportDirective const* importDirective: filteredNodes<ImportDirective>(nodes())) for (ImportDirective const* importDirective: filteredNodes<ImportDirective>(nodes()))
{ {
sourceUnits.push_back(importDirective->annotation().sourceUnit); sourceUnits.insert(importDirective->annotation().sourceUnit);
if (_recurse)
{
set<SourceUnit const*> referencedSourceUnits = importDirective->annotation().sourceUnit->referencedSourceUnits(true);
sourceUnits.insert(referencedSourceUnits.begin(), referencedSourceUnits.end());
}
} }
return sourceUnits; return sourceUnits;
} }

View File

@ -136,8 +136,8 @@ public:
std::vector<ASTPointer<ASTNode>> nodes() const { return m_nodes; } std::vector<ASTPointer<ASTNode>> nodes() const { return m_nodes; }
/// @returns a vector of referenced SourceUnits. /// @returns a set of referenced SourceUnits. Recursively if @a _recurse is true.
std::vector<SourceUnit const*> referencedSourceUnits() const; std::set<SourceUnit const*> referencedSourceUnits(bool _recurse = false) const;
private: private:
std::vector<ASTPointer<ASTNode>> m_nodes; std::vector<ASTPointer<ASTNode>> m_nodes;