org.jibx.schema.codegen
Class SourceBuilder

java.lang.Object
  extended by org.jibx.schema.codegen.SourceBuilder

public class SourceBuilder
extends java.lang.Object

Abstract syntax tree builder. This wraps the AST with convenience methods and added control information.


Nested Class Summary
private static class SourceBuilder.WriterVisitor
          Visitor to apply edits.
 
Field Summary
private  AST m_ast
          Actual AST instance.
private  java.util.ArrayList m_classes
          Builders for main classes in file.
private  CompilationUnit m_compilationUnit
          Compilation unit.
protected  ImportsTracker m_importsTracker
          Tracker for imports.
private  java.lang.String m_name
          Name of this source.
private  PackageHolder m_package
          Package containing this source.
private static org.apache.log4j.Logger s_logger
          Logger for class.
private static java.util.Map s_primitiveTypeCodes
          Map from primitive type name to type code.
 
Constructor Summary
SourceBuilder(AST ast, PackageHolder pack, java.lang.String name, ImportsTracker imports)
          Constructor.
 
Method Summary
 boolean addImport(java.lang.String fqname)
          Add import for class.
private  AbstractTypeDeclaration createClass(java.lang.String cname, java.lang.String sname, boolean isenum)
          Create a type declaration.
 Type createParameterizedType(java.lang.String type, java.lang.String param)
          Create a parameterized type.
 Type createType(java.lang.String type)
          Create type definition.
protected  Name createTypeName(java.lang.String type)
          Create type name.
 void finish(boolean verbose)
          Generate the actual source file.
(package private)  AST getAST()
          AST access for related classes.
 java.lang.String getPackageName()
          Get the name of the package containing this source file.
 ClassBuilder newInnerClass(java.lang.String cname, java.lang.String sname, ClassBuilder outer, boolean isenum)
          Add a new inner class to the file.
 ClassBuilder newMainClass(java.lang.String cname, java.lang.String sname, boolean isenum)
          Add a new main class to the file.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

s_logger

private static final org.apache.log4j.Logger s_logger
Logger for class.


s_primitiveTypeCodes

private static final java.util.Map s_primitiveTypeCodes
Map from primitive type name to type code.


m_ast

private final AST m_ast
Actual AST instance.


m_package

private final PackageHolder m_package
Package containing this source.


m_name

private final java.lang.String m_name
Name of this source.


m_compilationUnit

private final CompilationUnit m_compilationUnit
Compilation unit.


m_importsTracker

protected final ImportsTracker m_importsTracker
Tracker for imports.


m_classes

private java.util.ArrayList m_classes
Builders for main classes in file.

Constructor Detail

SourceBuilder

public SourceBuilder(AST ast,
                     PackageHolder pack,
                     java.lang.String name,
                     ImportsTracker imports)
Constructor.

Parameters:
ast -
pack -
name -
imports -
Method Detail

getAST

AST getAST()
AST access for related classes.

Returns:
AST

addImport

public boolean addImport(java.lang.String fqname)
Add import for class. If the requested import doesn't conflict with the current set it's added, otherwise it's ignored. TODO: restructure code to handle this

Parameters:
fqname - fully qualified class name
Returns:
true if added as import

getPackageName

public java.lang.String getPackageName()
Get the name of the package containing this source file.

Returns:
name

createClass

private AbstractTypeDeclaration createClass(java.lang.String cname,
                                            java.lang.String sname,
                                            boolean isenum)
Create a type declaration.

Parameters:
cname - class name
sname - superclass name (null if none, i.e. java.lang.Object)
isenum - Java 5 enum class flag
Returns:
type declaration

newMainClass

public ClassBuilder newMainClass(java.lang.String cname,
                                 java.lang.String sname,
                                 boolean isenum)
Add a new main class to the file.

Parameters:
cname - class name
sname - superclass name (null if none, i.e. java.lang.Object)
isenum - Java 5 enum class flag
Returns:
builder

newInnerClass

public ClassBuilder newInnerClass(java.lang.String cname,
                                  java.lang.String sname,
                                  ClassBuilder outer,
                                  boolean isenum)
Add a new inner class to the file.

Parameters:
cname - class name
sname - superclass name (null if none, i.e. java.lang.Object)
outer - containing class builder
isenum - Java 5 enum class flag
Returns:
builder

createTypeName

protected Name createTypeName(java.lang.String type)
Create type name.

Parameters:
type - fully-qualified type name
Returns:
name

createType

public Type createType(java.lang.String type)
Create type definition. This uses the supplied type name, which may include array suffixes and/or type parameters, to construct the actual type definition.

Parameters:
type - fully qualified type name, or primitive type name
Returns:
constructed typed definition

createParameterizedType

public Type createParameterizedType(java.lang.String type,
                                    java.lang.String param)
Create a parameterized type.

Parameters:
type - fully qualified type name
param - fully qualified parameter type name
Returns:
type

finish

public void finish(boolean verbose)
Generate the actual source file.

Parameters:
verbose -


Project Web Site