def resolve(namespace, name, inheritance = false, proxy_fallback = false)
if namespace.is_a?(CodeObjects::Proxy)
return proxy_fallback ? CodeObjects::Proxy.new(namespace, name) : nil
end
if namespace == :root || !namespace
namespace = root
else
namespace = namespace.parent until namespace.is_a?(CodeObjects::NamespaceObject)
end
orignamespace = namespace
name = name.to_s
if name =~ /^#{CodeObjects::NSEPQ}/
[name, name[2..-1]].each do |n|
return at(n) if at(n)
end
else
while namespace
if namespace.is_a?(CodeObjects::NamespaceObject)
nss = inheritance ? namespace.inheritance_tree(true) : [namespace]
nss.each do |ns|
next if ns.is_a?(CodeObjects::Proxy)
found = partial_resolve(ns, name)
return found if found
end
end
namespace = namespace.parent
end
end
proxy_fallback ? CodeObjects::Proxy.new(orignamespace, name) : nil
end