public class JavaEmitter extends Object implements GlueEmitter
| Modifier and Type | Class and Description |
|---|---|
static class |
JavaEmitter.EmissionStyle
Style of code emission.
|
static class |
JavaEmitter.MethodAccess
Access control for emitted Java methods.
|
| Modifier and Type | Field and Description |
|---|---|
protected JavaConfiguration |
cfg |
protected static Logger |
LOG |
| Constructor and Description |
|---|
JavaEmitter() |
| Modifier and Type | Method and Description |
|---|---|
static int |
addStrings2Buffer(StringBuilder buf,
String sep,
String first,
Collection<String> col) |
void |
beginDefines() |
void |
beginEmission(GlueEmitterControls controls)
Begin the emission of glue code.
|
void |
beginFunctions(TypeDictionary typedefDictionary,
TypeDictionary structDictionary,
Map<Type,Type> canonMap) |
void |
beginStructLayout()
Begins the process of computing field offsets and type sizes for
the structs to be emitted.
|
void |
beginStructs(TypeDictionary typedefDictionary,
TypeDictionary structDictionary,
Map<Type,Type> canonMap) |
protected JavaConfiguration |
createConfig()
Create the object that will read and store configuration information for
this JavaEmitter.
|
protected PrintWriter |
cWriter() |
protected void |
emitAllFileFooters()
Write out any footer information for the output files (closing brace of
class definition, etc).
|
protected void |
emitAllFileHeaders()
Write out any header information for the output files (class declaration
and opening brace, import statements, etc).
|
protected void |
emitCHeader(PrintWriter cWriter,
String packageName,
String className) |
protected void |
emitCInitCode(PrintWriter cWriter,
String packageName,
String className) |
protected void |
emitCustomJavaCode(PrintWriter writer,
String className)
Emit all the strings specified in the "CustomJavaCode" parameters of
the configuration file.
|
void |
emitDefine(ConstantDefinition def,
String optionalComment) |
Iterator<FunctionSymbol> |
emitFunctions(List<FunctionSymbol> originalCFunctions)
Emit glue code for the list of FunctionSymbols.
|
protected void |
emitJavaInitCode(PrintWriter jWriter,
String className) |
void |
emitStruct(CompoundType structCType,
String alternateName)
Emit glue code for the given CompoundType.
|
void |
endDefines() |
void |
endEmission()
Finish the emission of glue code.
|
void |
endFunctions() |
void |
endStructLayout()
Finishes the struct layout process.
|
void |
endStructs() |
protected List<MethodBinding> |
expandMethodBinding(MethodBinding binding) |
protected List<? extends FunctionEmitter> |
generateMethodBindingEmitters(Set<MethodBinding> methodBindingSet,
FunctionSymbol sym)
Generate all appropriate Java bindings for the specified C function
symbols.
|
protected void |
generatePrivateEmitters(MethodBinding binding,
List<FunctionEmitter> allEmitters)
Generates the private emitters for this MethodBinding.
|
protected void |
generatePublicEmitters(MethodBinding binding,
List<FunctionEmitter> allEmitters,
boolean signatureOnly)
Generates the public emitters for this MethodBinding which will
produce either simply signatures (for the interface class, if
any) or function definitions with or without a body (depending on
whether or not the implementing function can go directly to
native code because it doesn't need any processing of the
outgoing arguments).
|
protected JavaConfiguration |
getConfig()
Get the configuration information for this JavaEmitter.
|
protected String |
getImplPackageName()
Returns the value that was specified by the configuration directive
"ImplPackage", or the default if none was specified.
|
protected String |
getJavaOutputDir()
Returns the value that was specified by the configuration directive
"JavaOutputDir", or the default if none was specified.
|
protected String |
getJavaPackageName()
Returns the value that was specified by the configuration directive
"Package", or the default if none was specified.
|
protected static int |
getJavaRadix(String name,
String value) |
protected static String |
getJavaType(String name,
Object oval) |
protected static String |
getJavaType(String name,
String value) |
protected static Object |
getJavaValue(String name,
String value) |
protected static String |
getJNIMethodNamePrefix(String javaPackageName,
String javaClassName)
Returns the JNI method prefix consisting our of mangled package- and class-name
|
protected PrintWriter |
javaImplWriter() |
protected PrintWriter |
javaWriter() |
protected static String |
jniMangle(String name)
Mangle a class, package or function name for JNI usage, i.e.
|
void |
layoutStruct(CompoundType t)
Lays out one struct which will be emitted later.
|
protected PrintWriter |
openFile(String filename,
String simpleClassName) |
protected void |
prepCEmitter(String returnSizeLookupName,
JavaType javaReturnType,
CMethodBindingEmitter cEmitter) |
void |
readConfigurationFile(String filename) |
protected boolean |
requiresStaticInitialization(String clazzName)
Returns
true if implementation (java and native-code)
requires staticClassInitCodeCCode and staticClassInitCallJavaCode
and have initializeImpl() being called at static class initialization. |
protected JavaConfiguration cfg
protected static final Logger LOG
public void readConfigurationFile(String filename) throws Exception
readConfigurationFile in interface GlueEmitterExceptionpublic void beginEmission(GlueEmitterControls controls) throws IOException
GlueEmitterbeginEmission in interface GlueEmitterIOExceptionpublic void endEmission()
GlueEmitterendEmission in interface GlueEmitterpublic void beginDefines()
throws Exception
beginDefines in interface GlueEmitterExceptionprotected static String jniMangle(String name)
protected static String getJNIMethodNamePrefix(String javaPackageName, String javaClassName)
public void emitDefine(ConstantDefinition def, String optionalComment) throws Exception
emitDefine in interface GlueEmitteroptionalComment - If optionalComment is non-null, the emitter can
emit that string as a comment providing extra information about the
define.Exceptionpublic void endDefines()
throws Exception
endDefines in interface GlueEmitterExceptionpublic void beginFunctions(TypeDictionary typedefDictionary, TypeDictionary structDictionary, Map<Type,Type> canonMap) throws Exception
beginFunctions in interface GlueEmitterExceptionpublic Iterator<FunctionSymbol> emitFunctions(List<FunctionSymbol> originalCFunctions) throws Exception
GlueEmitteremitFunctions in interface GlueEmitterExceptionprotected JavaConfiguration createConfig()
protected JavaConfiguration getConfig()
protected final boolean requiresStaticInitialization(String clazzName)
true if implementation (java and native-code)
requires staticClassInitCodeCCode and staticClassInitCallJavaCode
and have initializeImpl() being called at static class initialization.
This is currently true, if one of the following method returns true
protected void generatePublicEmitters(MethodBinding binding, List<FunctionEmitter> allEmitters, boolean signatureOnly)
protected void generatePrivateEmitters(MethodBinding binding, List<FunctionEmitter> allEmitters)
protected void prepCEmitter(String returnSizeLookupName, JavaType javaReturnType, CMethodBindingEmitter cEmitter)
protected List<? extends FunctionEmitter> generateMethodBindingEmitters(Set<MethodBinding> methodBindingSet, FunctionSymbol sym) throws Exception
Exceptionpublic void endFunctions()
throws Exception
endFunctions in interface GlueEmitterExceptionpublic void beginStructLayout()
throws Exception
GlueEmitterbeginStructLayout in interface GlueEmitterExceptionpublic void layoutStruct(CompoundType t) throws Exception
GlueEmitterlayoutStruct in interface GlueEmitterExceptionpublic void endStructLayout()
throws Exception
GlueEmitterendStructLayout in interface GlueEmitterExceptionpublic void beginStructs(TypeDictionary typedefDictionary, TypeDictionary structDictionary, Map<Type,Type> canonMap) throws Exception
beginStructs in interface GlueEmitterExceptionpublic void emitStruct(CompoundType structCType, String alternateName) throws Exception
GlueEmitteremitStruct in interface GlueEmitterExceptionpublic void endStructs()
throws Exception
endStructs in interface GlueEmitterExceptionpublic static int addStrings2Buffer(StringBuilder buf, String sep, String first, Collection<String> col)
protected PrintWriter openFile(String filename, String simpleClassName) throws IOException
filename - the class's full filename to open w/ write accesssimpleClassName - the simple class name, i.e. w/o package namePrintWriter instance to write the class source file or null to suppress output!IOExceptionprotected PrintWriter javaWriter()
protected PrintWriter javaImplWriter()
protected PrintWriter cWriter()
protected String getJavaOutputDir()
protected String getJavaPackageName()
protected String getImplPackageName()
protected void emitCustomJavaCode(PrintWriter writer, String className) throws Exception
Exceptionprotected void emitAllFileHeaders()
throws IOException
IOExceptionprotected void emitCHeader(PrintWriter cWriter, String packageName, String className)
protected void emitCInitCode(PrintWriter cWriter, String packageName, String className)
protected void emitJavaInitCode(PrintWriter jWriter, String className)
protected void emitAllFileFooters()
protected List<MethodBinding> expandMethodBinding(MethodBinding binding)