private INamespace SelectiveImportFor(INamespace ns, MethodInvocationExpression selectiveImportSpec)
{
var importedNames = selectiveImportSpec.Arguments;
var entities = new List<IEntity>(importedNames.Count);
var aliases = new Dictionary<string,string>(importedNames.Count);
foreach (Expression nameExpression in importedNames)
{
string name;
if (nameExpression is ReferenceExpression) {
name = (nameExpression as ReferenceExpression).Name;
aliases[name] = name;
} else {
var tce = nameExpression as TryCastExpression;
var alias = (tce.Type as SimpleTypeReference).Name;
name = (tce.Target as ReferenceExpression).Name;
aliases[alias] = name;
// Remove the trycast expression, otherwise it gets processed in later steps
tce.Target.Annotate("alias", alias);
importedNames.Replace(nameExpression, tce.Target);
}
if (!ns.Resolve(entities, name, EntityType.Any))
Errors.Add(
CompilerErrorFactory.MemberNotFound(
nameExpression, name, ns, NameResolutionService.GetMostSimilarMemberName(ns, name, EntityType.Any)));
}
return new SimpleNamespace(null, entities, aliases);
}