Example usage for org.apache.commons.bcel6.classfile JavaClass isInterface

List of usage examples for org.apache.commons.bcel6.classfile JavaClass isInterface

Introduction

In this page you can find the example usage for org.apache.commons.bcel6.classfile JavaClass isInterface.

Prototype

public final boolean isInterface() 

Source Link

Usage

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

protected String getHeaderDeclarationField(String name, Field field, boolean setter) {
    StringBuilder builder = new StringBuilder();

    String returnType = Utility.signatureToString(field.getSignature());

    returnType = Utils.getBasicType(returnType);

    if (!Utils.isPrimitive(field.getType())) {
        JavaClass typeJavaClass = OJNIClassLoader.getInstance().loadClass(field.getType().toString());

        if (typeJavaClass != null && typeJavaClass.isInterface())
            returnType = "id <" + getPrefix() + Utils.getShortClassName(returnType) + ">";
        else//from  w ww .  j  a  v a 2  s.c o m
            returnType = getPrefix() + Utils.getShortClassName(returnType) + " *";
    }

    if (Utils.isArrayType(field.getType()))
        returnType = getStringArrayType(returnType, (ArrayType) field.getType());
    else
        returnType = PrimitiveTypeConverter.convertToOBJCType(returnType);

    String declSign = (field.isStatic() ? "+" : "-") + " ";

    String resultType = PrimitiveTypeConverter.convertToOBJCType(returnType);

    if (setter) {
        if (!field.isFinal()) {
            //generate set
            builder.append(declSign).append("(void)setProperty_").append(field.getName()).append(":(")
                    .append(resultType).append(")property_").append(field.getName()).append(";");
        }
    } else {
        //generate get
        builder.append(declSign);
        builder.append("(").append(resultType).append(")property_").append(field.getName()).append(";");
    }

    return builder.toString();
}

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  w ww  .j av a2s.  com

    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.AbstractBuilder.java

protected String getHeaderImportBlock(String superClassName, String[] interfaces, HashSet<String> dependencies,
        boolean implementation) {
    StringBuilder result = new StringBuilder();

    HashSet<String> importClassNames = new HashSet<>();
    HashSet<String> importInterfaceNames = new HashSet<>();

    if (interfaces != null) {
        for (String interfaceName : interfaces) {
            importInterfaceNames.add(interfaceName);
        }/*from  w ww.  ja  va 2 s .  c o  m*/
    }

    if (dependencies != null) {
        for (String dependency : dependencies) {
            importClassNames.add(dependency);
        }
    }

    if (superClassName != null && !Utils.isOBJCSystemClass(superClassName)) {
        //result.append(utils.getImportTemplate(getPrefix() + utils.getShortClassName(superClassName)));
        importClassNames.add(superClassName);
    }

    for (String importName : importInterfaceNames) {
        result.append(Utils.getImportTemplate(getPrefix() + Utils.getShortClassName(importName)));
    }

    // add environment import
    if (getJavaClass().getClassName().equals("java.lang.Object")) {
        result.append("#import \"OJNIJavaObject.h\"").append(System.lineSeparator());
    }

    for (String importName : importClassNames) {
        JavaClass importedClass = OJNIClassLoader.getInstance().loadClass(importName);

        //if (importName.equals(superClassName) || getJavaClass().isInterface() || (importedClass != null && importedClass.isInterface()))
        if (implementation) {
            if (importedClass != null && importedClass.isInterface())
                result.append(Utils.getImportTemplate(getPrefix() + Utils.getShortClassName(importName)));
            else
                result.append(Utils.getImportTemplate(getPrefix() + Utils.getShortClassName(importName)));
        } else {
            if (importName.equals(superClassName))
                result.append(Utils.getImportTemplate(getPrefix() + Utils.getShortClassName(importName)));
            else if (importedClass != null && importedClass.isInterface())
                result.append(Utils.getForwardInterfaceDeclarationTemplate(
                        getPrefix() + Utils.getShortClassName(importName)));
            else
                result.append(
                        Utils.getForwardDeclarationTemplate(getPrefix() + Utils.getShortClassName(importName)));
        }
    }

    if (getJavaClass().isInterface()) {
        result.append(Utils.getForwardInterfaceDeclarationTemplate("OJNIJavaObject"));
    }

    return result.toString();
}

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

