Module: Cheri::Java::Builder::Interfaces
- Defined in:
- lib/cheri/java/builder/util.rb
Overview
Util
Defined Under Namespace
Classes: ListenerInfo
Constant Summary collapse
Class Method Summary collapse
- .create_listener_impl(info) ⇒ Object
- .get_listener_impl(info) ⇒ Object
- .get_listener_info(java_class, method_name) ⇒ Object
Class Method Details
.create_listener_impl(info) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/cheri/java/builder/util.rb', line 136 def create_listener_impl(info) # TODO: logic to deal with JRuby pre-1.0.0, remove later if (clazz = info.clazz).instance_of?(Module) impl = Class.new do include clazz end else impl = Class.new(clazz) end info.methods.each do |m| n = m.name impl.module_eval <<-EOM def #{n}=(blk) @#{n} = blk end def #{n}(e) @#{n}.call(e) if @#{n} end EOM end impl end |
.get_listener_impl(info) ⇒ Object
133 134 135 |
# File 'lib/cheri/java/builder/util.rb', line 133 def get_listener_impl(info) @impls[info.clazz] ||= create_listener_impl(info) end |
.get_listener_info(java_class, method_name) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/cheri/java/builder/util.rb', line 158 def get_listener_info(java_class,method_name) if (info = @info[key = [java_class,method_name]]) return info end java_class.java_instance_methods.each do |m| if m.name.match(/add(\w+)Listener/) && m.argument_types.length == 1 && m.argument_types[0].name.match(/([\w|.]+)Listener/) clazz = m.argument_types[0] methods = clazz.java_instance_methods methods.each do |im| if im.name == method_name info = @info[key] = ListenerInfo.new(CJava.get_class(clazz.name),methods,m.name) return info end end end end nil end |