def candidates_via_connection_points(pattern_root, connection_points)
@candidates_via_connection_points_refs ||= {}
refs = (@candidates_via_connection_points_refs[pattern_root.class] ||=
pattern_root.class.ecore.eAllReferences.reject{|r| r.derived || r.many || !r.eOpposite})
candidates = nil
refs.each do |r|
t = pattern_root.getGeneric(r.name)
cp = t.is_a?(Proxy) && connection_points.find{|cp| cp.object_id == t._target.object_id}
if cp
elements = cp.getGenericAsArray(r.eOpposite.name)
candidates = elements if candidates.nil? || elements.size < candidates.size
end
end
candidates
end