Пример #1
0
        public bool GenerateRuleState(
            Compilation compilation,
            ISymbol symbol,
            ImmutableArray <AttributeData> attributes,
            ImmutableArray <INamedTypeSymbol> serializableTypes,
            ImmutableArray <INamedTypeSymbol> embeddedSerializableTypes,
            ISymbol?parentSymbol,
            out string[] ruleArguments
            )
        {
            if (symbol is not INamedTypeSymbol namedTypeSymbol || !symbol.IsHashSet(compilation))
            {
                ruleArguments = null;
                return(false);
            }

            var setTypeSymbol = namedTypeSymbol.TypeArguments[0];

            var serializableSetType = SerializableMigrationRulesEngine.GenerateSerializableProperty(
                compilation,
                "SetEntry",
                setTypeSymbol,
                0,
                attributes,
                serializableTypes,
                embeddedSerializableTypes,
                parentSymbol,
                null
                );

            var extraOptions = "";

            if (attributes.Any(a => a.IsTidy(compilation)))
            {
                extraOptions += "@Tidy";
            }

            var length = serializableSetType.RuleArguments?.Length ?? 0;

            ruleArguments    = new string[length + 3];
            ruleArguments[0] = extraOptions;
            ruleArguments[1] = setTypeSymbol.ToDisplayString();
            ruleArguments[2] = serializableSetType.Rule;

            if (length > 0)
            {
                Array.Copy(serializableSetType.RuleArguments, 0, ruleArguments, 3, length);
            }

            return(true);
        }
Пример #2
0
        public bool GenerateRuleState(
            Compilation compilation,
            ISymbol symbol,
            ImmutableArray <AttributeData> attributes,
            ImmutableArray <INamedTypeSymbol> serializableTypes,
            ImmutableArray <INamedTypeSymbol> embeddedSerializableTypes,
            ISymbol?parentSymbol,
            out string[] ruleArguments
            )
        {
            if (symbol is not IArrayTypeSymbol arrayTypeSymbol)
            {
                ruleArguments = null;
                return(false);
            }

            var serializableArrayType = SerializableMigrationRulesEngine.GenerateSerializableProperty(
                compilation,
                "ArrayEntry",
                arrayTypeSymbol.ElementType,
                0,
                attributes,
                serializableTypes,
                embeddedSerializableTypes,
                parentSymbol,
                null
                );

            var length = serializableArrayType.RuleArguments?.Length ?? 0;

            ruleArguments    = new string[length + 2];
            ruleArguments[0] = arrayTypeSymbol.ElementType.ToDisplayString();
            ruleArguments[1] = serializableArrayType.Rule;
            if (length > 0)
            {
                Array.Copy(serializableArrayType.RuleArguments !, 0, ruleArguments, 2, length);
            }

            return(true);
        }
        public bool GenerateRuleState(
            Compilation compilation,
            ISymbol symbol,
            ImmutableArray <AttributeData> attributes,
            ImmutableArray <INamedTypeSymbol> serializableTypes,
            ImmutableArray <INamedTypeSymbol> embeddedSerializableTypes,
            ISymbol?parentSymbol,
            out string[] ruleArguments
            )
        {
            if (symbol is not INamedTypeSymbol namedTypeSymbol || !symbol.IsDictionary(compilation))
            {
                ruleArguments = null;
                return(false);
            }

            var keySymbolType = namedTypeSymbol.TypeArguments[0];

            var serializableKeyProperty = SerializableMigrationRulesEngine.GenerateSerializableProperty(
                compilation,
                "KeyEntry",
                keySymbolType,
                0,
                attributes,
                serializableTypes,
                embeddedSerializableTypes,
                parentSymbol,
                null
                );

            var valueSymbolType = namedTypeSymbol.TypeArguments[1];

            var serializableValueProperty = SerializableMigrationRulesEngine.GenerateSerializableProperty(
                compilation,
                "ValueEntry",
                valueSymbolType,
                0,
                attributes,
                serializableTypes,
                embeddedSerializableTypes,
                parentSymbol,
                null
                );

            var extraOptions = "";

            if (attributes.Any(a => a.IsTidy(compilation)))
            {
                extraOptions += "@Tidy";
            }

            var keyArgumentsLength   = serializableKeyProperty.RuleArguments?.Length ?? 0;
            var valueArgumentsLength = serializableValueProperty.RuleArguments?.Length ?? 0;
            var index = 0;

            ruleArguments          = new string[7 + keyArgumentsLength + valueArgumentsLength];
            ruleArguments[index++] = extraOptions;
            ruleArguments[index++] = keySymbolType.ToDisplayString();
            ruleArguments[index++] = serializableKeyProperty.Rule;
            ruleArguments[index++] = keyArgumentsLength.ToString();

            if (keyArgumentsLength > 0)
            {
                Array.Copy(serializableKeyProperty.RuleArguments !, 0, ruleArguments, index, keyArgumentsLength);
                index += keyArgumentsLength;
            }

            ruleArguments[index++] = valueSymbolType.ToDisplayString();
            ruleArguments[index++] = serializableValueProperty.Rule;
            ruleArguments[index++] = valueArgumentsLength.ToString();

            if (valueArgumentsLength > 0)
            {
                Array.Copy(serializableValueProperty.RuleArguments !, 0, ruleArguments, index, valueArgumentsLength);
            }

            return(true);
        }
        public bool GenerateRuleState(
            Compilation compilation,
            ISymbol symbol,
            ImmutableArray <AttributeData> attributes,
            ImmutableArray <INamedTypeSymbol> serializableTypes,
            ImmutableArray <INamedTypeSymbol> embeddedSerializableTypes,
            ISymbol?parentSymbol,
            out string[] ruleArguments
            )
        {
            if (symbol is not INamedTypeSymbol namedTypeSymbol || !symbol.IsKeyValuePair(compilation))
            {
                ruleArguments = null;
                return(false);
            }

            var keySymbolType = namedTypeSymbol.TypeArguments[0];

            var keySerializedProperty = SerializableMigrationRulesEngine.GenerateSerializableProperty(
                compilation,
                "key",
                keySymbolType,
                0,
                attributes,
                serializableTypes,
                embeddedSerializableTypes,
                parentSymbol,
                null
                );

            var valueSymbolType = namedTypeSymbol.TypeArguments[1];

            var valueSerializedProperty = SerializableMigrationRulesEngine.GenerateSerializableProperty(
                compilation,
                "value",
                valueSymbolType,
                1,
                attributes,
                serializableTypes,
                embeddedSerializableTypes,
                parentSymbol,
                null
                );

            var keyArgumentsLength   = keySerializedProperty.RuleArguments?.Length ?? 0;
            var valueArgumentsLength = valueSerializedProperty.RuleArguments?.Length ?? 0;
            var index = 0;

            // Key
            ruleArguments          = new string[6 + keyArgumentsLength + valueArgumentsLength];
            ruleArguments[index++] = ""; // Extra options
            ruleArguments[index++] = keySymbolType.ToDisplayString();
            ruleArguments[index++] = keySerializedProperty.Rule;
            ruleArguments[index++] = keyArgumentsLength.ToString();
            if (keyArgumentsLength > 0)
            {
                Array.Copy(keySerializedProperty.RuleArguments !, 0, ruleArguments, index, keyArgumentsLength);
                index += keyArgumentsLength;
            }

            // Value
            ruleArguments[index++] = valueSymbolType.ToDisplayString();
            ruleArguments[index++] = valueSerializedProperty.Rule;

            if (valueArgumentsLength > 0)
            {
                Array.Copy(valueSerializedProperty.RuleArguments !, 0, ruleArguments, index, valueArgumentsLength);
            }

            return(true);
        }