Пример #1
0
                internal override OptionKey Wrap(RoslynPreferences preferences)
                {
                    var optionKey = new OptionKey(this);

                    preferences.Wrap <T> (optionKey);
                    return(optionKey);
                }
Пример #2
0
        internal MonoDevelopGlobalOptionPersister(IGlobalOptionService globalOptionService, RoslynPreferences preferences)
        {
            Contract.ThrowIfNull(globalOptionService);
            this.globalOptionService = globalOptionService;

            this.preferences = preferences ?? IdeApp.Preferences.Roslyn;

            PropertyService.PropertyChanged += OnPropertyChanged;
        }
Пример #3
0
        internal (RoslynPreferences, MonoDevelopGlobalOptionPersister, MockOptionService) SetupOptions()
        {
            var preferences    = new RoslynPreferences();
            var optionsService = new MockOptionService();
            var persister      = new MonoDevelopGlobalOptionPersister(optionsService, preferences);

            optionsService.RegisterPersister(persister);

            return(preferences, persister, optionsService);
        }
Пример #4
0
        public void UnknownLanguageNameDoesNotCrash()
        {
            var preferences = new RoslynPreferences();

            Assert.IsNotNull(preferences.CSharp);
            Assert.AreSame(preferences.CSharp, preferences.For(LanguageNames.CSharp));

            var xaml = preferences.For("XAML");

            Assert.IsNotNull(xaml);
            Assert.AreSame(xaml, preferences.For("XAML"));
        }
Пример #5
0
 public ClosedFileDiagnosticProperty(ConfigurationProperty <bool?> underlying, string language, RoslynPreferences roslynPreferences)
 {
     this.underlying     = underlying;
     underlying.Changed += (sender, args) => {
         bool?newValue = underlying.Value;
         if (newValue.HasValue)
         {
             OnSetValue(newValue.Value);
         }
     };
     this.language          = language;
     this.roslynPreferences = roslynPreferences;
 }
Пример #6
0
        static object Deserialize(object value, Type optionType)
        {
            if (optionType.IsValueType)
            {
                // check if we have a nullable, then returning null is ok
                var isNullable = optionType.IsGenericType && optionType.GetGenericTypeDefinition() == typeof(Nullable <>);

                if (value == null)
                {
                    if (!isNullable)
                    {
                        throw new SerializationException();
                    }
                }
                else
                {
                    if (isNullable && optionType.GenericTypeArguments [0] == value.GetType())
                    {
                        optionType = value.GetType();
                    }
                }
            }

            if (optionType.IsEnum)
            {
                if (value != null && optionType.IsEnumDefined(value))
                {
                    return(Enum.ToObject(optionType, value));
                }
                throw new SerializationException();
            }

            if (RoslynPreferences.TryGetSerializationMethods <object> (optionType, out var serializer, out var deserializer))
            {
                if (value is string serializedValue)
                {
                    return(deserializer(serializedValue));
                }
            }

            if (value != null && optionType != value.GetType())
            {
                // We got something back different than we expected, so fail to deserialize
                throw new SerializationException();
            }

            return(value);
        }
Пример #7
0
            internal PerLanguagePreferences(string language, RoslynPreferences preferences)
            {
                this.language     = language;
                roslynPreferences = preferences;

                AutoFormattingOnCloseBrace = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.AutoFormattingOnCloseBrace, language),
                    language + ".AutoFormattingOnCloseBrace"
                    );

                AutoFormattingOnReturn = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.AutoFormattingOnReturn, language),
                    language + ".AutoFormattingOnReturn"
                    );

                AutoFormattingOnSemicolon = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.AutoFormattingOnSemicolon, language),
                    language + ".AutoFormattingOnSemicolon"
                    );
                AutoFormattingOnTyping = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.AutoFormattingOnTyping, language),
                    language + ".AutoFormattingOnTyping"
                    );

                FormatOnPaste = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.FormatOnPaste, language),
                    language + ".FormatOnPaste"
                    );

                PlaceSystemNamespaceFirst = preferences.Wrap <bool> (
                    new OptionKey(Microsoft.CodeAnalysis.Editing.GenerationOptions.PlaceSystemNamespaceFirst, language),
                    language + ".PlaceSystemNamespaceFirst"
                    );

                SeparateImportDirectiveGroups = preferences.Wrap <bool> (
                    new OptionKey(Microsoft.CodeAnalysis.Editing.GenerationOptions.SeparateImportDirectiveGroups, language),
                    language + ".SeparateImportDirectiveGroups"
                    );

                SuggestForTypesInNuGetPackages = preferences.Wrap(
                    new OptionKey(Microsoft.CodeAnalysis.SymbolSearch.SymbolSearchOptions.SuggestForTypesInNuGetPackages, language),
                    true
                    );

                SolutionCrawlerClosedFileDiagnostic = new ClosedFileDiagnosticProperty(preferences.Wrap <bool?> (
                                                                                           new OptionKey(ServiceFeatureOnOffOptions.ClosedFileDiagnostic, language)
                                                                                           ), language, roslynPreferences);
            }
Пример #8
0
            internal PerLanguagePreferences(string language, RoslynPreferences preferences)
            {
                PlaceSystemNamespaceFirst = preferences.Wrap <bool> (
                    new OptionKey(Microsoft.CodeAnalysis.Editing.GenerationOptions.PlaceSystemNamespaceFirst, language),
                    language + ".PlaceSystemNamespaceFirst"
                    );

                SeparateImportDirectiveGroups = preferences.Wrap <bool> (
                    new OptionKey(Microsoft.CodeAnalysis.Editing.GenerationOptions.SeparateImportDirectiveGroups, language),
                    language + ".SeparateImportDirectiveGroups"
                    );

                SuggestForTypesInNuGetPackages = preferences.Wrap(
                    new OptionKey(Microsoft.CodeAnalysis.SymbolSearch.SymbolSearchOptions.SuggestForTypesInNuGetPackages, language),
                    true
                    );
            }
