public ResolveResult ResolveSnippet(ParseInformation parseInfo, TextLocation location, string codeSnippet, ICompilation compilation, CancellationToken cancellationToken) { var csParseInfo = parseInfo as CSharpFullParseInformation; if (csParseInfo == null) { throw new ArgumentException("Parse info does not have SyntaxTree"); } CSharpAstResolver contextResolver = new CSharpAstResolver(compilation, csParseInfo.SyntaxTree, csParseInfo.UnresolvedFile); var node = csParseInfo.SyntaxTree.GetNodeAt(location); CSharpResolver context; if (node != null) { context = contextResolver.GetResolverStateAfter(node, cancellationToken); } else { context = new CSharpResolver(compilation); } CSharpParser parser = new CSharpParser(); var expr = parser.ParseExpression(codeSnippet); if (parser.HasErrors) { return(new ErrorResolveResult(SpecialType.UnknownType, PrintErrorsAsString(parser.Errors), TextLocation.Empty)); } CSharpAstResolver snippetResolver = new CSharpAstResolver(context, expr); return(snippetResolver.Resolve(expr, cancellationToken)); }
static ResolveResult ResolveSnippet(string fileName, TextLocation location, string contextCode, string codeSnippet, ICompilation compilation) { CSharpParser contextParser = new CSharpParser(); var cu = contextParser.Parse(contextCode, fileName); CSharpAstResolver contextResolver = new CSharpAstResolver(compilation, cu); var node = cu.GetNodeAt(location); CSharpResolver context; if (node != null) { context = contextResolver.GetResolverStateAfter(node, CancellationToken.None); } else { context = new CSharpResolver(compilation); } CSharpParser parser = new CSharpParser(); var expr = parser.ParseExpression(codeSnippet); Assert.IsFalse(parser.HasErrors); CSharpAstResolver snippetResolver = new CSharpAstResolver(context, expr); return(snippetResolver.Resolve(expr, CancellationToken.None)); }
public CSharpResolver GetResolverStateAfter(AstNode node) { return(resolver.GetResolverStateAfter(node, cancellationToken)); }