@Override
protected void build(JavaClass javaClass) throws Exception {

    if (javaClass.isInterface())
        throw new BadParsingException("Cannot build class from interface " + javaClass.toString());

    if (Utils.isExportClass(javaClass, excludes, excludedPackages)) {

        StringBuilder declBuilder = new StringBuilder();
        StringBuilder implBuilder = new StringBuilder();

        Method[] methods = javaClass.getMethods();
        Field[] fields = javaClass.getFields();

        JavaClass[] interfaces = getInterfaces();
        String[] classInterfacesNames = null;

        if (interfaces != null) {
            ArrayList<String> resultInterfaces = new ArrayList<>(interfaces.length);

            for (JavaClass javaInterface : interfaces) {
                resultInterfaces.add(Utils.getShortClassName(javaInterface.getClassName()));
            }/*from w  ww. j  a  v a2 s.  c om*/

            if (resultInterfaces.size() > 0) {
                classInterfacesNames = new String[resultInterfaces.size()];

                resultInterfaces.toArray(classInterfacesNames);
            }
        }

        HashSet<String> methodDependencies = new HashSet<>();

        HashSet<Method> overloadedMethods = Utils.getOverloadedMethods(methods);

        for (Field field : fields) {
            // skip field if excluded
            if (Utils.isClassNameExcluded(field.getType().toString(), excludes, excludedPackages))
                continue;

            String fieldName = Utils.getFieldExportName(field);

            if (fieldName == null)
                continue;

            Type basicFieldType = Utils.basicTypeFromArrayType(field.getType());

            if (!Utils.isPrimitive(basicFieldType))
                methodDependencies.add(basicFieldType.toString());

            String declgetter = getHeaderDeclarationField(fieldName, field, false);
            String declsetter = getHeaderDeclarationField(fieldName, field, true);
            declBuilder.append(declgetter);
            declBuilder.append(System.lineSeparator());
            declBuilder.append(declsetter);
            declBuilder.append(System.lineSeparator());

            String implgetter = getFieldImplementation(field, declgetter, false);
            String implsetter = getFieldImplementation(field, declsetter, true);
            implBuilder.append(implgetter);
            implBuilder.append(System.lineSeparator());
            implBuilder.append(implsetter);
            implBuilder.append(System.lineSeparator());
        }

        for (Method method : methods) {

            MethodExportInfo info = Utils.getMethodExportInfo(method);
            String name = info.name;

            if (name == null)
                continue;

            ArrayList<String> deps = Utils.getMethodNonPrimitiveDependencies(method);

            if (deps != null) {
                boolean found = false;
                for (String dependency : deps) {
                    // skip method if excluded
                    if (Utils.isClassNameExcluded(dependency, excludes, excludedPackages)) {
                        found = true;
                        break;
                    }
                }
                if (found)
                    continue;

                methodDependencies.addAll(deps);
            }

            String decl = getHeaderDeclarationMethod(info, method, overloadedMethods.contains(method));
            declBuilder.append(decl);
            declBuilder.append(System.lineSeparator());

            String impl = getMethodImplementation(method, decl);
            implBuilder.append(impl);
            implBuilder.append(System.lineSeparator());
        }

        // add core string methods decls
        if (getJavaClass().getClassName().equals("java.lang.String")) {
            declBuilder.append("- (instancetype)initWithNSString:(NSString *)string;")
                    .append(System.lineSeparator())
                    .append("+ (instancetype)stringWithNSString:(NSString *)string;")
                    .append(System.lineSeparator()).append("- (NSString *)toNSString;")
                    .append(System.lineSeparator());
        }

        if (methodDependencies.size() > 0) {
            dependencies = methodDependencies;
        }

        String packageName = javaClass.getPackageName();
        String shortClassName = Utils.getShortClassName(packageName, javaClass.getClassName());

        String superClassName = Constants.OBJC_SYSTEM_CLASS;
        String headerImportBlock = "";
        String interfacesBlock = (interfaces != null ? getInterfacesBlock(interfaces) : "");

        JavaClass superClass = getSuperClass();

        if (superClass != null && Utils.isExportClass(superClass, excludes, excludedPackages)) {
            superClassName = superClass.getClassName();
        }

        headerImportBlock = getHeaderImportBlock(superClassName, classInterfacesNames, dependencies, false);

        String implImportBlock = "";
        if (headerImportBlock != null && !headerImportBlock.equals(""))
            implImportBlock = getHeaderImportBlock(superClassName, classInterfacesNames, dependencies, true);

        implBuilder.append(getOJNIMethodsImplementations());

        generate(packageName, shortClassName, interfacesBlock, Utils.getShortClassName(superClassName),
                headerImportBlock, declBuilder.toString(), "", implBuilder.toString(), implImportBlock);
    }
}

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.j  a  v  a 2s  .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  w ww  . j  a  va  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();
}

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

