def self.build(package, env=nil, builderMethodsModule=nil, &block)
resolver = ReferenceResolver.new
bc = BuilderContext.new(package, builderMethodsModule, resolver, env)
contextModule = eval("Module.nesting", block.binding).first
Util::MethodDelegation.registerDelegate(bc, contextModule, "const_missing")
BuilderContext.currentBuilderContext = bc
begin
bc.instance_eval(&block)
ensure
BuilderContext.currentBuilderContext = nil
end
Util::MethodDelegation.unregisterDelegate(bc, contextModule, "const_missing")
resolver.resolve(bc.toplevelElements)
bc.toplevelElements
end