#pragma once
#include <tools/solidityUpgrade/UpgradeChange.h>
#include <liblangutil/ErrorReporter.h>
#include <liblangutil/CharStreamProvider.h>
#include <libsolidity/ast/ASTVisitor.h>
#include <libsolidity/analysis/OverrideChecker.h>
#include <regex>
namespace solidity::tools
{
class Upgrade
{
public:
Upgrade(
langutil::CharStreamProvider const& _charStreamProvider,
std::vector<UpgradeChange>& _changes
): m_changes(_changes), m_charStreamProvider(_charStreamProvider) {}
protected:
std::vector<UpgradeChange>& m_changes;
langutil::CharStreamProvider const& m_charStreamProvider;
};
class AnalysisUpgrade: public Upgrade, public frontend::ASTConstVisitor
{
public:
AnalysisUpgrade(
langutil::CharStreamProvider const& _charStreamProvider,
std::vector<UpgradeChange>& _changes
):
Upgrade(_charStreamProvider, _changes),
m_errorReporter(m_errors),
m_overrideChecker(m_errorReporter)
{}
void analyze(frontend::SourceUnit const&) {}
protected:
langutil::ErrorList m_errors;
langutil::ErrorReporter m_errorReporter;
frontend::OverrideChecker m_overrideChecker;
};
class UpgradeSuite
{
public:
void analyze(frontend::SourceUnit const& _sourceUnit);
void reset() { m_changes.clear(); }
std::vector<UpgradeChange>& changes() { return m_changes; }
std::vector<UpgradeChange> const& changes() const { return m_changes; }
protected:
std::vector<UpgradeChange> m_changes;
};
}