List of usage examples for org.apache.commons.bcel6.classfile JavaClass getClassName
public String getClassName()
From source file:ru.objective.jni.tasks.builders.AbstractBuilder.java
protected String getInterfacesBlock(JavaClass[] interfaces) { if (interfaces == null || interfaces.length == 0) return (getJavaClass().isInterface() ? "<" + Constants.OBJC_SYSTEM_CLASS + ">" : ""); StringBuilder result = new StringBuilder(); result.append("<"); result.append(Constants.OBJC_SYSTEM_CLASS); result.append(", "); for (int i = 0; i < interfaces.length; i++) { JavaClass javaInterface = interfaces[i]; result.append(getPrefix()// w ww . ja va2s . c o m + Utils.getShortClassName(javaInterface.getPackageName(), javaInterface.getClassName())); if (i + 1 != interfaces.length) result.append(", "); } result.append(">"); 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())); }/*w ww. j av a 2 s . c o m*/ 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.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())); }/*from ww w . j ava 2s .co m*/ 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 {/*from w w w . j av a2 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); }
From source file:ru.objective.jni.utils.Utils.java
public static boolean isExportClass(JavaClass javaClass, String[] excludes, String[] excludedPackages) throws ClassNotFoundException { if (javaClass.isAnonymous() || javaClass.isAnnotation() || javaClass.isSynthetic()) return false; if (isClassNameExcluded(javaClass.getClassName(), excludes, excludedPackages)) return false; try {//www .j a v a 2 s . com JavaClass[] interfaces = javaClass.getAllInterfaces(); JavaClass[] supers = javaClass.getSuperClasses(); for (JavaClass superClass : supers) { if (isClassNameExcluded(superClass.getClassName(), excludes, excludedPackages)) return false; } for (JavaClass superInterface : interfaces) { if (isClassNameExcluded(superInterface.getClassName(), excludes, excludedPackages)) return false; } } catch (ClassNotFoundException cnf) { System.out.println(); System.out.println("WARNING! One of superclass or interface of class " + javaClass.getClassName() + " does not included in classpath and will skip. Reason: " + cnf.getLocalizedMessage()); return false; // ignore classes that does not included in classpath } return true; }