List of usage examples for org.apache.commons.bcel6.generic ArrayType getDimensions
public int getDimensions()
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(); }