def create_class(eclass)
return @classifiers[eclass] if @classifiers[eclass]
c = Class.new(super_class(eclass)) do
abstract if eclass.abstract
class << self
attr_accessor :_ecore_to_ruby
end
end
class << eclass
attr_accessor :instanceClass
def instanceClassName
instanceClass.to_s
end
end
eclass.instanceClass = c
c::ClassModule.module_eval do
alias _method_missing method_missing
def method_missing(m, *args)
if self.class._ecore_to_ruby.add_features(self.class.ecore)
send(m, *args)
else
_method_missing(m, *args)
end
end
alias _respond_to respond_to?
def respond_to?(m, include_all=false)
self.class._ecore_to_ruby.add_features(self.class.ecore)
_respond_to(m)
end
end
@classifiers[eclass] = c
c._set_ecore_internal(eclass)
c._ecore_to_ruby = self
create_module(eclass.ePackage).const_set(eclass.name, c)
c
end