# File lib/rgen/instantiator/reference_resolver.rb, line 81
  def resolve(unresolved_refs, options={})
    problems = options[:problems] || []
    still_unresolved_refs = []
    failed_resolutions = options[:failed_resolutions] || {}
    unresolved_refs.each do |ur|
      if @identifier_resolver
        target = @identifier_resolver.call(ur.proxy.targetIdentifier)
      else
        target = @identifier_map[ur.proxy.targetIdentifier]
      end
      target = [target].compact unless target.is_a?(Array)
      if options[:use_target_type] 
        feature = ur.element.class.ecore.eAllReferences.find{|r| r.name == ur.feature_name}
        target = target.select{|e| e.is_a?(feature.eType.instanceClass)}
      end
      if target.size == 1
        status = ResolutionHelper.set_uref_target(ur, target[0])
        if status == :success
          options[:on_resolve] && options[:on_resolve].call(ur, target[0])
        elsif status == :type_error
          ur.target_type_error = true
          problems << type_error_message(target[0])
          still_unresolved_refs << ur
          failed_resolutions[ur] = target[0]
        end
      elsif target.size > 1
        problems << "identifier #{ur.proxy.targetIdentifier} not uniq"
        still_unresolved_refs << ur
        failed_resolutions[ur] = target
      else
        problems << "identifier #{ur.proxy.targetIdentifier} not found"
        still_unresolved_refs << ur
      end
    end
    still_unresolved_refs
  end