/// <summary> /// Выполняет действия, необходимые для подготовки компиляции, выполняются в синхронном режиме /// </summary> public void PrepareForCompilation() { if (null == _cachedImports) { _cachedImports = AllImports.ToArray(); } }
/// <summary> /// Собирает все определения мержей из класса /// </summary> /// <returns></returns> private IEnumerable <IBSharpElement> GetAllElements() { lock (this){ if (null == _elementRegistry) { _elementRegistry = new Dictionary <string, IBSharpElement>(); IBSharpClass[] imports = AllImports.ToArray(); if (!Is(BSharpClassAttributes.Cycle)) { foreach (IBSharpClass c in imports) { if (!c.Is(BSharpClassAttributes.Cycle)) { IBSharpElement[] elements = null; try{ elements = c.AllElements.ToArray(); } catch { Thread.Sleep(1); elements = c.AllElements.ToArray(); } foreach (IBSharpElement edef in elements) { if (null != edef) { RegisterElement(edef); } } } } } foreach (IBSharpElement edef in SelfElements) { if (null != edef) { RegisterElement(edef); } } foreach (var registered in _elementRegistry.ToArray()) { if (!_elementRegistry.ContainsKey(registered.Value.TargetName)) { _elementRegistry[registered.Value.TargetName] = new BSharpElement { Implicit = true, Name = registered.Value.TargetName, TargetName = registered.Value.TargetName, Type = BSharpElementType.Define }; } } } if (AllImports.Any(_ => _.Source.Attr(BSharpSyntax.ExplicitClassMarker) == BSharpSyntax.ExplicitClassPropagateValue)) { foreach (var element in _elementRegistry.ToArray()) { if (element.Value.Implicit) { _elementRegistry.Remove(element.Key); } } } return(_elementRegistry.Values); } }