private AttributeCollection(ITypeSymbolProvider provider, ISymbol sourceSymbol) { _symbolProvider = provider; _symbol = sourceSymbol; _attributes = sourceSymbol.GetAttributes(); (AttributeLocations, Attributes) = GetAttributeLocations(); }
public NamedTypeSource(INamedTypeSource?parent, INamedTypeSymbol symbol, ITypeSymbolProvider symbolProvider) : base(parent, symbol, symbolProvider) { _originalSymbol = symbol; TypeName = TypeName.FromType(_originalSymbol); Members = symbol.GetMembers().Select(memberSymbol => memberSymbol.CreateSource(symbolProvider, this)).ToList(); }
public MemberComposerSource(MemberMetaInfo layoutMember, GeneratingTypeName typeName, IEnumerable <IConditionResolverProvider> conditions, IEnumerable <IMemberDataFormatterProvider> formatters, ITypeSymbolProvider symbolProvider) { if (_member.ReturnType is null) { throw new ArgumentException("Invalid layout member (No Return Type)"); } _member = layoutMember; _typeName = typeName; _symbols = symbolProvider; // Watch out for order(? _conditions = conditions.SelectMany(x => x.GetResolvers(layoutMember, _throwCollection)).ToList(); _format = GetFormatResolver(); IMemberDataFormatter GetFormatResolver() { foreach (var formatter in formatters) { if (!formatter.ShouldFormat(layoutMember)) { continue; } return(formatter.GetFormatter(layoutMember, _componentCollection, _throwCollection)); } throw new ArgumentException($"The target member {layoutMember.Name} cannot be resolved by any of the provided {nameof(IMemberDataFormatterProvider)}"); } }
internal TypePartialMetaInfo(NamedTypeMetaInfo source, ITypeSymbolProvider analysis, SyntaxModelPair syntaxPair, Func <ISymbol, bool>?memberPredicate, CancellationToken ct) { var attributeListing = syntaxPair.Syntax.GetAttributes(source.Symbol); _attributeLookup = attributeListing.Locations; Full = source; Location = syntaxPair.Syntax.GetLocation(); Attributes = attributeListing.Lists; Members = GetUnderlyingMembers(); IReadOnlyList <MemberMetaInfo> GetUnderlyingMembers() { var members = new List <MemberMetaInfo>(); foreach (var member in syntaxPair.Syntax.Members) { var symbol = syntaxPair.Model.GetDeclaredSymbol(member, ct); // Filter out null symbols and symbols that are not enlisted for interest if (symbol is null || !(memberPredicate?.Invoke(symbol) ?? true)) { continue; } // We don't support partial method, so we ignore symbols that are not impl. // In future versions when we have use cases that can benefit from partial, then we should consider adding Attributes to the DefinitionPart // Adding to the commented "DeclaringAttribute" part if (symbol is IMethodSymbol method && method.PartialImplementationPart != null && method.PartialDefinitionPart is null && member.Modifiers.Any(SyntaxKind.PartialKeyword)) { continue; } members.Add(new MemberMetaInfo(this, member, analysis, symbol)); } return(members); } }
public static AttributeCollection?GetAttributeLocations(ITypeSymbolProvider provider, ISymbol sourceSymbol) { if (!sourceSymbol.Locations.All(x => x.IsInSource)) { return(null); } return(new AttributeCollection(provider, sourceSymbol)); }
public static AttributeCollection?CreateCollection(ITypeSymbolProvider provider, TypeSymbolLocatorCache locatorCache, ISymbol sourceSymbol) { if (!sourceSymbol.Locations.All(x => x.IsInSource)) { return(null); } return(new AttributeCollection(provider, locatorCache, sourceSymbol)); }
public SourcebergHostBuilderBase(ITypeSymbolProvider symbolProvider, ISourceAddition sourceAddition, IDiagnosticReporter <THostBuilder> diagnosticReporter) { _source = sourceAddition; _reporter = diagnosticReporter; SymbolProvider = symbolProvider; Resolvable = symbolProvider.Source.GetAssemblySymbol(typeof(SourcebergAnalyzerAttribute).Assembly) is not null; }
private AttributeCollection(ITypeSymbolProvider symbolProvider, TypeSymbolLocatorCache locatorCache, ISymbol sourceSymbol) { var compilation = (sourceSymbol.ContainingAssembly as ISourceAssemblySymbol)?.Compilation ?? symbolProvider.Source.DeclaringCompilation; _symbolLocator = locatorCache.GetLocator(compilation); ContainingSymbol = sourceSymbol; _attributes = sourceSymbol.GetAttributes(); (AttributeLocations, Attributes) = GetAttributeLocations(); }
public MemberComposerFactory(IEnumerable <IConditionResolverProvider> conditions, IEnumerable <IMemberDataFormatterProvider> formatters, ISourceAddition sourceAddition, ITypeSymbolProvider symbolProvider) { _conditions = conditions; _formatters = formatters; _sourceAddition = sourceAddition; _symbolProvider = symbolProvider; }
public static ReturnTypeMetaInfo?FromMember(ITypeSymbolProvider analysis, ISymbol memberSymbol) { var returnType = (memberSymbol as IFieldSymbol)?.Type ?? (memberSymbol as IMethodSymbol)?.ReturnType ?? (memberSymbol as IPropertySymbol)?.Type ?? (memberSymbol as IEventSymbol)?.Type; if (returnType is null) { return(null); } return(new ReturnTypeMetaInfo(analysis, returnType)); }
public MemberComposerSourceProto(MemberMetaInfo layoutMember, GeneratingTypeName typeName, IEnumerable <IMemberComposingFeature> features, ITypeSymbolProvider symbolProvider) { if (_member.ReturnType is null) { throw new ArgumentException("Invalid layout member (No Return Type)"); } _member = layoutMember; _typeName = typeName; _symbols = symbolProvider; _features = features.Where(x => x.ShouldFormat(layoutMember)).Select(x => x.GetComposingMethods(layoutMember, _componentCollection, _throwCollection)).ToList(); }
internal NamedTypeMetaInfo(ITypeSymbolProvider analysis, INamedTypeSymbol symbol, IEnumerable <SyntaxModelPair> syntax, Func <ISymbol, bool>?memberPredicate, CancellationToken ct) { _analysis = analysis; Symbol = symbol; IsPartial = syntax.Any(x => x.Syntax.Modifiers.Any(SyntaxKind.PartialKeyword)); FirstLocation = syntax.First().Syntax.GetLocation(); Attributes = Declarations.SelectMany(x => x.Attributes).ToList(); Declarations = syntax.Select(x => new TypePartialMetaInfo(this, analysis, x, memberPredicate, ct)).ToList(); Members = Declarations.SelectMany(x => x.Members).ToList(); }
private NamedTypeMetaInfo(NamedTypeMetaInfo source, INamedTypeSymbol newSymbol) { _analysis = source._analysis; Symbol = newSymbol; IsPartial = source.IsPartial; FirstLocation = source.FirstLocation; Attributes = source.Attributes; Declarations = source.Declarations.Select(x => new TypePartialMetaInfo(this, x, newSymbol)).ToList(); Members = Declarations.SelectMany(x => x.Members).ToList(); GenericDefinition = source; }
public SourcebergGeneratorHostBuilder(ITypeSymbolProvider symbolProvider, ISourceAddition sourceAddition, IDiagnosticReporter <SourcebergGeneratorHostBuilder> diagnosticReporter) : base(symbolProvider, sourceAddition, diagnosticReporter) { }
public BinaryTypeCompositeBuilder(NamedTypeMetaInfo type, ISourceAddition sourceAddition, ITypeSymbolProvider symbolProvider) { }
public SourceCodeAnalysis(ITypeSymbolProvider provider, ICompilationInfo compilationInfo, ICompilationLifetime lifetime) { _provider = provider; _compilationInfo = compilationInfo; _lifetime = lifetime; }
public TypeComposerBuilder(MemberComposerFactory memberFactory, ISourceAddition sourceAddition, ITypeSymbolProvider symbolProvider) { _memberFactory = memberFactory; _sourceAddition = sourceAddition; _symbolSource = symbolProvider; }
public static ITypeMemberSource CreateSource(this ISymbol symbol, ITypeSymbolProvider symbolProvider, INamedTypeSource?parent) => symbol switch {
public ReturnTypeMetaInfo(ITypeSymbolProvider analysis, ITypeSymbol symbol) { _provider = analysis; Symbol = symbol; }
public AttributeLayoutProvider(ITypeSymbolProvider symbolProvider, TypeSymbolLocatorCache locatorCache) { _symbolProvider = symbolProvider; _locatorCache = locatorCache; }
public TypeMemberSource(INamedTypeSource?containingType, ISymbol memberSymbol, ITypeSymbolProvider symbolProvider) { ContainingType = containingType; OriginalSymbol = memberSymbol; ReturnValue = ReturnValueInfo.FromMember(memberSymbol); Attributes = AttributeCollection.GetAttributeLocations(symbolProvider, memberSymbol); }