ExpressionContext GetCreationContext() { UnGetToken(); if (GetNextNonWhiteSpace() == '=') // was: "= new" { ReadNextToken(); if (curTokenType == Ident) // was: "ident = new" { int typeEnd = offset; ReadNextToken(); int typeStart = -1; while (curTokenType == Ident) { typeStart = offset + 1; ReadNextToken(); if (curTokenType == Dot) { ReadNextToken(); } else { break; } } if (typeStart >= 0) { string className = text.Substring(typeStart, typeEnd - typeStart); int pos = className.IndexOf('<'); string nonGenericClassName, genericPart; int typeParameterCount = 0; if (pos > 0) { nonGenericClassName = className.Substring(0, pos); genericPart = className.Substring(pos); pos = 0; do { typeParameterCount += 1; pos = genericPart.IndexOf(',', pos + 1); } while (pos > 0); } else { nonGenericClassName = className; genericPart = null; } ClassFinder finder = new ClassFinder(fileName, text, typeStart); IReturnType t = finder.SearchType(nonGenericClassName, typeParameterCount); IClass c = (t != null) ? t.GetUnderlyingClass() : null; if (c != null) { ExpressionContext context = ExpressionContext.TypeDerivingFrom(c.BaseType, true); if (context.ShowEntry(c)) { if (genericPart != null) { DefaultClass genericClass = new DefaultClass(c.CompilationUnit, c.ClassType, c.Modifiers, c.Region, c.DeclaringType); genericClass.FullyQualifiedName = c.FullyQualifiedName + genericPart; genericClass.Documentation = c.Documentation; context.SuggestedItem = genericClass; } else { context.SuggestedItem = c; } } return(context); } } } } else { UnGet(); if (ReadIdentifier(GetNextNonWhiteSpace()) == "throw") { return(ExpressionContext.TypeDerivingFrom(HostCallback.GetCurrentProjectContent().GetClass("System.Exception", 1).BaseType, true)); } } return(ExpressionContext.ObjectCreation); }
ExpressionResult CreateResult(string expression, string inText, int offset) { if (expression == null) { return(new ExpressionResult(null)); } if (expression.StartsWith("using ")) { return(new ExpressionResult(expression.Substring(6).TrimStart(), ExpressionContext.Namespace, null)); } if (!hadParenthesis && expression.StartsWith("new ")) { return(new ExpressionResult(expression.Substring(4).TrimStart(), GetCreationContext(), null)); } if (IsInAttribute(inText, offset)) { return(new ExpressionResult(expression, ExpressionContext.GetAttribute(HostCallback.GetCurrentProjectContent()))); } return(new ExpressionResult(expression)); }