Пример #9
0
        static object Deserialize(object value, Type optionType)
        {
            if (optionType.IsEnum && value != null && optionType.IsEnumDefined(value))
            {
                return(Enum.ToObject(optionType, value));
            }

            if (RoslynPreferences.TryGetSerializationMethods <object> (optionType, out var serializer, out var deserializer) && value is string serializedValue)
            {
                return(deserializer(serializedValue));
            }

            if (optionType == typeof(bool))
            {
                // TypeScript used to store some booleans as integers. We now handle them properly for legacy sync scenarios.
                if (value is int intValue)
                {
                    return(intValue != 0);
                }

                if (value is long longValue)
                {
                    return(longValue != 0);
                }
            }

            if (optionType == typeof(bool?))
            {
                // code uses object to hold onto any value which will use boxing on value types.
                // see boxing on nullable types - https://msdn.microsoft.com/en-us/library/ms228597.aspx
                if (!(value is bool) && value != null)
                {
                    throw new SerializationException();
                }
            }
            else if (value != null && optionType != value.GetType())
            {
                // We got something back different than we expected, so fail to deserialize
                throw new SerializationException();
            }

            return(value);
        }
Пример #10
0
        public void TestRoslynPropertyMigration()
        {
            var preferences = new RoslynPreferences();

            const string mdKey = "TEST_ROSLYN_MIGRATION_KEY";

            foreach (var option in GetOptionKeys <bool> ())
            {
                PropertyService.Set(mdKey, true);
                var prop = preferences.Wrap(option, default(bool), mdKey);

                Assert.AreEqual(true, PropertyService.Get <bool> (option.GetPropertyName()));
                Assert.AreEqual(true, prop.Value);

                Assert.AreEqual(false, PropertyService.HasValue(mdKey));

                prop.Value = false;
                Assert.AreEqual(false, PropertyService.Get <bool> (option.GetPropertyName()));
                Assert.AreEqual(false, prop.Value);
            }
        }
Пример #11
0
 internal abstract OptionKey Wrap(RoslynPreferences preferences);
Пример #12
0
            internal PerLanguagePreferences(string language, RoslynPreferences preferences)
            {
                this.language     = language;
                roslynPreferences = preferences;

                AutoFormattingOnCloseBrace = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.AutoFormattingOnCloseBrace, language),
                    language + ".AutoFormattingOnCloseBrace"
                    );

                AutoFormattingOnReturn = preferences.Wrap <bool> (
                    new OptionKey(FormattingOptions.AutoFormattingOnReturn, language),
                    language + ".AutoFormattingOnReturn"
                    );

                AutoFormattingOnSemicolon = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.AutoFormattingOnSemicolon, language),
                    language + ".AutoFormattingOnSemicolon"
                    );
                AutoFormattingOnTyping = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.AutoFormattingOnTyping, language),
                    language + ".AutoFormattingOnTyping"
                    );

                FormatOnPaste = preferences.Wrap <bool> (
                    new OptionKey(FeatureOnOffOptions.FormatOnPaste, language),
                    language + ".FormatOnPaste"
                    );

                PlaceSystemNamespaceFirst = preferences.Wrap <bool> (
                    new OptionKey(Microsoft.CodeAnalysis.Editing.GenerationOptions.PlaceSystemNamespaceFirst, language),
                    language + ".PlaceSystemNamespaceFirst"
                    );

                SeparateImportDirectiveGroups = preferences.Wrap <bool> (
                    new OptionKey(Microsoft.CodeAnalysis.Editing.GenerationOptions.SeparateImportDirectiveGroups, language),
                    language + ".SeparateImportDirectiveGroups"
                    );

                ShowCompletionItemFilters = preferences.Wrap <bool> (
                    new OptionKey(CompletionOptions.ShowCompletionItemFilters, language),
                    language + ".ShowCompletionItemFilters"
                    );

                ShowItemsFromUnimportedNamespaces = preferences.Wrap <bool?> (
                    new OptionKey(CompletionOptions.ShowItemsFromUnimportedNamespaces, language),
                    IdeApp.Preferences.AddImportedItemsToCompletionList.Value,
                    language + ".ShowItemsFromUnimportedNamespaces"
                    );

                SuggestForTypesInNuGetPackages = preferences.Wrap(
                    new OptionKey(Microsoft.CodeAnalysis.SymbolSearch.SymbolSearchOptions.SuggestForTypesInNuGetPackages, language),
                    true
                    );

                SolutionCrawlerClosedFileDiagnostic = new ClosedFileDiagnosticProperty(preferences.Wrap <bool?> (
                                                                                           new OptionKey(ServiceFeatureOnOffOptions.ClosedFileDiagnostic, language)
                                                                                           ), language, roslynPreferences);

                TriggerOnDeletion = preferences.Wrap <bool?> (
                    new OptionKey(CompletionOptions.TriggerOnDeletion, language),
                    language + ".TriggerOnDeletion"
                    );

                triggerOnTypingLetters = new Lazy <ConfigurationProperty <bool> > (() => preferences.Wrap <bool> (
                                                                                       new OptionKey(CompletionOptions.TriggerOnTypingLetters, language),
                                                                                       MonoDevelop.Ide.Editor.DefaultSourceEditorOptions.Instance.EnableAutoCodeCompletion,
                                                                                       language + ".TriggerOnTypingLetters"
                                                                                       ));
            }