示例#1
0
        public void ConcatCollidingExternAliases()
        {
            var comp = CreateCompilation(
                "extern alias A; extern alias B;",
                targetFramework: TargetFramework.Mscorlib40,
                references: new[]
            {
                SystemCoreRef.WithAliases(new[] { "A" }),
                SystemDataRef.WithAliases(new[] { "B" }),
            }
                );

            var tree   = comp.SyntaxTrees.Single();
            var binder = comp.GetBinderFactory(tree)
                         .GetImportsBinder((CSharpSyntaxNode)tree.GetRoot(), inUsing: false);
            var scratchImports       = binder.GetImports(basesBeingResolved: null);
            var scratchExternAliases = scratchImports.ExternAliases;

            Assert.Equal(2, scratchExternAliases.Length);

            var externAlias1 = scratchExternAliases[0];
            var externAlias2 = new AliasAndExternAliasDirective(
                AliasSymbol.CreateCustomDebugInfoAlias(
                    scratchExternAliases[1].Alias.Target,
                    externAlias1.ExternAliasDirective.Identifier,
                    binder
                    ),
                externAlias1.ExternAliasDirective
                );

            var imports1 = Imports.FromCustomDebugInfo(
                comp,
                ImmutableDictionary <string, AliasAndUsingDirective> .Empty,
                ImmutableArray <NamespaceOrTypeAndUsingDirective> .Empty,
                ImmutableArray.Create(externAlias1)
                );

            var imports2 = Imports.FromCustomDebugInfo(
                comp,
                ImmutableDictionary <string, AliasAndUsingDirective> .Empty,
                ImmutableArray <NamespaceOrTypeAndUsingDirective> .Empty,
                ImmutableArray.Create(externAlias2)
                );

            var concat1 = imports1.Concat(imports2);

            Assert.Equal(externAlias2.Alias.Target, concat1.ExternAliases.Single().Alias.Target);

            var concat2 = imports2.Concat(imports1);

            Assert.Equal(externAlias1.Alias.Target, concat2.ExternAliases.Single().Alias.Target);
        }