use of org.eclipse.ceylon.javax.lang.model.type.TypeMirror in project ceylon by eclipse.
the class JNIWriter method jniType.
protected final String jniType(TypeMirror t) {
TypeElement throwable = elements.getTypeElement("java.lang.Throwable");
TypeElement jClass = elements.getTypeElement("java.lang.Class");
TypeElement jString = elements.getTypeElement("java.lang.String");
Element tclassDoc = types.asElement(t);
switch(t.getKind()) {
case ARRAY:
{
TypeMirror ct = ((ArrayType) t).getComponentType();
switch(ct.getKind()) {
case BOOLEAN:
return "jbooleanArray";
case BYTE:
return "jbyteArray";
case CHAR:
return "jcharArray";
case SHORT:
return "jshortArray";
case INT:
return "jintArray";
case LONG:
return "jlongArray";
case FLOAT:
return "jfloatArray";
case DOUBLE:
return "jdoubleArray";
case ARRAY:
case DECLARED:
return "jobjectArray";
default:
throw new Error(ct.toString());
}
}
case VOID:
return "void";
case BOOLEAN:
return "jboolean";
case BYTE:
return "jbyte";
case CHAR:
return "jchar";
case SHORT:
return "jshort";
case INT:
return "jint";
case LONG:
return "jlong";
case FLOAT:
return "jfloat";
case DOUBLE:
return "jdouble";
case DECLARED:
{
if (tclassDoc.equals(jString))
return "jstring";
else if (types.isAssignable(t, throwable.asType()))
return "jthrowable";
else if (types.isAssignable(t, jClass.asType()))
return "jclass";
else
return "jobject";
}
}
Assert.check(false, "jni unknown type");
return null;
/* dead code. */
}
use of org.eclipse.ceylon.javax.lang.model.type.TypeMirror in project ceylon by eclipse.
the class Facades method unfacade.
public static TypeMirror[] unfacade(javax.lang.model.type.TypeMirror[] arg) {
TypeMirror[] ret = new TypeMirror[arg.length];
int i = 0;
for (javax.lang.model.type.TypeMirror el : arg) {
ret[i++] = unfacade(el);
}
return ret;
}
use of org.eclipse.ceylon.javax.lang.model.type.TypeMirror 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);
}
}
}
Aggregations