/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/OneScript.Core/Contexts/PredefinedInterfaceResolver.cs
81 строка
3 KB
EvilBeaver
Неиспользуемые импорты
17 мар 2025, 21:30
17 мар 2025, 21:30
caf7f7e
Код
Авторство
О чём код?
/*---------------------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v.2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using System.Collections.Generic; using System.Linq; using OneScript.Commons; using OneScript.Execution; namespace OneScript.Contexts { // ReSharper disable once ClassNeverInstantiated.Global public class PredefinedInterfaceResolver { private readonly ISet<CheckerData> _checkers; private class CheckerData : PredefinedInterfaceRegistration { public IPredefinedInterfaceChecker Checker { get; } public CheckerData( IPredefinedInterfaceChecker checker, PredefinedInterfaceRegistration source) : base(source.Location, source.Annotation, source.MethodName) { Checker = checker; } } public PredefinedInterfaceResolver(IEnumerable<IPredefinedInterfaceChecker> checkers) { _checkers = MapCheckers(checkers); } public void Resolve(IExecutableModule module) { var triggeredCheckers = new HashSet<IPredefinedInterfaceChecker>(); _checkers .Where(check => !triggeredCheckers.Contains(check.Checker)) .Where(check => check.Location == MarkerLocation.ModuleAnnotation && module.ModuleAttributes.Any(attr => check.Annotation.HasName(attr.Name))) .ForEach(check => { triggeredCheckers.Add(check.Checker); check.Checker.Validate(module); }); foreach (var methodInfo in module.Methods.Where(m => m is BslScriptMethodInfo).Cast<BslScriptMethodInfo>()) { _checkers .Where(check => !triggeredCheckers.Contains(check.Checker)) .Where(check => check.Location == MarkerLocation.SpecificMethodAnnotation && check.MethodName.HasName(methodInfo.Name) && methodInfo.HasBslAnnotation(check.Annotation)) .ForEach(check => { triggeredCheckers.Add(check.Checker); check.Checker.Validate(module); }); } } private static ISet<CheckerData> MapCheckers(IEnumerable<IPredefinedInterfaceChecker> checkers) { var result = new HashSet<CheckerData>(); foreach (var sourceCheck in checkers) { sourceCheck.GetRegistrations().ForEach(x => result.Add(new CheckerData(sourceCheck, x))); } return result; } } }