Search in sources :

Example 1 with VariableElement

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

the class JNIWriter method getAllFields.

/**
 * Including super class fields.
 */
List<VariableElement> getAllFields(TypeElement subclazz) {
    List<VariableElement> fields = new ArrayList<VariableElement>();
    TypeElement cd = null;
    Stack<TypeElement> s = new Stack<TypeElement>();
    cd = subclazz;
    while (true) {
        s.push(cd);
        TypeElement c = (TypeElement) (types.asElement(cd.getSuperclass()));
        if (c == null)
            break;
        cd = c;
    }
    while (!s.empty()) {
        cd = s.pop();
        fields.addAll(ElementFilter.fieldsIn(cd.getEnclosedElements()));
    }
    return fields;
}
Also used : TypeElement(org.eclipse.ceylon.javax.lang.model.element.TypeElement) ArrayList(java.util.ArrayList) VariableElement(org.eclipse.ceylon.javax.lang.model.element.VariableElement) Stack(java.util.Stack)

Example 2 with VariableElement

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

the class JNIWriter method writeStatics.

protected void writeStatics(Writer out, ClassSymbol sym) throws IOException {
    List<VariableElement> classfields = getAllFields(sym);
    for (VariableElement v : classfields) {
        if (!v.getModifiers().contains(Modifier.STATIC))
            continue;
        String s = null;
        s = defineForStatic(sym, v);
        if (s != null) {
            println(out, s);
        }
    }
}
Also used : VariableElement(org.eclipse.ceylon.javax.lang.model.element.VariableElement)

Example 3 with VariableElement

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

the class JNIWriter method signature.

// c.f. MethodDoc.signature
String signature(ExecutableElement e) {
    StringBuilder sb = new StringBuilder("(");
    String sep = "";
    for (VariableElement p : e.getParameters()) {
        sb.append(sep);
        sb.append(types.erasure(p.asType()).toString());
        sep = ",";
    }
    sb.append(")");
    return sb.toString();
}
Also used : VariableElement(org.eclipse.ceylon.javax.lang.model.element.VariableElement)

Example 4 with VariableElement

use of org.eclipse.ceylon.javax.lang.model.element.VariableElement 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

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