// // BaseRefactoringContext.cs // // Author: // Mike Krüger // // Copyright (c) 2012 Xamarin // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; using System.Linq; using System.Threading; using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.CSharp.TypeSystem; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Editor; using System.ComponentModel.Design; using ICSharpCode.NRefactory.CSharp.Analysis; using ICSharpCode.NRefactory.Utils; namespace ICSharpCode.NRefactory.CSharp.Refactoring { public abstract class BaseRefactoringContext : IServiceProvider { readonly CSharpAstResolver resolver; readonly CancellationToken cancellationToken; public virtual bool Supports(Version version) { return true; } /// /// Gets a value indicating if 'var' keyword should be used or explicit types. /// public virtual bool UseExplicitTypes { get; set; } public CancellationToken CancellationToken { get { return cancellationToken; } } public virtual AstNode RootNode { get { return resolver.RootNode; } } public CSharpAstResolver Resolver { get { return resolver; } } public virtual CSharpUnresolvedFile UnresolvedFile { get { return resolver.UnresolvedFile; } } public ICompilation Compilation { get { return resolver.Compilation; } } public BaseRefactoringContext (ICSharpCode.NRefactory.CSharp.Resolver.CSharpAstResolver resolver, System.Threading.CancellationToken cancellationToken) { this.resolver = resolver; this.cancellationToken = cancellationToken; } #region Resolving public ResolveResult Resolve (AstNode node) { return resolver.Resolve (node, cancellationToken); } public CSharpResolver GetResolverStateBefore(AstNode node) { return resolver.GetResolverStateBefore (node, cancellationToken); } public CSharpResolver GetResolverStateAfter(AstNode node) { return resolver.GetResolverStateAfter (node, cancellationToken); } public IType ResolveType (AstType type) { return resolver.Resolve (type, cancellationToken).Type; } public IType GetExpectedType (Expression expression) { return resolver.GetExpectedType(expression, cancellationToken); } public Conversion GetConversion (Expression expression) { return resolver.GetConversion(expression, cancellationToken); } #endregion #region Code Analyzation /// /// Creates a new definite assignment analysis object with a given root statement. /// /// /// The definite assignment analysis object. /// /// /// The root statement. /// public DefiniteAssignmentAnalysis CreateDefiniteAssignmentAnalysis (Statement root) { return new DefiniteAssignmentAnalysis (root, resolver, CancellationToken); } /// /// Creates a new reachability analysis object with a given statement. /// /// /// The statement to start the analysis. /// /// /// The reachability analysis object. /// public ReachabilityAnalysis CreateReachabilityAnalysis (Statement statement) { return ReachabilityAnalysis.Create (statement, resolver, CancellationToken); } /// /// Parses a composite format string. /// /// /// The format string parsing result. /// public virtual FormatStringParseResult ParseFormatString(string source) { return new CompositeFormatStringParser().Parse(source); } #endregion /// /// Translates the english input string to the context language. /// /// /// The translated string. /// public virtual string TranslateString(string str) { return str; } #region IServiceProvider implementation readonly ServiceContainer services = new ServiceContainer(); /// /// Gets a service container used to associate services with this context. /// public ServiceContainer Services { get { return services; } } /// /// Retrieves a service from the refactoring context. /// If the service is not found in the container. /// public object GetService(Type serviceType) { return services.GetService(serviceType); } #endregion } }