Class: Divine::JavaGenerator

Inherits:
JavaHelperMethods show all
Defined in:
lib/divine/code_generators/java.rb

Overview

Responsible for generating Divine and structs classes

Instance Method Summary collapse

Methods inherited from JavaHelperMethods

#get_header_comment, #java_base_class_template_str, #java_class_template, #java_deserialize_internal, #java_get_empty_declaration, #java_get_type_declaration, #java_serialize_internal

Methods inherited from BabelHelperMethods

#camelize, #format_src, #get_fresh_variable_name, #get_header_comment_text, #sanity_check

Instance Method Details

#generate_code(structs, opts) ⇒ Object

Generate Java class(es)

  • Args :

    • structs -> Dictionary of structs

    • opts -> Dictionary that contains generation params [file, debug, package, parent_class, target_dir]



642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
# File 'lib/divine/code_generators/java.rb', line 642

def generate_code(structs, opts)
  $debug_java = true if opts[:debug]
  base_template = Erubis::Eruby.new(java_base_class_template_str)
  keys = structs.keys.sort
  src = keys.map do |k|
    ss = structs[k]
    # Check different aspects the the structs
    vss = sanity_check(ss)
    java_class_template(StructHandler.new(vss))
  end

  # User defined super class?
  toplevel = opts[:parent_class] || nil
  toplevel = " extends #{toplevel}" if toplevel
  if opts[:package]
    res = [{file: "Divine.java", src: "#{java_get_begin_module(opts)}public #{base_template.result({ toplevel_class: toplevel })}"}]
	for cls in src
      res << {file: cls.match(/class (.*) extends/)[1]+".java", src: "#{java_get_begin_module(opts)}public #{cls}"}
    end
    return res
  else
    return [{file: opts[:file], src: "#{java_get_begin_module(opts)}#{base_template.result({ toplevel_class: toplevel })}\n\n#{src.join("\n\n")}"}]
  end
end

#get_java_importsObject

Generate list of imports needed in generated java classes



681
682
683
684
685
686
687
688
689
690
691
692
693
# File 'lib/divine/code_generators/java.rb', line 681

def get_java_imports
  [
    "java.io.ByteArrayInputStream",
    "java.io.ByteArrayOutputStream",
    "java.io.IOException",
    "java.util.ArrayList",
    "java.util.HashMap",
    "java.util.regex.Pattern",
    "java.nio.charset.Charset"
    ].map do |i|
      "import #{i};"
    end.join("\n") 
end

#java_get_begin_module(opts) ⇒ Object

  • opts -> Dictionary that contains package name in key ‘package’



671
672
673
674
675
676
677
# File 'lib/divine/code_generators/java.rb', line 671

def java_get_begin_module(opts)
  str = "#{get_header_comment}\n\n"
  str << "package #{opts[:package]};" if opts[:package]
  str << get_java_imports
  str << "\n\n"
  return str
end