コード例 #1
0
        public void ValidateExternal(NamedTypeMetaInfo type, ITypeValidationProvider typeValidation, IDiagnosticReporter reporter)
        {
            var typeValidator = new FluentMemberValidator(TypeMetaSelection.Any(type), _conditionAnalyzer);

            typeValidation.ConfigureValidation(typeValidator);
            typeValidator.Validate(reporter);
        }
コード例 #2
0
        public TypeMetaSelection(NamedTypeMetaInfo type, IReadOnlyList <MemberMetaInfo> selectedMember)
        {
            var selectedHash = new HashSet <MemberMetaInfo>(selectedMember);

            Type              = type;
            SelectedMembers   = selectedMember;
            UnselectedMembers = type.Members.Where(x => !selectedHash.Contains(x)).ToList();
        }
コード例 #3
0
 private IReadOnlyDictionary <string, MemberMetaInfo> GetMemberNameDictionary(NamedTypeMetaInfo metaInfo)
 {
     if (_typeNameCache.TryGetValue(metaInfo, out var value))
     {
         return(value);
     }
     _typeNameCache.Add(metaInfo, metaInfo.Members.ToDictionary(x => x.Name));
     return(value);
 }
コード例 #4
0
 public SchemaInfoBuilder(string schemaName, NamedTypeMetaInfo sourceType, IOrderSelector orderSelector, IEnumerable <INamedTypeSymbol> targetTypes)
 {
     if (targetTypes is null || targetTypes.Count() == 0)
     {
         throw new ArgumentException("A schema must always have a target type to be built to");
     }
     SourceTypeInfo = sourceType;
     OrderSelector  = orderSelector;
     SchemaName     = schemaName;
     TargetTypes.AddRange(targetTypes);
 }
コード例 #5
0
        public override bool TryGetSchemaInfo(NamedTypeMetaInfo metaInfo, out SchemaInfo schema)
        {
            var attribute = metaInfo.GetAttributeInspector <BinaryFormatAttribute>();

            if (attribute is null)
            {
                schema = default;
                return(false);
            }

            var layoutOrder   = attribute.GetSingleValue(x => x.Layout) ?? GetConstructorOrder(attribute.Data) ?? LayoutOrder.Auto;
            var schemaBuilder = new SchemaInfoBuilder("BinaryFormat", metaInfo, new IndexOrderSelector(_reporter, layoutOrder), metaInfo.Symbol)
            {
                IsSealed         = attribute.GetSingleValue(x => x.Sealed) ?? false,
                NeverDeserialize = attribute.GetSingleValue(x => x.NeverDeserialize) ?? false
            };

            schemaBuilder.TargetNamespaces.Add("Default");
            schema = schemaBuilder.CreateSchemaInfo();
            return(true);
コード例 #6
0
 internal static Diagnostic SequentialCannotBePartial(NamedTypeMetaInfo typeInfo, bool isExplicit)
 => CreateDiagnostic(typeInfo.FirstLocation, typeInfo.Declarations.Select(x => x.Location), new object[] {
     isExplicit ? "explicitly defined" : "automatic - as no IndexAttribute is present",
     typeInfo.Symbol
 });
コード例 #7
0
 public static SchemaInfoBuilder CreateBuilder(string schemaName, NamedTypeMetaInfo type, IOrderSelector orderSelector, IEnumerable <INamedTypeSymbol> targetTypes) => new SchemaInfoBuilder(schemaName, type, orderSelector, targetTypes);
コード例 #8
0
 public static SchemaInfoBuilder CreateBuilder(string schemaName, NamedTypeMetaInfo type, IOrderSelector orderSelector, params INamedTypeSymbol[] targetTypes) => new SchemaInfoBuilder(schemaName, type, orderSelector, targetTypes);
コード例 #9
0
 public SchemaInfoBuilder(string schemaName, NamedTypeMetaInfo sourceType, IOrderSelector orderSelector, params INamedTypeSymbol[] targetTypes)
     : this(schemaName, sourceType, orderSelector, targetTypes.AsEnumerable())
 {
 }
コード例 #10
0
 public BinaryTypeCompositeBuilder(NamedTypeMetaInfo type, ISourceAddition sourceAddition, ITypeSymbolProvider symbolProvider)
 {
 }
コード例 #11
0
 public static TypeMetaSelection Any(NamedTypeMetaInfo type) => new TypeMetaSelection(type, type.Members, Array.Empty <MemberMetaInfo>());
コード例 #12
0
 private TypeMetaSelection(NamedTypeMetaInfo type, IReadOnlyList <MemberMetaInfo> selectedMembers, IReadOnlyList <MemberMetaInfo> unselectedMembers)
 {
     SelectedMembers   = selectedMembers;
     UnselectedMembers = unselectedMembers;
     Type = type;
 }
コード例 #13
0
 public abstract bool TryGetSchemaInfo(NamedTypeMetaInfo metaInfo, out SchemaInfo schema);
 internal static Diagnostic NoMember(NamedTypeMetaInfo typeInfo) => CreateDiagnostic(typeInfo.FirstLocation, new object[] { typeInfo.Symbol });