List of usage examples for org.apache.commons.bcel6.classfile Method isStatic
public final boolean isStatic()
From source file:ru.objective.jni.tasks.builders.AbstractBuilder.java
protected String getHeaderDeclarationMethod(MethodExportInfo info, Method method, boolean overloaded) { StringBuilder stringBuilder = new StringBuilder(); String[] argumentTypes = Utility.methodSignatureArgumentTypes(method.getSignature()); String name = info.name;/*from ww w . java2s .co m*/ String methodReturnType = null; if (Utils.isConstructor(method)) { methodReturnType = "instancetype"; if (name.equals("<init>")) name = "init"; } else { if (Utils.isOccupiedWord(name)) { name = "_" + name; } methodReturnType = Utility.methodSignatureReturnType(method.getSignature()).toString(); methodReturnType = Utils.getBasicType(methodReturnType); if (!Utils.isPrimitive(method.getReturnType())) { JavaClass typeJavaClass = OJNIClassLoader.getInstance() .loadClass(method.getReturnType().toString()); if (typeJavaClass != null && typeJavaClass.isInterface()) methodReturnType = "id <" + getPrefix() + Utils.getShortClassName(methodReturnType) + ">"; else methodReturnType = getPrefix() + Utils.getShortClassName(methodReturnType) + " *"; } if (Utils.isArrayType(method.getReturnType())) methodReturnType = getStringArrayType(methodReturnType, (ArrayType) method.getReturnType()); else methodReturnType = PrimitiveTypeConverter.convertToOBJCType(methodReturnType); } stringBuilder.append((method.isStatic() ? "+" : "-") + " " + "(" + PrimitiveTypeConverter.convertToOBJCType(methodReturnType) + ")"); String[] nameParameters = name.split(":"); if (info.isCustom) overloaded = false; LocalVariableTable table = method.getLocalVariableTable(); if (argumentTypes.length == 0) stringBuilder.append(name); for (int i = 0, var_index = (method.isStatic() ? 0 : 1); i < argumentTypes.length; i++, var_index++) { Type javaType = method.getArgumentTypes()[i]; String type = argumentTypes[i]; String variable_name = ""; if (table == null) { variable_name = "arg" + var_index; } else { LocalVariable lv = table.getLocalVariable(var_index, 0); if (lv != null) { variable_name = lv.getName(); } } if (javaType.equals(Type.LONG) || javaType.equals(Type.DOUBLE)) var_index++; String nameParameter = (i < nameParameters.length ? nameParameters[i] : variable_name); type = Utils.getBasicType(type); String overloadedParameter = ""; if (overloaded) { overloadedParameter = "With" + (i == 0 ? StringUtils.capitalize(variable_name) : "") + Utils.getShortClassName(type);/*+ StringUtils.capitalize(utils.getShortClassName(type));*/ } if (!Utils.isPrimitive(javaType)) { JavaClass argTypeJavaClass = OJNIClassLoader.getInstance().loadClass(javaType.toString()); if (argTypeJavaClass != null && argTypeJavaClass.isInterface()) type = "id <" + getPrefix() + Utils.getShortClassName(type) + ">"; else type = getPrefix() + Utils.getShortClassName(type) + " *"; } if (Utils.isArrayType(javaType)) { if (overloaded) { int dimensions = ((ArrayType) javaType).getDimensions(); if (dimensions > 1) overloadedParameter += dimensions + "dimArray"; else overloadedParameter += "Array"; } type = getStringArrayType(type, (ArrayType) javaType); } else { type = PrimitiveTypeConverter.convertToOBJCType(type); } if (Utils.isOccupiedWord(variable_name)) { variable_name = "_" + variable_name; } stringBuilder.append(nameParameter + overloadedParameter + ":(" + type + ")" + variable_name + " "); } stringBuilder.append(";"); return stringBuilder.toString(); }
From source file:ru.objective.jni.tasks.builders.ClassBuilder.java
private String getMethodImplementation(Method method, String declaration) { StringBuilder builder = new StringBuilder(); String vars = generateArgumentString(method); builder.append(declaration).append(" {").append(System.lineSeparator()); builder.append("OJNIEnv *__env = [OJNIEnv currentEnv];").append(System.lineSeparator()); builder.append("jmethodID mid = [[OJNIMidManager sharedManager] methodIDFor"); if (method.isStatic()) builder.append("Static"); builder.append("Method:@\"" + method.getName() + "\" "); builder.append("signature:@\"" + method.getSignature() + "\" inClass:self.class];"); builder.append(System.lineSeparator()); // todo remove [self.class OJNIClass]; if (method.getReturnType().equals(Type.VOID)) { if (Utils.isConstructor(method)) { builder.append("jobject __obj = [__env newObject:[self.class OJNIClass] method:mid"); builder.append(vars).append("];").append(System.lineSeparator()); builder.append("return [super initWithJavaObject:__obj];"); } else {// ww w. j a va2 s . c o m if (method.isStatic()) { builder.append("[__env callStaticVoidMethodOnClass:[self.class OJNIClass] method:mid"); } else { builder.append("[__env callVoidMethodOnObject:[self javaObject] method:mid"); } builder.append(vars).append("];"); } } else { builder.append(generateCallMethod(method, vars)); builder.append(generateReturnObject(method.getReturnType())); } builder.append(System.lineSeparator()).append("}"); return builder.toString(); }
From source file:ru.objective.jni.tasks.builders.ClassBuilder.java
public String generateCallMethod(Method method, String vars) { StringBuilder builder = new StringBuilder(); Type returnType = method.getReturnType(); if (Utils.isArrayType(returnType) || !Utils.isPrimitive(returnType)) { if (method.isStatic()) builder.append("jobject __obj = [__env callStaticObject"); else// w ww .j a v a 2 s . c o m builder.append("jobject __obj = [__env callObject"); } else { builder.append("j").append(returnType.toString()).append(" __obj = [__env call"); if (method.isStatic()) builder.append("Static"); builder.append(StringUtils.capitalize(returnType.toString())); } if (method.isStatic()) builder.append("MethodOnClass:[self.class OJNIClass] method:mid"); else builder.append("MethodOnObject:[self javaObject] method:mid"); builder.append(vars).append("];").append(System.lineSeparator()); 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];/*w ww .ja v a 2 s. co 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(); }