Esempio n. 1
0
 /// <summary>
 ///     Выполняет действия, необходимые для подготовки компиляции, выполняются в синхронном режиме
 /// </summary>
 public void PrepareForCompilation()
 {
     if (null == _cachedImports)
     {
         _cachedImports = AllImports.ToArray();
     }
 }
Esempio n. 2
0
        /// <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);
            }
        }