internal InContainerBinder( NamespaceOrTypeSymbol container, Binder next, CSharpSyntaxNode declarationSyntax, bool inUsing ) : base(next) { Debug.Assert((object)container != null); Debug.Assert(declarationSyntax != null); _container = container; _computeImports = basesBeingResolved => Imports.FromSyntax(declarationSyntax, this, basesBeingResolved, inUsing); if (!inUsing) { if (declarationSyntax.Kind() == SyntaxKind.CompilationUnit) { var compilationUnit = (CompilationUnitSyntax)declarationSyntax; _usingsSyntax = compilationUnit.Usings; } else if (declarationSyntax.Kind() == SyntaxKind.NamespaceDeclaration) { var namespaceDecl = (NamespaceDeclarationSyntax)declarationSyntax; _usingsSyntax = namespaceDecl.Usings; } } }
/// <summary> /// Creates a binder for a container with imports (usings and extern aliases) that can be /// retrieved from <paramref name="declarationSyntax"/>. /// </summary> internal InContainerBinder(NamespaceOrTypeSymbol container, Binder next, CSharpSyntaxNode declarationSyntax, bool inUsing) : base(next) { Debug.Assert((object)container != null); Debug.Assert(declarationSyntax != null); _container = container; _computeImports = basesBeingResolved => Imports.FromSyntax(declarationSyntax, this, basesBeingResolved, inUsing); }
private Imports GetImports(ConsList <Symbol> basesBeingResolved) { if (_imports == null) { Interlocked.CompareExchange(ref _imports, Imports.FromSyntax(_declarationSyntax, this, basesBeingResolved, _inUsing), null); } return(_imports); }