Ho un set di tipo rewriters , ognuno modifica un determinato tipo di C # in un modo diverso. Gli esempi sono:
- Aggiungi l'attributo XYZ a ciascuna proprietà della classe
- Aggiungi una proprietà ID
- Aggiungi due proprietà e un metodo corrispondente
Come puoi vedere ci sono delle dipendenze implicite: 1 dovrebbe sicuramente essere eseguito dopo 2 e 3, altrimenti non tutte le proprietà avranno l'attributo XYZ alla fine.
Abbiamo reso esplicite queste dipendenze implicite utilizzando gli attributi sui tipi rewriters:
[Performs(typeof(IAttributeOnPropertiesCreation))]
[DependsOn(typeof(IPropertyCreation))]
public class SomeRewriter
{
// this one resembles example 1
}
[Performs(typeof(IPropertyCreation))]
// no DependsOn
public class SomeOtherRewriter
{
// resembles example 2
}
Ho bisogno di un algoritmo per ordinare una serie di tali riscrittori di tipo per dipendenza (se possibile, cioè se non ci sono dipendenze circolari).
Esiste un algoritmo di riferimento noto per questa attività? Forse anche un nome noto che posso usare per cercare vari algoritmi?
Nota a margine: conosco il set completo di possibili tipi Performs / DependsOn. Tuttavia, potrebbero esserci dichiarazioni DependsOn () per le quali nessuna, una singola o anche più riscrittori ha un'istruzione Performs () corrispondente. A loro volta ci sono anche dichiarazioni Performs () dalle quali nessuno dipende.