static bool TryDeclarationTypeInference(ITextEditor editor, IDocumentLine curLine) { string lineText = editor.Document.GetText(curLine.Offset, curLine.Length); ILexer lexer = ParserFactory.CreateLexer(SupportedLanguage.VBNet, new System.IO.StringReader(lineText)); if (lexer.NextToken().Kind != Tokens.Dim) { return(false); } if (lexer.NextToken().Kind != Tokens.Identifier) { return(false); } if (lexer.NextToken().Kind != Tokens.As) { return(false); } Token t1 = lexer.NextToken(); if (t1.Kind != Tokens.QuestionMark) { return(false); } Token t2 = lexer.NextToken(); if (t2.Kind != Tokens.Assign) { return(false); } string expr = lineText.Substring(t2.Location.Column); LoggingService.Debug("DeclarationTypeInference: >" + expr + "<"); ResolveResult rr = ParserService.Resolve(new ExpressionResult(expr), editor.Caret.Line, t2.Location.Column, editor.FileName, editor.Document.Text); if (rr != null && rr.ResolvedType != null) { ClassFinder context = new ClassFinder(ParserService.GetParseInformation(editor.FileName), editor.Caret.Line, t1.Location.Column); VBNetAmbience ambience = new VBNetAmbience(); if (CodeGenerator.CanUseShortTypeName(rr.ResolvedType, context)) { ambience.ConversionFlags = ConversionFlags.None; } else { ambience.ConversionFlags = ConversionFlags.UseFullyQualifiedTypeNames; } string typeName = ambience.Convert(rr.ResolvedType); using (editor.Document.OpenUndoGroup()) { int offset = curLine.Offset + t1.Location.Column - 1; editor.Document.Remove(offset, 1); editor.Document.Insert(offset, typeName); } editor.Caret.Column += typeName.Length - 1; return(true); } return(false); }
public void FixtureSetUp() { valueCollection = SharedProjectContentRegistryForTests.Instance.Mscorlib.GetClass("System.Collections.Generic.Dictionary.ValueCollection", 2); Assert.AreEqual(2, valueCollection.TypeParameters.Count); Assert.AreEqual(2, valueCollection.DeclaringType.TypeParameters.Count); fullMemberNameAmbience = new VBNetAmbience(); fullMemberNameAmbience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.UseFullyQualifiedMemberNames; }