diff options
author | Greg Munn <gregm@microsoft.com> | 2019-06-06 21:20:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-06 21:20:25 +0300 |
commit | ce5186a0ea318fe6d479cc801c9fe5be944e2aab (patch) | |
tree | 5c0387050666ed6a1ca169a0bbdda91a6d2fe18a /main/src/addins | |
parent | 94c4abe5f9ec51b656f15b27806fe77c6a5a10ac (diff) | |
parent | be6983fa1ea90c82333bebad090bf3858634b086 (diff) |
Merge pull request #7512 from mono/bug802073
Catch exception from having a bad LangVersion setting in .csproj
Diffstat (limited to 'main/src/addins')
3 files changed, 64 insertions, 21 deletions
diff --git a/main/src/addins/CSharpBinding/Gui/MonoDevelop.CSharp.Project.CompilerOptionsPanelWidget.cs b/main/src/addins/CSharpBinding/Gui/MonoDevelop.CSharp.Project.CompilerOptionsPanelWidget.cs index 232893c387..15aaf60a49 100644 --- a/main/src/addins/CSharpBinding/Gui/MonoDevelop.CSharp.Project.CompilerOptionsPanelWidget.cs +++ b/main/src/addins/CSharpBinding/Gui/MonoDevelop.CSharp.Project.CompilerOptionsPanelWidget.cs @@ -1,5 +1,7 @@ // This file has been generated by the GUI designer. Do not modify. +using MonoDevelop.Ide.Gui; + namespace MonoDevelop.CSharp.Project { partial class CompilerOptionsPanelWidget @@ -47,6 +49,8 @@ namespace MonoDevelop.CSharp.Project private global::Gtk.VBox vbox3; private global::Gtk.Table table2; + + private MonoDevelop.Components.ImageView langVersionWarningIcon; private global::Gtk.Label label2; @@ -254,14 +258,21 @@ namespace MonoDevelop.CSharp.Project this.table2.RowSpacing = ((uint)(6)); this.table2.ColumnSpacing = ((uint)(6)); // Container child table2.Gtk.Table+TableChild + this.langVersionWarningIcon = new MonoDevelop.Components.ImageView (Stock.Warning, Gtk.IconSize.Menu); + this.langVersionWarningIcon.Visible = false; + var langVersionHbox = new global::Gtk.HBox (false, 0); + langVersionHbox.Name = "langVersionHbox"; + langVersionHbox.PackStart (this.langVersionWarningIcon, false, false, 0); this.label2 = new global::Gtk.Label (); this.label2.Name = "label2"; this.label2.Xalign = 0F; this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("C# Language Version:"); - this.table2.Add (this.label2); - global::Gtk.Table.TableChild w19 = ((global::Gtk.Table.TableChild)(this.table2 [this.label2])); + langVersionHbox.PackStart (this.label2, false, false, 6); + this.table2.Add (langVersionHbox); + global::Gtk.Table.TableChild w19 = ((global::Gtk.Table.TableChild)(this.table2 [langVersionHbox])); w19.XOptions = ((global::Gtk.AttachOptions)(4)); w19.YOptions = ((global::Gtk.AttachOptions)(4)); + w19.XPadding = 6; // Container child table2.Gtk.Table+TableChild this.langVerCombo = global::Gtk.ComboBox.NewText (); this.langVerCombo.Name = "langVerCombo"; diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CSharpCompilerParameters.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CSharpCompilerParameters.cs index 9d30f7a21c..ef73cbd84e 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CSharpCompilerParameters.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CSharpCompilerParameters.cs @@ -227,9 +227,11 @@ namespace MonoDevelop.CSharp.Project return val; } set { - if (LangVersion == value) { - return; - } + try { + if (LangVersion == value) { + return; + } + } catch (Exception) { } langVersion = LanguageVersionToString (value); NotifyChange (); diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CompilerOptionsPanelWidget.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CompilerOptionsPanelWidget.cs index 396dc158c6..99525f77db 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CompilerOptionsPanelWidget.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CompilerOptionsPanelWidget.cs @@ -29,6 +29,8 @@ using System; using System.Linq; +using System.Collections.Generic; +using System.Text.RegularExpressions; using Gtk; using MonoDevelop.Components; @@ -55,7 +57,7 @@ namespace MonoDevelop.CSharp.Project LanguageVersion.LatestMajor, LanguageVersion.Preview }; - + public CompilerOptionsPanelWidget (DotNetProject project) { this.Build(); @@ -98,26 +100,51 @@ namespace MonoDevelop.CSharp.Project iconEntry.DefaultPath = project.BaseDirectory; allowUnsafeCodeCheckButton.Active = compilerParameters.UnsafeCode; noStdLibCheckButton.Active = compilerParameters.NoStdLib; + langVersionWarningIcon.Visible = false; - var langVerStore = new ListStore (typeof (string), typeof(LanguageVersion)); - foreach (var (text, version) in CSharpLanguageVersionHelper.GetKnownLanguageVersions ()) { - if (unsupportedLanguageVersions.Contains (version) && compilerParameters.LangVersion != version) { - // Mono's MSBuild does not currently support C# 8. + var langVerStore = new ListStore (typeof (string), typeof(LanguageVersion), typeof (bool)); + var langVersions = CSharpLanguageVersionHelper.GetKnownLanguageVersions (); + string badVersion = null; + LanguageVersion? langVersion = null; + + try { + langVersion = compilerParameters.LangVersion; + } catch (Exception) { + badVersion = configuration.Properties.GetProperty ("LangVersion").Value; + } + + foreach (var (text, version) in langVersions) { + if (unsupportedLanguageVersions.Contains (version)) { + if (langVersion == version) { + if (badVersion == null) + badVersion = text; + } else { + // Otherwise if it's an unsupported language but it's not the current project's + // version then it must be an unsupported version of Mono. Let's not add that to + // the list store. + } } else { - langVerStore.AppendValues (text, version); + langVerStore.AppendValues (text, version, false); } } + langVerCombo.Model = langVerStore; - TreeIter iter; - if (langVerStore.GetIterFirst (out iter)) { - do { - var val = (LanguageVersion)(int)langVerStore.GetValue (iter, 1); - if (val == compilerParameters.LangVersion) { - langVerCombo.SetActiveIter (iter); - break; - } - } while (langVerStore.IterNext (ref iter)); + if (badVersion != null) { + var badIter = langVerStore.AppendValues (GettextCatalog.GetString ("{0} (Unknown Version)", badVersion), LanguageVersion.Default, true); + langVerCombo.SetActiveIter (badIter); + langVersionWarningIcon.Visible = true; + } else { + TreeIter iter; + if (langVerStore.GetIterFirst (out iter)) { + do { + var val = (LanguageVersion)(int)langVerStore.GetValue (iter, 1); + if (val == compilerParameters.LangVersion) { + langVerCombo.SetActiveIter (iter); + break; + } + } while (langVerStore.IterNext (ref iter)); + } } SetupAccessibility (); @@ -175,11 +202,13 @@ namespace MonoDevelop.CSharp.Project public void Store (ItemConfigurationCollection<ItemConfiguration> configs) { int codePage; + bool isBadVersion = false; var langVersion = LanguageVersion.Default; TreeIter iter; if (langVerCombo.GetActiveIter (out iter)) { langVersion = (LanguageVersion)langVerCombo.Model.GetValue (iter, 1); + isBadVersion = (bool)langVerCombo.Model.GetValue (iter, 2); } if (codepageEntry.Entry.Text.Length > 0) { @@ -218,7 +247,8 @@ namespace MonoDevelop.CSharp.Project CSharpCompilerParameters compilerParameters = (CSharpCompilerParameters) configuration.CompilationParameters; compilerParameters.UnsafeCode = allowUnsafeCodeCheckButton.Active; compilerParameters.NoStdLib = noStdLibCheckButton.Active; - compilerParameters.LangVersion = langVersion; + if (!isBadVersion) + compilerParameters.LangVersion = langVersion; } } |