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:
Diffstat (limited to 'main/src/addins/CSharpBinding/MonoDevelop.CSharp.Parser/TypeSystemProvider.cs')
-rw-r--r--main/src/addins/CSharpBinding/MonoDevelop.CSharp.Parser/TypeSystemProvider.cs456
1 files changed, 78 insertions, 378 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Parser/TypeSystemProvider.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Parser/TypeSystemProvider.cs
index 498d98544f..037656f295 100644
--- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Parser/TypeSystemProvider.cs
+++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Parser/TypeSystemProvider.cs
@@ -25,375 +25,90 @@
// THE SOFTWARE.
using System;
using MonoDevelop.Ide.TypeSystem;
-using ICSharpCode.NRefactory.CSharp;
-using ICSharpCode.NRefactory.TypeSystem;
using System.Collections.Generic;
using MonoDevelop.Projects;
using MonoDevelop.CSharp.Project;
-using MonoDevelop.Ide.Tasks;
using Mono.CSharp;
using System.Linq;
-using ICSharpCode.NRefactory;
-using MonoDevelop.CSharp.Refactoring.CodeActions;
using MonoDevelop.Core;
-using ICSharpCode.NRefactory.CSharp.Resolver;
+using MonoDevelop.Ide.Editor;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.Text;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using MonoDevelop.Core.Text;
+using System.Threading.Tasks;
namespace MonoDevelop.CSharp.Parser
{
- public class TypeSystemParser : MonoDevelop.Ide.TypeSystem.TypeSystemParser
+ sealed class TypeSystemParser : MonoDevelop.Ide.TypeSystem.TypeSystemParser
{
- public override ParsedDocument Parse (bool storeAst, string fileName, System.IO.TextReader content, MonoDevelop.Projects.Project project = null)
+ static readonly List<Error> emptyList = new List<Error> ();
+ public override System.Threading.Tasks.Task<ParsedDocument> Parse (MonoDevelop.Ide.TypeSystem.ParseOptions options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
{
- var parser = new ICSharpCode.NRefactory.CSharp.CSharpParser (GetCompilerArguments (project));
- parser.GenerateTypeSystemMode = !storeAst;
- var result = new ParsedDocumentDecorator ();
+ var fileName = options.FileName;
+ var project = options.Project;
+ var result = new CSharpParsedDocument (fileName);
if (project != null) {
+
var projectFile = project.Files.GetFile (fileName);
if (projectFile != null && !TypeSystemParserNode.IsCompileBuildAction (projectFile.BuildAction))
result.Flags |= ParsedDocumentFlags.NonSerializable;
}
- var tagComments = CommentTag.SpecialCommentTags.Select (t => t.Tag).ToArray ();
-
- parser.CompilationUnitCallback = delegate (CompilerCompilationUnit top) {
- foreach (var special in top.SpecialsBag.Specials) {
- var comment = special as SpecialsBag.Comment;
- if (comment != null) {
- VisitComment (result, comment, tagComments);
- } else {
- if (storeAst) {
- var ppd = special as SpecialsBag.PreProcessorDirective;
- if (ppd != null)
- VisitPreprocessorDirective (result, ppd);
- }
- }
- }
- };
-
- var unit = parser.Parse (content, fileName);
- unit.Freeze ();
- var pf = unit.ToTypeSystem ();
- try {
- pf.LastWriteTime = System.IO.File.GetLastWriteTimeUtc (fileName);
- } catch (Exception) {
- pf.LastWriteTime = DateTime.UtcNow;
- }
-
- result.LastWriteTimeUtc = pf.LastWriteTime.Value;
- result.ParsedFile = pf;
- result.Add (GetSemanticTags (unit));
-
- result.CreateRefactoringContext = delegate (MonoDevelop.Ide.Gui.Document doc, System.Threading.CancellationToken token) {
- var task = MDRefactoringContext.Create (doc, doc.Editor.Caret.Location, token);
- try {
- task.Wait (5000, token);
- } catch (AggregateException ae) {
- ae.Flatten ().Handle (aex => aex is OperationCanceledException);
- return null;
- } catch (OperationCanceledException) {
- return null;
- }
- if (!task.IsCompleted)
- return null;
- return task.Result;
- };
- result.CreateRefactoringContextWithEditor = (data, resolver, token) => new MDRefactoringContext ((DotNetProject)project, data, result, (CSharpAstResolver)resolver, TextLocation.Empty, token);
+ var compilerArguments = GetCompilerArguments (project);
+ SyntaxTree unit = null;
- if (storeAst) {
- result.Ast = unit;
- result.Add (GenerateFoldings (unit, result));
- }
- return result;
- }
-
- IEnumerable<FoldingRegion> GenerateFoldings (SyntaxTree unit, ParsedDocument doc)
- {
- foreach (var fold in doc.ConditionalRegions.ToFolds ())
- yield return fold;
-
- foreach (var fold in doc.Comments.ToFolds ())
- yield return fold;
-
- var visitor = new FoldingVisitor ();
- unit.AcceptVisitor (visitor, null);
- foreach (var fold in visitor.Foldings)
- yield return fold;
- }
-
- class FoldingVisitor : DepthFirstAstVisitor<object, object>
- {
- public readonly List<FoldingRegion> Foldings = new List<FoldingRegion> ();
-
- void AddUsings (AstNode parent)
- {
- var firstChild = parent.Children.FirstOrDefault (child => child is UsingDeclaration || child is UsingAliasDeclaration);
- var node = firstChild;
- while (node != null) {
- var next = node.GetNextNode ();
- if (next is UsingDeclaration || next is UsingAliasDeclaration) {
- node = next;
- } else {
- break;
+ if (project != null) {
+ var curDoc = options.RoslynDocument;
+ if (curDoc == null) {
+ var curProject = TypeSystemService.GetCodeAnalysisProject (project);
+ if (curProject != null) {
+ var documentId = TypeSystemService.GetDocumentId (project, fileName);
+ if (documentId != null)
+ curDoc = curProject.GetDocument (documentId);
}
}
- if (firstChild != node) {
- Foldings.Add (new FoldingRegion (new DomRegion (firstChild.StartLocation, node.EndLocation), FoldType.Undefined));
- }
- }
- public override object VisitSyntaxTree (SyntaxTree unit, object data)
- {
- AddUsings (unit);
- return base.VisitSyntaxTree (unit, data);
- }
-
- static TextLocation CorrectEnd (AstNode token)
- {
- return new TextLocation (token.EndLocation.Line, token.EndLocation.Column + 1);
- }
-
- static bool LastToken(AstNode arg)
- {
- return !(arg.Role == Roles.NewLine || arg.Role == Roles.Whitespace || arg.Role == Roles.Comment);
- }
-
- public override object VisitNamespaceDeclaration (NamespaceDeclaration namespaceDeclaration, object data)
- {
- AddUsings (namespaceDeclaration);
- if (!namespaceDeclaration.RBraceToken.IsNull && namespaceDeclaration.LBraceToken.StartLocation.Line != namespaceDeclaration.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (namespaceDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (namespaceDeclaration.RBraceToken)), FoldType.Undefined));
- return base.VisitNamespaceDeclaration (namespaceDeclaration, data);
- }
-
- public override object VisitTypeDeclaration (TypeDeclaration typeDeclaration, object data)
- {
- if (!typeDeclaration.RBraceToken.IsNull && typeDeclaration.LBraceToken.StartLocation.Line != typeDeclaration.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (typeDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (typeDeclaration.RBraceToken)), FoldType.Type));
- return base.VisitTypeDeclaration (typeDeclaration, data);
- }
-
- public override object VisitMethodDeclaration (MethodDeclaration methodDeclaration, object data)
- {
- if (!methodDeclaration.Body.IsNull && methodDeclaration.Body.LBraceToken.StartLocation.Line != methodDeclaration.Body.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (methodDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (methodDeclaration.Body.RBraceToken)), FoldType.Member));
- return base.VisitMethodDeclaration (methodDeclaration, data);
- }
-
- public override object VisitConstructorDeclaration (ConstructorDeclaration constructorDeclaration, object data)
- {
- if (!constructorDeclaration.Body.IsNull && constructorDeclaration.Body.LBraceToken.StartLocation.Line != constructorDeclaration.Body.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (constructorDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (constructorDeclaration.Body.RBraceToken)), FoldType.Member));
- return base.VisitConstructorDeclaration (constructorDeclaration, data);
- }
-
- public override object VisitDestructorDeclaration (DestructorDeclaration destructorDeclaration, object data)
- {
- if (!destructorDeclaration.Body.IsNull && destructorDeclaration.Body.LBraceToken.StartLocation.Line != destructorDeclaration.Body.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (destructorDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (destructorDeclaration.Body.RBraceToken)), FoldType.Member));
- return base.VisitDestructorDeclaration (destructorDeclaration, data);
- }
-
- public override object VisitOperatorDeclaration (OperatorDeclaration operatorDeclaration, object data)
- {
- if (!operatorDeclaration.Body.IsNull && operatorDeclaration.Body.LBraceToken.StartLocation.Line != operatorDeclaration.Body.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (operatorDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (operatorDeclaration.Body.RBraceToken)), FoldType.Member));
- return base.VisitOperatorDeclaration (operatorDeclaration, data);
- }
-
- public override object VisitPropertyDeclaration (PropertyDeclaration propertyDeclaration, object data)
- {
- if (!propertyDeclaration.LBraceToken.IsNull && propertyDeclaration.LBraceToken.StartLocation.Line != propertyDeclaration.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (propertyDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (propertyDeclaration.RBraceToken)), FoldType.Member));
- return base.VisitPropertyDeclaration (propertyDeclaration, data);
- }
-
- public override object VisitIndexerDeclaration (IndexerDeclaration indexerDeclaration, object data)
- {
- if (!indexerDeclaration.LBraceToken.IsNull && indexerDeclaration.LBraceToken.StartLocation.Line != indexerDeclaration.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (indexerDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (indexerDeclaration.RBraceToken)), FoldType.Member));
- return base.VisitIndexerDeclaration (indexerDeclaration, data);
- }
-
- public override object VisitCustomEventDeclaration (CustomEventDeclaration eventDeclaration, object data)
- {
- if (!eventDeclaration.LBraceToken.IsNull && eventDeclaration.LBraceToken.StartLocation.Line != eventDeclaration.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (eventDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (eventDeclaration.RBraceToken)), FoldType.Member));
- return base.VisitCustomEventDeclaration (eventDeclaration, data);
- }
-
- public override object VisitSwitchStatement (SwitchStatement switchStatement, object data)
- {
- if (!switchStatement.RBraceToken.IsNull && switchStatement.LBraceToken.StartLocation.Line != switchStatement.RBraceToken.StartLocation.Line)
- Foldings.Add (new FoldingRegion (new DomRegion (switchStatement.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (switchStatement.RBraceToken)), FoldType.Member));
- return base.VisitSwitchStatement (switchStatement, data);
- }
-
- public override object VisitBlockStatement (BlockStatement blockStatement, object data)
- {
- if (!(blockStatement.Parent is EntityDeclaration) && blockStatement.EndLocation.Line - blockStatement.StartLocation.Line > 2) {
- Foldings.Add (new FoldingRegion (new DomRegion (blockStatement.GetPrevNode (LastToken).EndLocation, CorrectEnd (blockStatement.RBraceToken)), FoldType.Undefined));
- }
-
- return base.VisitBlockStatement (blockStatement, data);
- }
- }
-
- static IEnumerable<Tag> GetSemanticTags (SyntaxTree unit)
- {
- var visitor = new SemanticTagVisitor ();
- unit.AcceptVisitor (visitor);
- foreach (var fold in visitor.Tags)
- yield return fold;
- }
-
- public class SemanticTagVisitor : DepthFirstAstVisitor
- {
- public List<Tag> Tags = new List<Tag> ();
-
- public override void VisitThrowStatement (ThrowStatement throwStatement)
- {
- var createExpression = throwStatement.Expression as ObjectCreateExpression;
- if (createExpression == null)
- return;
- var st = createExpression.Type as SimpleType;
- var mt = createExpression.Type as MemberType;
- if (st != null && st.Identifier == "NotImplementedException" ||
- mt != null && mt.MemberName == "NotImplementedException" && mt.Target.ToString () == "System") {
-
- if (createExpression.Arguments.Any ()) {
- Tags.Add (new Tag ("High", GettextCatalog.GetString ("NotImplementedException({0}) thrown.", createExpression.Arguments.First ().ToString ()), new DomRegion (throwStatement.StartLocation, throwStatement.EndLocation)));
- } else {
- Tags.Add (new Tag ("High", GettextCatalog.GetString ("NotImplementedException thrown."), new DomRegion (throwStatement.StartLocation, throwStatement.EndLocation)));
+ if (curDoc != null) {
+ try {
+ var model = curDoc.GetSemanticModelAsync (cancellationToken).Result;
+ unit = model.SyntaxTree;
+ result.Ast = model;
+ } catch (AggregateException ae) {
+ ae.Flatten ().Handle (x => x is OperationCanceledException);
+ return Task.FromResult ((ParsedDocument)result);
+ } catch (OperationCanceledException) {
+ return Task.FromResult ((ParsedDocument)result);
+ } catch (Exception e) {
+ LoggingService.LogError ("Error while getting the semantic model for " + fileName, e);
}
}
}
- }
- void VisitMcsUnit ()
- {
- }
-
- void VisitComment (ParsedDocument result, SpecialsBag.Comment comment, string[] tagComments)
- {
- var cmt = new MonoDevelop.Ide.TypeSystem.Comment (comment.Content);
- cmt.CommentStartsLine = comment.StartsLine;
- switch (comment.CommentType) {
- case SpecialsBag.CommentType.Multi:
- cmt.CommentType = MonoDevelop.Ide.TypeSystem.CommentType.Block;
- cmt.OpenTag = "/*";
- cmt.ClosingTag = "*/";
- break;
- case SpecialsBag.CommentType.Single:
- cmt.CommentType = MonoDevelop.Ide.TypeSystem.CommentType.SingleLine;
- cmt.OpenTag = "//";
- break;
- case SpecialsBag.CommentType.Documentation:
- cmt.CommentType = MonoDevelop.Ide.TypeSystem.CommentType.Documentation;
- cmt.IsDocumentation = true;
- cmt.OpenTag = "///";
- break;
- }
- cmt.Region = new DomRegion (comment.Line, comment.Col, comment.EndLine, comment.EndCol);
- result.Comments.Add (cmt);
- var trimmedContent = comment.Content.TrimStart ();
- foreach (string tag in tagComments) {
- if (!trimmedContent.StartsWith (tag))
- continue;
- result.Add (new Tag (tag, comment.Content, cmt.Region));
- }
- }
-
- Stack<SpecialsBag.PreProcessorDirective> regions = new Stack<SpecialsBag.PreProcessorDirective> ();
- Stack<SpecialsBag.PreProcessorDirective> ifBlocks = new Stack<SpecialsBag.PreProcessorDirective> ();
- List<SpecialsBag.PreProcessorDirective> elifBlocks = new List<SpecialsBag.PreProcessorDirective> ();
- SpecialsBag.PreProcessorDirective elseBlock = null;
-
- Stack<ConditionalRegion> conditionalRegions = new Stack<ConditionalRegion> ();
- ConditionalRegion ConditionalRegion {
- get {
- return conditionalRegions.Count > 0 ? conditionalRegions.Peek () : null;
- }
- }
+ if (unit == null) {
+ unit = CSharpSyntaxTree.ParseText (SourceText.From (options.Content.Text), compilerArguments, fileName);
+ }
- void CloseConditionBlock (TextLocation loc)
- {
- if (ConditionalRegion == null || ConditionalRegion.ConditionBlocks.Count == 0 || !ConditionalRegion.ConditionBlocks[ConditionalRegion.ConditionBlocks.Count - 1].End.IsEmpty)
- return;
- ConditionalRegion.ConditionBlocks[ConditionalRegion.ConditionBlocks.Count - 1].End = loc;
- }
+ result.Unit = unit;
- void AddCurRegion (ParsedDocument result, int line, int col)
- {
- if (ConditionalRegion == null)
- return;
- ConditionalRegion.End = new TextLocation (line, col);
- result.Add (ConditionalRegion);
- conditionalRegions.Pop ();
- }
-
- void VisitPreprocessorDirective (ParsedDocument result, SpecialsBag.PreProcessorDirective directive)
- {
- TextLocation loc = new TextLocation (directive.Line, directive.Col);
- switch (directive.Cmd) {
- case Tokenizer.PreprocessorDirective.If:
- conditionalRegions.Push (new ConditionalRegion (directive.Arg));
- ifBlocks.Push (directive);
- ConditionalRegion.Start = loc;
- break;
- case Tokenizer.PreprocessorDirective.Elif:
- CloseConditionBlock (new TextLocation (directive.EndLine, directive.EndCol));
- if (ConditionalRegion != null)
- ConditionalRegion.ConditionBlocks.Add (new ConditionBlock (directive.Arg, loc));
- break;
- case Tokenizer.PreprocessorDirective.Else:
- CloseConditionBlock (new TextLocation (directive.EndLine, directive.EndCol));
- if (ConditionalRegion != null)
- ConditionalRegion.ElseBlock = new DomRegion (loc, TextLocation.Empty);
- break;
- case Tokenizer.PreprocessorDirective.Endif:
- TextLocation endLoc = new TextLocation (directive.EndLine, directive.EndCol);
- CloseConditionBlock (endLoc);
- if (ConditionalRegion != null && !ConditionalRegion.ElseBlock.Begin.IsEmpty)
- ConditionalRegion.ElseBlock = new DomRegion (ConditionalRegion.ElseBlock.Begin, endLoc);
- AddCurRegion (result, directive.EndLine, directive.EndCol);
- if (ifBlocks.Count > 0) {
- var ifBlock = ifBlocks.Pop ();
- var ifRegion = new DomRegion (ifBlock.Line, ifBlock.Col, directive.EndLine, directive.EndCol);
- result.Add (new FoldingRegion ("#if " + ifBlock.Arg.Trim (), ifRegion, FoldType.UserRegion, false));
- foreach (var d in elifBlocks) {
- var elIlfRegion = new DomRegion (d.Line, d.Col, directive.EndLine, directive.EndCol);
- result.Add (new FoldingRegion ("#elif " + ifBlock.Arg.Trim (), elIlfRegion, FoldType.UserRegion, false));
- }
- if (elseBlock != null) {
- var elseBlockRegion = new DomRegion (elseBlock.Line, elseBlock.Col, elseBlock.Line, elseBlock.Col);
- result.Add (new FoldingRegion ("#else", elseBlockRegion, FoldType.UserRegion, false));
- }
- }
- elseBlock = null;
- break;
- case Tokenizer.PreprocessorDirective.Define:
- result.Add (new PreProcessorDefine (directive.Arg, loc));
- break;
- case Tokenizer.PreprocessorDirective.Region:
- regions.Push (directive);
- break;
- case Tokenizer.PreprocessorDirective.Endregion:
- if (regions.Count > 0) {
- var start = regions.Pop ();
- DomRegion dr = new DomRegion (start.Line, start.Col, directive.EndLine, directive.EndCol);
- result.Add (new FoldingRegion (start.Arg, dr, FoldType.UserRegion, true));
- }
- break;
+ DateTime time;
+ try {
+ time = System.IO.File.GetLastWriteTimeUtc (fileName);
+ } catch (Exception) {
+ time = DateTime.UtcNow;
}
+ result.LastWriteTimeUtc = time;
+ return Task.FromResult ((ParsedDocument)result);
}
- public static ICSharpCode.NRefactory.CSharp.CompilerSettings GetCompilerArguments (MonoDevelop.Projects.Project project)
+ public static CSharpParseOptions GetCompilerArguments (MonoDevelop.Projects.Project project)
{
- var compilerArguments = new ICSharpCode.NRefactory.CSharp.CompilerSettings ();
+ var compilerArguments = new CSharpParseOptions ();
// compilerArguments.TabSize = 1;
if (project == null || MonoDevelop.Ide.IdeApp.Workspace == null) {
- compilerArguments.AllowUnsafeBlocks = true;
+ // compilerArguments.AllowUnsafeBlocks = true;
return compilerArguments;
}
@@ -401,69 +116,54 @@ namespace MonoDevelop.CSharp.Parser
if (configuration == null)
return compilerArguments;
- foreach (var sym in configuration.GetDefineSymbols ())
- compilerArguments.ConditionalSymbols.Add (sym);
+ compilerArguments = compilerArguments.WithPreprocessorSymbols (configuration.GetDefineSymbols ());
var par = configuration.CompilationParameters as CSharpCompilerParameters;
if (par == null)
return compilerArguments;
-
- compilerArguments.AllowUnsafeBlocks = par.UnsafeCode;
- compilerArguments.LanguageVersion = ConvertLanguageVersion (par.LangVersion);
- compilerArguments.CheckForOverflow = par.GenerateOverflowChecks;
- compilerArguments.WarningLevel = par.WarningLevel;
- compilerArguments.TreatWarningsAsErrors = par.TreatWarningsAsErrors;
- if (!string.IsNullOrEmpty (par.NoWarnings)) {
- foreach (var warning in par.NoWarnings.Split (';', ',', ' ', '\t')) {
- int w;
- try {
- w = int.Parse (warning);
- } catch (Exception) {
- continue;
- }
- compilerArguments.DisabledWarnings.Add (w);
- }
- }
+
+
+ // compilerArguments.AllowUnsafeBlocks = par.UnsafeCode;
+ compilerArguments = compilerArguments.WithLanguageVersion (ConvertLanguageVersion (par.LangVersion));
+// compilerArguments.CheckForOverflow = par.GenerateOverflowChecks;
+
+// compilerArguments.WarningLevel = par.WarningLevel;
+// compilerArguments.TreatWarningsAsErrors = par.TreatWarningsAsErrors;
+// if (!string.IsNullOrEmpty (par.NoWarnings)) {
+// foreach (var warning in par.NoWarnings.Split (';', ',', ' ', '\t')) {
+// int w;
+// try {
+// w = int.Parse (warning);
+// } catch (Exception) {
+// continue;
+// }
+// compilerArguments.DisabledWarnings.Add (w);
+// }
+// }
return compilerArguments;
}
- internal static Version ConvertLanguageVersion (LangVersion ver)
+ internal static Microsoft.CodeAnalysis.CSharp.LanguageVersion ConvertLanguageVersion (LangVersion ver)
{
switch (ver) {
case LangVersion.ISO_1:
- return new Version (1, 0, 0, 0);
+ return Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp1;
case LangVersion.ISO_2:
- return new Version (2, 0, 0, 0);
+ return Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp2;
case LangVersion.Version3:
- return new Version (3, 0, 0, 0);
+ return Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp3;
case LangVersion.Version4:
- return new Version (4, 0, 0, 0);
+ return Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp4;
case LangVersion.Version5:
- return new Version (5, 0, 0, 0);
+ return Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp5;
case LangVersion.Version6:
- return new Version (6, 0, 0, 0);
+ return Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp6;
case LangVersion.Default:
break;
}
- return new Version (6, 0, 0, 0);;
+ return Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp6;
}
}
-
- static class FoldingUtils
- {
- public static IEnumerable<FoldingRegion> ToFolds (this IEnumerable<ConditionalRegion> conditionalRegions)
- {
- foreach (ConditionalRegion region in conditionalRegions) {
- yield return new FoldingRegion ("#if " + region.Flag, region.Region, FoldType.ConditionalDefine);
- foreach (ConditionBlock block in region.ConditionBlocks) {
- yield return new FoldingRegion ("#elif " + block.Flag, block.Region,
- FoldType.ConditionalDefine);
- }
- if (!region.ElseBlock.IsEmpty)
- yield return new FoldingRegion ("#else", region.ElseBlock, FoldType.ConditionalDefine);
- }
- }
- }
}