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.



103
104
105
106
107
108
109
110
# File 'lib/bitescript/builder.rb', line 103

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.



99
100
101
# File 'lib/bitescript/builder.rb', line 99

def class_builders
  @class_builders
end

#file_nameObject

Returns the value of attribute file_name.



98
99
100
# File 'lib/bitescript/builder.rb', line 98

def file_name
  @file_name
end

#importsObject

Returns the value of attribute imports.



100
101
102
# File 'lib/bitescript/builder.rb', line 100

def imports
  @imports
end

#package(*names) ⇒ Object

Returns the value of attribute package.



101
102
103
# File 'lib/bitescript/builder.rb', line 101

def package
  @package
end

Class Method Details

.build(filename, &block) ⇒ Object



119
120
121
122
123
124
125
# File 'lib/bitescript/builder.rb', line 119

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



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

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



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/bitescript/builder.rb', line 127

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



170
171
172
173
174
175
176
# File 'lib/bitescript/builder.rb', line 170

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



112
113
114
115
116
117
# File 'lib/bitescript/builder.rb', line 112

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



178
179
180
# File 'lib/bitescript/builder.rb', line 178

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

#method?Boolean

Returns:

  • (Boolean)


205
206
207
# File 'lib/bitescript/builder.rb', line 205

def method?
  false
end

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



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

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



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

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



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

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



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

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

#to_widen(&block) ⇒ Object



146
147
148
# File 'lib/bitescript/builder.rb', line 146

def to_widen(&block)
  @widen_proc = block
end

#unpack_packages(*names) ⇒ Object



195
196
197
198
199
200
201
202
203
# File 'lib/bitescript/builder.rb', line 195

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