package xtc.lang.blink.agent;
/**
* 9 primitives types: jboolean, jbyte, jchar, jshort, jint, jlong, jfloat, jdouble, jsize
*
* 15 reference types: jobject, jclass, jstring, jarray, jbooleanArray, jbyteArray,
* jcharArray, jshortArray, jintArray, jlongArray, jfloatArray,
* jdoubleArray, jobjectArray, jthrowable, jweak
*
* 2 identifiers:jmethodID and jfieldID
*
* 6 UTF-8 C string (const char*)
* + generic string message
* + method name
* + field name
* + class descriptors (e.g., "java/lang/String")
* + field descriptors (e.g., "Ljava/lang/String;")
* + method descriptors (e.g., "()Ljava/lang/String;"
*
* Unknown
*
* @author Byeongcheol Lee
*/
public abstract class JNIType {
final String name;
JNIType(String name) {
this.name = name;
}
static final class VoidType extends JNIType {
public VoidType() {
super("void");
}
}
static final class PrimitiveType extends JNIType {
public PrimitiveType(String name) {
super(name);
}
}
static class ReferenceType extends JNIType{
ReferenceType(String name) {
super(name);
}
}
static class JMethodIDType extends JNIType{
JMethodIDType(String name) {
super(name);
}
}
static class JFieldIDType extends JNIType{
JFieldIDType(String name) {
super(name);
}
}
static final class ArrayReferenceType extends ReferenceType {
final JNIType elementType;
public ArrayReferenceType(String name, JNIType elementType) {
super(name);
this.elementType = elementType;
}
}
static class PointerType extends JNIType {
PointerType(String name) {
super(name);
}
}
static class CStringType extends PointerType {
CStringType(String name) {
super(name);
}
}
}