Example usage for org.apache.commons.bcel6.classfile Field getType

List of usage examples for org.apache.commons.bcel6.classfile Field getType

Introduction

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

Prototype

public Type getType() 

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 2s. 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.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()));
            }/* w w w. j a 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 (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 . jav  a2 s .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();
}