Module: Cheri::Java::Builder::Interfaces

Defined in:
lib/cheri/java/builder/util.rb

Overview

Util

Defined Under Namespace

Classes: ListenerInfo

Constant Summary collapse

CJava =

:stopdoc:

Cheri::Java

Class Method Summary collapse

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