Search in sources :

Example 1 with ExecutableElement

use of org.eclipse.ceylon.javax.lang.model.element.ExecutableElement in project ceylon by eclipse.

the class JNIWriter method writeMethods.

protected void writeMethods(Writer out, ClassSymbol sym, String cname) throws IOException, TypeSignature.SignatureException {
    List<ExecutableElement> classmethods = ElementFilter.methodsIn(sym.getEnclosedElements());
    for (ExecutableElement md : classmethods) {
        if (md.getModifiers().contains(Modifier.NATIVE)) {
            TypeMirror mtr = types.erasure(md.getReturnType());
            String sig = signature(md);
            TypeSignature newtypesig = new TypeSignature(elements);
            CharSequence methodName = md.getSimpleName();
            boolean longName = false;
            for (ExecutableElement md2 : classmethods) {
                if ((md2 != md) && (methodName.equals(md2.getSimpleName())) && (md2.getModifiers().contains(Modifier.NATIVE)))
                    longName = true;
            }
            println(out, "/*");
            println(out, " * Class:     " + cname);
            println(out, " * Method:    " + mangler.mangle(methodName, Mangle.Type.FIELDSTUB));
            println(out, " * Signature: " + newtypesig.getTypeSignature(sig, mtr));
            println(out, " */");
            println(out, "JNIEXPORT " + jniType(mtr) + " JNICALL " + mangler.mangleMethod(md, sym, (longName) ? Mangle.Type.METHOD_JNI_LONG : Mangle.Type.METHOD_JNI_SHORT));
            print(out, "  (JNIEnv *, ");
            List<? extends VariableElement> paramargs = md.getParameters();
            List<TypeMirror> args = new ArrayList<TypeMirror>();
            for (VariableElement p : paramargs) {
                args.add(types.erasure(p.asType()));
            }
            if (md.getModifiers().contains(Modifier.STATIC))
                print(out, "jclass");
            else
                print(out, "jobject");
            for (TypeMirror arg : args) {
                print(out, ", ");
                print(out, jniType(arg));
            }
            println(out, ");" + lineSep);
        }
    }
}
Also used : TypeMirror(org.eclipse.ceylon.javax.lang.model.type.TypeMirror) ExecutableElement(org.eclipse.ceylon.javax.lang.model.element.ExecutableElement) ArrayList(java.util.ArrayList) VariableElement(org.eclipse.ceylon.javax.lang.model.element.VariableElement)

Aggregations

ArrayList (java.util.ArrayList)1 ExecutableElement (org.eclipse.ceylon.javax.lang.model.element.ExecutableElement)1 VariableElement (org.eclipse.ceylon.javax.lang.model.element.VariableElement)1 TypeMirror (org.eclipse.ceylon.javax.lang.model.type.TypeMirror)1