Class: BiteScript::FileBuilder

Inherits:
Object
  • Object
show all
Includes:
QuickTypes, Util
Defined in:
lib/bitescript/builder.rb,
lib/bitescript/asm3/builder.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from QuickTypes

#boolean, #byte, #char, #double, #float, #int, #long, #null, #object, #short, #string, #void

Methods included from Util

#type_from_dotted

Constructor Details

#initialize(file_name) ⇒ FileBuilder

Returns a new instance of FileBuilder.



108
109
110
111
112
113
114
115
# File 'lib/bitescript/builder.rb', line 108

def initialize(file_name)
  @file_name = file_name
  @class_builders = {}
  @imports = {}
  @package = []
  
  init_imports
end

Instance Attribute Details

#class_buildersObject

Returns the value of attribute class_builders.



104
105
106
# File 'lib/bitescript/builder.rb', line 104

def class_builders
  @class_builders
end

#file_nameObject

Returns the value of attribute file_name.



103
104
105
# File 'lib/bitescript/builder.rb', line 103

def file_name
  @file_name
end

#importsObject

Returns the value of attribute imports.



105
106
107
# File 'lib/bitescript/builder.rb', line 105

def imports
  @imports
end

#package(*names) ⇒ Object

Returns the value of attribute package.



106
107
108
# File 'lib/bitescript/builder.rb', line 106

def package
  @package
end

Class Method Details

.build(filename, &block) ⇒ Object



124
125
126
127
128
129
130
# File 'lib/bitescript/builder.rb', line 124

def self.build(filename, &block)
  fb = new(filename)
  if block_given?
    fb.instance_eval(&block)
  end
  fb
end

Instance Method Details

#default_class(class_name, superclass = java.lang.Object, *interfaces, &block) ⇒ Object



171
172
173
# File 'lib/bitescript/builder.rb', line 171

def default_class(class_name, superclass = java.lang.Object, *interfaces, &block)
  define_class(class_name, :visibility => :default, :superclass => superclass, :interfaces => interfaces, &block)
end

#define_class(class_name, opts, &block) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/bitescript/builder.rb', line 132

def define_class(class_name, opts, &block)
  pkg = opts[:package] || @package.dup || []
  opts[:widen] ||= @widen_proc

  class_name = pkg.empty? ? class_name : "#{pkg.join('/')}/#{class_name}"
  class_builder = ClassBuilder.new(self, class_name, @file_name, opts)
  @class_builders[class_name] ||= class_builder # TODO Is this really what we want?
  
  if block_given?
    if block.arity == 1
      block.call(class_builder)
    else
      class_builder.instance_eval(&block)
    end
  else
    return class_builder
  end
end

#generateObject



175
176
177
178
179
180
181
# File 'lib/bitescript/builder.rb', line 175

def generate
  @class_builders.each do |class_name, class_builder|
    class_file = "#{class_name.gsub('.', '/')}.class"
    
    yield class_file, class_builder
  end
end

#init_importsObject



117
118
119
120
121
122
# File 'lib/bitescript/builder.rb', line 117

def init_imports
  # set up a few useful imports
  @imports[:int.to_s] = Java::int.java_class
  @imports[:string.to_s] = Java::java.lang.String.java_class
  @imports[:object.to_s] = Java::java.lang.Object.java_class
end

#line(line) ⇒ Object



183
184
185
# File 'lib/bitescript/builder.rb', line 183

def line(line)
  # No tracking of lines at the file level, so we ignore
end

#method?Boolean

Returns:

  • (Boolean)


210
211
212
# File 'lib/bitescript/builder.rb', line 210

def method?
  false
end

#private_class(class_name, superclass = java.lang.Object, *interfaces, &block) ⇒ Object



167
168
169
# File 'lib/bitescript/builder.rb', line 167

def private_class(class_name, superclass = java.lang.Object, *interfaces, &block)
  define_class(class_name, :visibility => :private, :superclass => superclass, :interfaces => interfaces, &block)
end

#protected_class(class_name, superclass = java.lang.Object, *interfaces, &block) ⇒ Object



163
164
165
# File 'lib/bitescript/builder.rb', line 163

def protected_class(class_name, superclass = java.lang.Object, *interfaces, &block)
  define_class(class_name, :visibility => :protected, :superclass => superclass, :interfaces => interfaces, &block)
end

#public_class(class_name, superclass = java.lang.Object, *interfaces, &block) ⇒ Object



155
156
157
# File 'lib/bitescript/builder.rb', line 155

def public_class(class_name, superclass = java.lang.Object, *interfaces, &block)
  define_class(class_name, :visibility => :public, :superclass => superclass, :interfaces => interfaces, &block)
end

#public_interface(class_name, *interfaces, &block) ⇒ Object



159
160
161
# File 'lib/bitescript/builder.rb', line 159

def public_interface(class_name, *interfaces, &block)
  define_class(class_name, :visibility => :public, :interface => true, :interfaces => interfaces, &block)
end

#to_widen(&block) ⇒ Object



151
152
153
# File 'lib/bitescript/builder.rb', line 151

def to_widen(&block)
  @widen_proc = block
end

#unpack_packages(*names) ⇒ Object



200
201
202
203
204
205
206
207
208
# File 'lib/bitescript/builder.rb', line 200

def unpack_packages(*names)
  package = []
  names.each do |name_maybe_dotted|
    name_maybe_dotted.split(/\./).each do |name|
      package.push name
    end
  end
  package
end