Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Munn <gregm@microsoft.com>2019-06-06 21:20:25 +0300
committerGitHub <noreply@github.com>2019-06-06 21:20:25 +0300
commitce5186a0ea318fe6d479cc801c9fe5be944e2aab (patch)
tree5c0387050666ed6a1ca169a0bbdda91a6d2fe18a /main/src/addins
parent94c4abe5f9ec51b656f15b27806fe77c6a5a10ac (diff)
parentbe6983fa1ea90c82333bebad090bf3858634b086 (diff)
Merge pull request #7512 from mono/bug802073
Catch exception from having a bad LangVersion setting in .csproj
Diffstat (limited to 'main/src/addins')
-rw-r--r--main/src/addins/CSharpBinding/Gui/MonoDevelop.CSharp.Project.CompilerOptionsPanelWidget.cs15
-rw-r--r--main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CSharpCompilerParameters.cs8
-rw-r--r--main/src/addins/CSharpBinding/MonoDevelop.CSharp.Project/CompilerOptionsPanelWidget.cs62
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;
}
}