internal Type FindType(string[] typeNameParts) { string[] namespaces = new string[typeNameParts.Length - 1]; string typeName = typeNameParts[typeNameParts.Length - 1]; System.Array.Copy(typeNameParts, namespaces, namespaces.Length); ImportBase currentImport = MyRootImport; foreach (string ns in namespaces) { currentImport = currentImport.FindImport(ns); if (currentImport == null) { break; // TODO: might not be correct. Was : Exit For } } if (currentImport == null) { return(null); } else { return(currentImport.FindType(typeName)); } }
private void ResolveNamespaces(IList elements, IServiceProvider services) { ExpressionContext context = services.GetService(typeof(ExpressionContext)) as ExpressionContext; ImportBase currentImport = context.Imports.RootImport; while (true) { string name = GetName(elements); if (name == null) { break; // TODO: might not be correct. Was : Exit While } ImportBase import = currentImport.FindImport(name); if (import == null) { break; // TODO: might not be correct. Was : Exit While } currentImport = import; elements.RemoveAt(0); if (elements.Count > 0) { MemberElement newFirst = (MemberElement)elements[0]; newFirst.SetImport(currentImport); } } if (elements.Count == 0) { base.ThrowCompileException(CompileErrorResourceKeys.NamespaceCannotBeUsedAsType, CompileExceptionReason.TypeMismatch, currentImport.Name); } }