def start_tag(prefix, tag, namespaces, attributes)
if tag =~ /\w+\.(\w+)/
role_name = map_feature_name($1) || $1
eRef = @elementstack.last && eAllReferences(@elementstack.last).find{|r|r.name == role_name}
log WARN, "No reference found for #{role_name} on #{@elementstack.last}" unless eRef
@rolestack.push eRef
elsif attributes["xmi.idref"]
rd = ResolverDescription.new
rd.object = @elementstack.last
rd.attribute = @rolestack.last.name
rd.value = attributes["xmi.idref"]
rd.many = @rolestack.last.many
@resolver_descs << rd
@elementstack.push nil
else
value = map_tag(tag, attributes) || tag
if value.is_a?(String)
mod = @ns_module_map[namespaces[prefix]]
unless mod
log WARN, "Ignoring tag #{tag}"
return
end
value = mod.const_get(value).new
end
@env << value
eRef = @rolestack.last
if eRef && eRef.many
@elementstack.last.addGeneric(eRef.name, value)
elsif eRef
@elementstack.last.setGeneric(eRef.name, value)
end
@elementstack.push value
end
end