private bool TryAutoAddAssemblyReference(Boo.Lang.Compiler.Ast.Import import)
{
Assembly asm = Parameters.FindAssembly(import.Namespace);
if (asm != null) return false; //name resolution already failed earlier, don't try twice
asm = Parameters.LoadAssembly(import.Namespace, false);
if (asm == null) {
//try generalized namespaces
string[] namespaces = import.Namespace.Split(new char[]{'.',});
if (namespaces.Length == 1) {
return false;
} else {
string ns;
int level = namespaces.Length - 1;
while (level > 0) {
ns = string.Join(".", namespaces, 0, level);
asm = Parameters.FindAssembly(ns);
if (asm != null) return false; //name resolution already failed earlier, don't try twice
asm = Parameters.LoadAssembly(ns, false);
if (asm != null) break;
level--;
}
}
}
if (asm != null)
{
try
{
NameResolutionService.OrganizeAssemblyTypes(asm);
}
catch (Exception /*ignored*/)
{
return false;
}
Parameters.AddAssembly(asm);
import.AssemblyReference = new ReferenceExpression(import.LexicalInfo, import.Namespace);
import.AssemblyReference.Entity = new AssemblyReference(asm);
return true;
}
return false;
}