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

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

Introduction

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

Prototype

public int getDimensions() 

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   w w w  .ja va2 s.c  o  m*/
            : "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  a v a2 s.  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("];");
            }/*from www.j  av  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();
}