예제 #1
0
 private void CreateEmbeddedAttributeIfNeeded(
     ref SynthesizedEmbeddedAttributeSymbol symbol,
     DiagnosticBag diagnostics,
     AttributeDescription description)
 {
     if (symbol is null)
     {
         AddDiagnosticsForExistingAttribute(description, diagnostics);
         symbol = new SynthesizedEmbeddedAttributeSymbol(description, _sourceAssembly.DeclaringCompilation, diagnostics);
     }
 }
예제 #2
0
        private void CreateEmbeddedAttributeIfNeeded(ref SynthesizedEmbeddedAttributeSymbol symbol, DiagnosticBag diagnostics, AttributeDescription description)
        {
            if ((object)symbol == null)
            {
                var attributeMetadataName = MetadataTypeName.FromFullName(description.FullName);
                var userDefinedAttribute  = _sourceAssembly.SourceModule.LookupTopLevelMetadataType(ref attributeMetadataName);
                Debug.Assert((object)userDefinedAttribute.ContainingModule == _sourceAssembly.SourceModule);

                if (!(userDefinedAttribute is MissingMetadataTypeSymbol))
                {
                    diagnostics.Add(ErrorCode.ERR_TypeReserved, userDefinedAttribute.Locations[0], description.FullName);
                }

                symbol = new SynthesizedEmbeddedAttributeSymbol(description, _sourceAssembly.DeclaringCompilation, diagnostics);
            }
        }
예제 #3
0
        private void CreateEmbeddedAttributeIfNeeded(
            ref SynthesizedEmbeddedAttributeSymbol symbol,
            DiagnosticBag diagnostics,
            AttributeDescription description,
            Func <CSharpCompilation, NamedTypeSymbol, DiagnosticBag, ImmutableArray <MethodSymbol> > getAdditionalConstructors = null)
        {
            if ((object)symbol == null)
            {
                EnsureEmbeddedAttributeExists();

                var attributeMetadataName = MetadataTypeName.FromFullName(description.FullName);
                var userDefinedAttribute  = _sourceAssembly.SourceModule.LookupTopLevelMetadataType(ref attributeMetadataName);
                Debug.Assert((object)userDefinedAttribute.ContainingModule == _sourceAssembly.SourceModule);

                if (!(userDefinedAttribute is MissingMetadataTypeSymbol))
                {
                    diagnostics.Add(ErrorCode.ERR_TypeReserved, userDefinedAttribute.Locations[0], description.FullName);
                }

                symbol = new SynthesizedEmbeddedAttributeSymbol(description, _sourceAssembly.DeclaringCompilation, getAdditionalConstructors, diagnostics);
            }
        }