internal override OptionKey Wrap(RoslynPreferences preferences) { var optionKey = new OptionKey(this); preferences.Wrap <T> (optionKey); return(optionKey); }
internal MonoDevelopGlobalOptionPersister(IGlobalOptionService globalOptionService, RoslynPreferences preferences) { Contract.ThrowIfNull(globalOptionService); this.globalOptionService = globalOptionService; this.preferences = preferences ?? IdeApp.Preferences.Roslyn; PropertyService.PropertyChanged += OnPropertyChanged; }
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); }
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")); }
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; }
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); }
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); }
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 ); }
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); }
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); } }
internal abstract OptionKey Wrap(RoslynPreferences preferences);
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" )); }