Class JavaEmitter

    • Constructor Detail

      • JavaEmitter

        public JavaEmitter()
    • Method Detail

      • endEmission

        public void endEmission()
        Description copied from interface: GlueEmitter
        Finish the emission of glue code. This might include closing files, closing open class definitions, etc.
        Specified by:
        endEmission in interface GlueEmitter
      • jniMangle

        protected static String jniMangle​(String name)
        Mangle a class, package or function name for JNI usage, i.e. replace all '.' w/ '_'
      • getJNIMethodNamePrefix

        protected static String getJNIMethodNamePrefix​(String javaPackageName,
                                                       String javaClassName)
        Returns the JNI method prefix consisting our of mangled package- and class-name
      • emitDefine

        public void emitDefine​(ConstantDefinition def,
                               String optionalComment)
                        throws Exception
        Specified by:
        emitDefine in interface GlueEmitter
        optionalComment - If optionalComment is non-null, the emitter can emit that string as a comment providing extra information about the define.
        Throws:
        Exception
      • createConfig

        protected JavaConfiguration createConfig()
        Create the object that will read and store configuration information for this JavaEmitter.
      • getConfig

        protected JavaConfiguration getConfig()
        Get the configuration information for this JavaEmitter.
      • generatePublicEmitters

        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).
      • generatePrivateEmitters

        protected void generatePrivateEmitters​(MethodBinding binding,
                                               List<FunctionEmitter> allEmitters)
        Generates the private emitters for this MethodBinding. On the Java side these will simply produce signatures for native methods. On the C side these will create the emitters which will write the JNI code to interface to the functions. We need to be careful to make the signatures all match up and not produce too many emitters which would lead to compilation errors from creating duplicated methods / functions.
      • beginStructLayout

        public void beginStructLayout()
                               throws Exception
        Description copied from interface: GlueEmitter
        Begins the process of computing field offsets and type sizes for the structs to be emitted.
        Specified by:
        beginStructLayout in interface GlueEmitter
        Throws:
        Exception
      • emitStruct

        public void emitStruct​(CompoundType structCType,
                               Type structCTypedefPtr)
                        throws Exception
        Description copied from interface: GlueEmitter
        Emit glue code for the given CompoundType. typedefType is provided when the CompoundType (e.g. "struct foo_t") has not been typedefed to anything but the type of "pointer to struct foo_t" has (e.g. "typedef struct foo_t {} *Foo"); in this case typedefType would be set to pointer type Foo.
        Specified by:
        emitStruct in interface GlueEmitter
        Throws:
        Exception
      • openFile

        protected PrintWriter openFile​(String filename,
                                       String simpleClassName)
                                throws IOException
        Parameters:
        filename - the class's full filename to open w/ write access
        simpleClassName - the simple class name, i.e. w/o package name
        Returns:
        a PrintWriter instance to write the class source file or null to suppress output!
        Throws:
        IOException
      • javaImplWriter

        protected PrintWriter javaImplWriter()
      • cFileName

        protected String cFileName()
        For #cImplWriter
      • getJavaOutputDir

        protected String getJavaOutputDir()
        Returns the value that was specified by the configuration directive "JavaOutputDir", or the default if none was specified.
      • getJavaPackageName

        protected String getJavaPackageName()
        Returns the value that was specified by the configuration directive "Package", or the default if none was specified.
      • getImplPackageName

        protected String getImplPackageName()
        Returns the value that was specified by the configuration directive "ImplPackage", or the default if none was specified.
      • emitCustomJavaCode

        protected void emitCustomJavaCode​(PrintWriter writer,
                                          String className)
                                   throws Exception
        Emit all the strings specified in the "CustomJavaCode" parameters of the configuration file.
        Throws:
        Exception
      • getClassAccessModifiers

        public String[] getClassAccessModifiers​(String classFQName)
      • emitAllFileHeaders

        protected void emitAllFileHeaders()
                                   throws IOException
        Write out any header information for the output files (class declaration and opening brace, import statements, etc).
        Throws:
        IOException
      • emitJavaInitCode

        protected void emitJavaInitCode​(PrintWriter jWriter,
                                        String className)
      • emitAllFileFooters

        protected void emitAllFileFooters()
        Write out any footer information for the output files (closing brace of class definition, etc).