diff --git a/interfaces/iproblem.h b/interfaces/iproblem.h --- a/interfaces/iproblem.h +++ b/interfaces/iproblem.h @@ -97,16 +97,10 @@ virtual void setFinalLocation(const KDevelop::DocumentRange& location) = 0; /// Returns the final location mode of the problem - inline FinalLocationMode finalLocationMode() - { - return m_finalLocationMode; - } + virtual FinalLocationMode finalLocationMode() const = 0; /// Sets the final location mode of the problem - inline void setFinalLocationMode(FinalLocationMode mode) - { - m_finalLocationMode = mode; - } + virtual void setFinalLocationMode(FinalLocationMode mode) = 0; /// Returns the short description of the problem. virtual QString description() const = 0; @@ -143,9 +137,6 @@ /// Returns a solution assistant for the problem, if applicable that is. virtual QExplicitlySharedDataPointer solutionAssistant() const = 0; - -protected: - FinalLocationMode m_finalLocationMode = Range; }; Q_DECLARE_OPERATORS_FOR_FLAGS(IProblem::Severities) diff --git a/language/duchain/problem.h b/language/duchain/problem.h --- a/language/duchain/problem.h +++ b/language/duchain/problem.h @@ -87,6 +87,7 @@ ProblemData() : source(IProblem::Unknown) , severity(IProblem::Error) + , finalLocationMode(IProblem::Range) { initializeAppendedLists(); } @@ -98,6 +99,7 @@ , url(rhs.url) , description(rhs.description) , explanation(rhs.explanation) + , finalLocationMode(IProblem::Range) { initializeAppendedLists(); copyListsFrom(rhs); @@ -113,6 +115,7 @@ IndexedString url; IndexedString description; IndexedString explanation; + IProblem::FinalLocationMode finalLocationMode; START_APPENDED_LISTS_BASE(ProblemData, DUChainBaseData); APPENDED_LIST_FIRST(ProblemData, LocalIndexedProblem, diagnostics); @@ -154,6 +157,9 @@ DocumentRange finalLocation() const override; void setFinalLocation(const DocumentRange& location) override; + FinalLocationMode finalLocationMode() const override; + void setFinalLocationMode(FinalLocationMode mode) override; + /** * Returns child diagnostics of this particular problem * diff --git a/language/duchain/problem.cpp b/language/duchain/problem.cpp --- a/language/duchain/problem.cpp +++ b/language/duchain/problem.cpp @@ -98,11 +98,20 @@ void Problem::setFinalLocation(const DocumentRange& location) { - setRange(RangeInRevision::castFromSimpleRange(location)); d_func_dynamic()->url = location.document; } +IProblem::FinalLocationMode Problem::finalLocationMode() const +{ + return d_func()->finalLocationMode; +} + +void Problem::setFinalLocationMode(IProblem::FinalLocationMode mode) +{ + d_func_dynamic()->finalLocationMode = mode; +} + void Problem::clearDiagnostics() { m_diagnostics.clear(); diff --git a/shell/problem.h b/shell/problem.h --- a/shell/problem.h +++ b/shell/problem.h @@ -68,6 +68,9 @@ DocumentRange finalLocation() const override; void setFinalLocation(const DocumentRange& location) override; + FinalLocationMode finalLocationMode() const override; + void setFinalLocationMode(FinalLocationMode mode) override; + QString description() const override; void setDescription(const QString& description) override; diff --git a/shell/problem.cpp b/shell/problem.cpp --- a/shell/problem.cpp +++ b/shell/problem.cpp @@ -27,6 +27,7 @@ DetectedProblemPrivate() : m_severity(KDevelop::IProblem::Error) , m_source(KDevelop::IProblem::Unknown) + , m_finalLocationMode(KDevelop::IProblem::Range) { } @@ -36,6 +37,7 @@ KDevelop::IProblem::Source m_source; KDevelop::DocumentRange m_range; QVector m_diagnostics; + KDevelop::IProblem::FinalLocationMode m_finalLocationMode; }; namespace KDevelop @@ -91,6 +93,17 @@ d->m_range = location; } + +IProblem::FinalLocationMode DetectedProblem::finalLocationMode() const +{ + return d->m_finalLocationMode; +} + +void DetectedProblem::setFinalLocationMode(IProblem::FinalLocationMode mode) +{ + d->m_finalLocationMode = mode; +} + QString DetectedProblem::description() const { return d->m_description;