Class: BiteScript::FileBuilder

Inherits:
Object
  • Object
show all
Includes:
QuickTypes, Util
Defined in:
lib/bitescript/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.



94
95
96
97
98
99
100
101
# File 'lib/bitescript/builder.rb', line 94

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.



90
91
92
# File 'lib/bitescript/builder.rb', line 90

def class_builders
  @class_builders
end

#file_nameObject

Returns the value of attribute file_name.



89
90
91
# File 'lib/bitescript/builder.rb', line 89

def file_name
  @file_name
end

#importsObject

Returns the value of attribute imports.



91
92
93
# File 'lib/bitescript/builder.rb', line 91

def imports
  @imports
end

#package(*names) ⇒ Object

Returns the value of attribute package.



92
93
94
# File 'lib/bitescript/builder.rb', line 92

def package
  @package
end

Class Method Details

.build(filename, &block) ⇒ Object



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

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



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

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



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/bitescript/builder.rb', line 118

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

  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



156
157
158
159
160
161
162
# File 'lib/bitescript/builder.rb', line 156

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



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

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



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

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

#method?Boolean

Returns:

  • (Boolean)


191
192
193
# File 'lib/bitescript/builder.rb', line 191

def method?
  false
end

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



148
149
150
# File 'lib/bitescript/builder.rb', line 148

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



144
145
146
# File 'lib/bitescript/builder.rb', line 144

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



136
137
138
# File 'lib/bitescript/builder.rb', line 136

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



140
141
142
# File 'lib/bitescript/builder.rb', line 140

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

#unpack_packages(*names) ⇒ Object



181
182
183
184
185
186
187
188
189
# File 'lib/bitescript/builder.rb', line 181

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