Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }