Example usage for org.apache.commons.bcel6.generic ArrayType getBasicType

List of usage examples for org.apache.commons.bcel6.generic ArrayType getBasicType

Introduction

In this page you can find the example usage for org.apache.commons.bcel6.generic ArrayType getBasicType.

Prototype

public Type getBasicType() 

Source Link

Usage

From source file:ru.objective.jni.tasks.builders.ClassBuilder.java

private String getFieldImplementation(Field field, String declaration, boolean setter) {
    StringBuilder builder = new StringBuilder();

    if (setter && field.isFinal())
        return "";

    builder.append(declaration).append(" {").append(System.lineSeparator());

    builder.append("OJNIEnv *__env = [OJNIEnv currentEnv];").append(System.lineSeparator());
    builder.append("jfieldID fid = [[OJNIMidManager sharedManager] fieldIDFor");
    if (field.isStatic())
        builder.append("Static");
    builder.append("Method:@\"" + field.getName() + "\" ");
    builder.append("signature:@\"" + field.getSignature() + "\" inClass:self.class];");
    builder.append(System.lineSeparator());

    Type returnType = field.getType();
    String lowerCaseReturnType = (Utils.isPrimitive(returnType) && !Utils.isArrayType(returnType)
            ? returnType.toString()//from   www . j a  va  2s . c  om
            : "object");
    String capitalized = StringUtils.capitalize(lowerCaseReturnType);

    String staticIdentifier = "";
    String selfIdentitifer = "[self javaObject]";

    if (field.isStatic()) {
        staticIdentifier = "Static";
        selfIdentitifer = "[self.class OJNIClass]";
    }

    if (setter) { // setter
        builder.append("[__env set").append(staticIdentifier).append(capitalized).append("Field:")
                .append(selfIdentitifer).append(" field:fid value:");

        String var_name = "property_" + field.getName();

        if (Utils.isArrayType(returnType)) {
            ArrayType arrayType = (ArrayType) returnType;
            int dimensions = arrayType.getDimensions();
            String typeString = arrayType.getBasicType().toString();
            String capitalizedType = StringUtils.capitalize(typeString);

            // fix Boolean = Bool conflicts
            if (capitalizedType.equals("Bool"))
                capitalizedType = "Boolean";

            if (arrayType.getDimensions() == 1 && Utils.isPrimitive(arrayType)) {
                builder.append("[__env newJava").append(capitalizedType).append("ArrayFromArray:")
                        .append(var_name).append("]");
            } else {
                if (Utils.isPrimitive(arrayType)) {
                    builder.append("[__env newJavaObjectArrayFromArray:").append(var_name)
                            .append(" baseClass:[OJNIPrimitive").append(capitalizedType).append("Array class]")
                            .append(" dimensions:").append(dimensions).append("]");

                } else {
                    JavaClass argTypeJavaClass = OJNIClassLoader.getInstance().loadClass(typeString);

                    String resultClassString = "";
                    if (argTypeJavaClass != null && argTypeJavaClass.isInterface())
                        resultClassString = "@\"" + Utils.getSlashedClassName(typeString) + "\"";
                    else
                        resultClassString = "[" + getPrefix() + Utils.getShortClassName(typeString) + " class]";

                    builder.append("[__env newJavaObjectArrayFromArray:").append(var_name).append(" baseClass:")
                            .append(resultClassString).append(" dimensions:").append(dimensions).append("]");
                }
            }
        } else {
            if (Utils.isPrimitive(returnType)) {
                builder.append(var_name);
            } else {
                builder.append("[").append(var_name).append(" javaObject]");
            }
        }
        builder.append("];");
    } else { // getter
        builder.append("j").append(lowerCaseReturnType).append(" __obj = ").append("[__env get")
                .append(staticIdentifier).append(capitalized).append("Field:").append(selfIdentitifer)
                .append(" field:fid];").append(System.lineSeparator());

        builder.append(generateReturnObject(field.getType()));
    }

    builder.append(System.lineSeparator()).append("}");

    return builder.toString();
}

From source file:ru.objective.jni.tasks.builders.ClassBuilder.java

public String generateArgumentString(Method method) {
    StringBuilder builder = new StringBuilder();

    Type[] types = method.getArgumentTypes();
    LocalVariableTable localVariableTable = method.getLocalVariableTable();

    for (int i = 0, var_index = (method.isStatic() ? 0 : 1); i < types.length; i++, var_index++) {
        //            if (localVariableTable != null && localVariableTable.getLocalVariable(var_index, 0) == null)
        //                System.gc();
        Type type = types[i];//from   ww  w  .  j ava 2s.c  o m
        String var_name = "";
        if (localVariableTable == null) {
            var_name = "arg" + var_index;
        } else {
            LocalVariable lv = localVariableTable.getLocalVariable(var_index, 0);
            if (lv != null) {
                var_name = lv.getName();
            }
        }

        if (type.equals(Type.LONG) || type.equals(Type.DOUBLE))
            var_index++;

        if (Utils.isOccupiedWord(var_name)) {
            var_name = "_" + var_name;
        }

        builder.append(", ");

        if (Utils.isArrayType(type)) {
            ArrayType arrayType = (ArrayType) type;
            int dimensions = arrayType.getDimensions();
            String typeString = arrayType.getBasicType().toString();
            String capitalizedType = StringUtils.capitalize(typeString);

            // fix Boolean = Bool conflicts
            if (capitalizedType.equals("Bool"))
                capitalizedType = "Boolean";

            if (arrayType.getDimensions() == 1 && Utils.isPrimitive(arrayType)) {
                //builder.append("[").append(var_name).append(" rawArray]");
                builder.append("[__env newJava").append(capitalizedType).append("ArrayFromArray:")
                        .append(var_name).append("]");
            } else {
                if (Utils.isPrimitive(arrayType)) {
                    builder.append("[__env newJavaObjectArrayFromArray:").append(var_name)
                            .append(" baseClass:[OJNIPrimitive").append(capitalizedType).append("Array class]")
                            .append(" dimensions:").append(dimensions).append("]");

                } else {
                    JavaClass argTypeJavaClass = OJNIClassLoader.getInstance().loadClass(typeString);

                    String resultClassString = "";
                    if (argTypeJavaClass != null && argTypeJavaClass.isInterface())
                        resultClassString = "@\"" + Utils.getSlashedClassName(typeString) + "\"";
                    else
                        resultClassString = "[" + getPrefix() + Utils.getShortClassName(typeString) + " class]";

                    builder.append("[__env newJavaObjectArrayFromArray:").append(var_name).append(" baseClass:")
                            .append(resultClassString).append(" dimensions:").append(dimensions).append("]");
                }
            }
        } else {
            if (Utils.isPrimitive(type)) {
                builder.append(var_name);
            } else {
                builder.append("[").append(var_name).append(" javaObject]");
            }
        }
    }

    return builder.toString();
}

From source file:ru.objective.jni.tasks.builders.ClassBuilder.java

public String generateReturnObject(Type returnType) {
    StringBuilder builder = new StringBuilder();

    if (Utils.isArrayType(returnType)) {
        ArrayType arrReturnType = (ArrayType) returnType;
        int dimensions = arrReturnType.getDimensions();
        String capitalizedType = StringUtils.capitalize(arrReturnType.getBasicType().toString());

        // fix Boolean = Bool conflicts
        if (capitalizedType.equals("Bool"))
            capitalizedType = "Boolean";

        if (Utils.isPrimitive(arrReturnType)) {
            if (dimensions == 1) {
                builder.append("OJNIPrimitiveArray *__return = ");
                builder.append("[__env primitive").append(capitalizedType).append("ArrayFromJavaArray:__obj];");
            } else {
                builder.append("NSArray *__return = ");
                builder.append("[__env newArrayFromJavaObjectArray:__obj baseClass:[OJNIPrimitive")
                        .append(capitalizedType).append("Array class] classPrefix:@\"").append(getPrefix())
                        .append("\" dimensions:").append(dimensions).append("];");
            }// w  w  w .j a v a  2  s.c  o  m
        } else {
            builder.append("NSArray *__return = ");
            builder.append(
                    "[__env newArrayFromJavaObjectArray:__obj baseClass:[OJNIJavaObject class] classPrefix:@\"")
                    .append(getPrefix()).append("\" dimensions:").append(dimensions).append("];");
        }
    } else {
        if (Utils.isPrimitive(returnType)) {
            builder.append(PrimitiveTypeConverter.convertToOBJCType(returnType.toString()))
                    .append(" __return = ");
            builder.append("__obj;");
        } else {
            builder.append("id __return = ");
            builder.append("[OJNIJavaObject retrieveFromJavaObject:__obj classPrefix:@\"").append(getPrefix())
                    .append("\"];");
        }
    }

    builder.append(System.lineSeparator()).append("return __return;");

    return builder.toString();
}