@Override
protected void build(JavaClass javaClass) throws Exception {

    if (!javaClass.isInterface())
        throw new BadParsingException("Cannot build interface from class " + javaClass.toString());

    if (Utils.isExportClass(javaClass, excludes, excludedPackages)) {

        StringBuilder declBuilder = new StringBuilder();

        Method[] methods = javaClass.getMethods();

        JavaClass[] interfaces = getInterfaces();
        String[] classInterfacesNames = null;

        if (interfaces != null) {
            ArrayList<String> resultInterfaces = new ArrayList<>(interfaces.length);

            for (JavaClass javaInterface : interfaces) {
                resultInterfaces.add(Utils.getShortClassName(javaInterface.getClassName()));
            }/* w w  w .ja  v  a 2  s .  c  om*/

            if (resultInterfaces.size() > 0) {
                classInterfacesNames = new String[resultInterfaces.size()];

                resultInterfaces.toArray(classInterfacesNames);
            }
        }

        HashSet<String> methodDependencies = new HashSet<>();

        HashSet<Method> overloadedMethods = Utils.getOverloadedMethods(methods);

        for (Method method : methods) {

            MethodExportInfo info = Utils.getMethodExportInfo(method);
            String name = info.name;

            if (name == null)
                continue;

            ArrayList<String> deps = Utils.getMethodNonPrimitiveDependencies(method);

            if (deps != null) {
                boolean found = false;
                for (String dependency : deps) {
                    // skip method if excluded
                    if (Utils.isClassNameExcluded(dependency, excludes, excludedPackages)) {
                        found = true;
                        break;
                    }
                }
                if (found)
                    continue;

                methodDependencies.addAll(deps);
            }

            String decl = getHeaderDeclarationMethod(info, method, overloadedMethods.contains(method));
            declBuilder.append(decl);
            declBuilder.append(System.lineSeparator());
        }

        if (methodDependencies.size() > 0) {
            dependencies = methodDependencies;
        }

        String packageName = javaClass.getPackageName();
        String shortClassName = Utils.getShortClassName(packageName, javaClass.getClassName());
        String interfacesBlock = getInterfacesBlock(interfaces);
        String headerImportBlock = getHeaderImportBlock(null, classInterfacesNames, dependencies, false);

        generate(packageName, shortClassName, headerImportBlock, interfacesBlock, declBuilder.toString());
    }
}

From source file:ru.objective.jni.tasks.DefaultTask.java

private void parseClass(JavaClass parsedClass) throws Exception {
    if (generatedClasses.indexOf(parsedClass.getClassName()) == -1) {
        generatedClasses.add(parsedClass.getClassName());
    } else {/*ww  w. j  av  a 2  s. co  m*/
        return;
    }

    AbstractBuilder builder = null;

    if (parsedClass.isInterface()) {
        builder = new InterfaceBuilder(parsedClass, prefix, excludes, excludedPackages);
    } else {
        builder = new ClassBuilder(parsedClass, prefix, excludes, excludedPackages);
    }

    JavaClass[] interfaces = builder.getInterfaces();
    JavaClass superClass = builder.getSuperClass();
    HashSet<String> dependencies = builder.getDependencies();

    if (interfaces != null) {
        for (JavaClass javaInterface : interfaces) {
            parseClass(javaInterface);
        }
    }

    if (dependencies != null) {
        for (String dependency : dependencies) {
            parseClass(dependency);
        }
    }

    if (superClass != null) {
        parseClass(superClass);
    }

    String header = builder.getHeader();
    String implementation = builder.getImplementation();

    String packageName = parsedClass.getPackageName();

    generate(packageName, Utils.getShortClassName(packageName, parsedClass.getClassName()), header,
            implementation);
}