Пример #1
0
        public override void InitializeQualifierSymbol(BoundQualifier qualifier)
        {
            var length = qualifier.Identifiers.Length;

            if (length == 1)
            {
                qualifier.InitializeValues(qualifier.Identifiers, ImmutableArray.Create(this.Value));
            }
            else if (length > 1)
            {
                var values = ArrayBuilder <object> .GetInstance();

                for (int i = 0; i < length; i++)
                {
                    if (i < length - 1)
                    {
                        values.Add(null);
                    }
                    else
                    {
                        values.Add(this.Value);
                    }
                }
                qualifier.InitializeValues(qualifier.Identifiers, values.ToImmutableAndFree());
            }
            else
            {
                qualifier.InitializeValues(qualifier.Identifiers, ImmutableArray <object> .Empty);
            }
        }
Пример #2
0
        private void InitializeFullQualifierSymbol(BoundQualifier qualifier)
        {
            if (qualifier.IsInitialized())
            {
                return;
            }
            var result = ArrayBuilder <object> .GetInstance();

            var identifiers = qualifier.Identifiers;
            NamespaceOrTypeSymbol qualifierOpt = null;

            for (int i = 0; i < identifiers.Length; i++)
            {
                bool         last         = i == identifiers.Length - 1;
                var          types        = last ? _types : _nestingTypes;
                var          identifier   = identifiers[i];
                LookupResult lookupResult = LookupResult.GetInstance();
                this.LookupSymbolsSimpleName(lookupResult, new LookupConstraints(identifier.Name, identifier.MetadataName, types, qualifierOpt));
                var symbol = this.ResultSymbol(lookupResult, identifier.Name, identifier.MetadataName, identifier.Syntax, identifier.BoundTree.DiagnosticBag, false, out bool wasError, qualifierOpt, LookupOptions.Default);
                Debug.Assert(symbol != null);
                result.Add(symbol);
                lookupResult.Free();
                qualifierOpt = symbol as NamespaceOrTypeSymbol;
            }
            qualifier.InitializeValues(identifiers, result.ToImmutableAndFree());
        }
Пример #3
0
        private void InitializeFullQualifierSymbol(BoundQualifier qualifier)
        {
            if (qualifier.IsInitialized())
            {
                return;
            }
            var containerSymbol = this.GetParentDeclarationSymbol();
            var result          = ArrayBuilder <object> .GetInstance();

            var identifiers = qualifier.Identifiers;

            foreach (var identifier in identifiers)
            {
                var symbol = containerSymbol?.GetSourceMember(identifier.Syntax);
                Debug.Assert(symbol != null);
                result.Add(symbol);
                containerSymbol = symbol;
            }
            qualifier.InitializeValues(identifiers, result.ToImmutableAndFree());
        }