// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Threading.Tasks; using CSharpBinding.Parser; using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.CSharp.TypeSystem; using ICSharpCode.SharpDevelop.Refactoring; namespace CSharpBinding { /// /// C#-specific extension methods. /// public static class ExtensionMethods { public static async Task GetCompilationUnitAsync(this EditorRefactoringContext editorContext) { var parseInfo = (await editorContext.GetParseInformationAsync().ConfigureAwait(false)) as CSharpFullParseInformation; if (parseInfo != null) return parseInfo.CompilationUnit; else return new CompilationUnit(); } public static Task GetAstResolverAsync(this EditorRefactoringContext editorContext) { return editorContext.GetCachedAsync( async ec => { var parseInfo = (await ec.GetParseInformationAsync().ConfigureAwait(false)) as CSharpFullParseInformation; var compilation = await ec.GetCompilationAsync().ConfigureAwait(false); if (parseInfo != null) return parseInfo.GetResolver(compilation); else return new CSharpAstResolver(compilation, new CompilationUnit(), new CSharpParsedFile(ec.FileName)); }); } } }