using System;
using System.Collections.Generic;
using Mono.Cecil;
using Mono.Cecil.Cil;
namespace StardewModdingAPI.Framework.ModLoading
{
/// Performs predefined logic for detected CIL instructions.
internal interface IInstructionHandler
{
/*********
** Accessors
*********/
/// A brief noun phrase indicating what the handler matches, used if is empty.
string DefaultPhrase { get; }
/// The rewrite flags raised for the current module.
ISet Flags { get; }
/// The brief noun phrases indicating what the handler matched for the current module.
ISet Phrases { get; }
/*********
** Methods
*********/
/// Rewrite a module definition if needed.
/// The assembly module.
/// Returns whether the module was changed.
bool Handle(ModuleDefinition module);
/// Rewrite a type reference if needed.
/// The assembly module containing the instruction.
/// The type definition to handle.
/// Replaces the type reference with a new one.
/// Returns whether the type was changed.
bool Handle(ModuleDefinition module, TypeReference type, Action replaceWith);
/// Rewrite a CIL instruction reference if needed.
/// The assembly module containing the instruction.
/// The CIL processor.
/// The CIL instruction to handle.
/// Returns whether the instruction was changed.
bool Handle(ModuleDefinition module, ILProcessor cil, Instruction instruction);
}
}