< prev index next >

src/jdk.jextract/share/classes/com/sun/tools/jextract/Utils.java

Print this page




 104 
 105         StringBuilder sb = new StringBuilder();
 106         if (pkg != null && ! pkg.isEmpty()) {
 107             sb.append(pkg.replace('.', '/'));
 108             if (sb.charAt(sb.length() - 1) != '/') {
 109                 sb.append('/');
 110             }
 111         }
 112         sb.append(name);
 113         for (String n: nested) {
 114             sb.append('$');
 115             sb.append(n);
 116         }
 117         return sb.toString();
 118     }
 119 
 120     public static String getName(Type type) {
 121         return LayoutUtils.getName(type);
 122     }
 123 
 124     public static String ClassToDescriptor(Class<?> cls) {
 125         if (cls.isArray()) {
 126             return cls.getName();
 127         }
 128         if (cls.isPrimitive()) {
 129             switch (cls.getTypeName()) {
 130                 case "int":
 131                     return "I";
 132                 case "long":
 133                     return "J";
 134                 case "byte":
 135                     return "B";
 136                 case "char":
 137                     return "C";
 138                 case "float":
 139                     return "F";
 140                 case "double":
 141                     return "D";
 142                 case "short":
 143                     return "S";
 144                 case "boolean":
 145                     return "Z";
 146                 case "void":
 147                     return "V";
 148             }
 149         }
 150         // assuming reference
 151         return "L" + cls.getName() + ";";
 152     }
 153 
 154     public static String DescriptorToBinaryName(String descriptor) {
 155         final char[] ar = descriptor.trim().toCharArray();
 156         switch (ar[0]) {
 157             case '(':
 158                 throw new IllegalArgumentException("Method descriptor is not allowed");
 159             case 'B':
 160                 return "byte";
 161             case 'C':
 162                 return "char";
 163             case 'D':
 164                 return "double";
 165             case 'F':
 166                 return "float";
 167             case 'I':
 168                 return "int";
 169             case 'J':
 170                 return "long";
 171             case 'S':
 172                 return "short";
 173             case 'Z':
 174                 return "boolean";
 175         }
 176 
 177         StringBuilder sb = new StringBuilder();
 178         if (ar[0] == 'L') {
 179             for (int i = 1; i < ar.length && ar[i] != ';'; i++) {
 180                 if (ar[i] == '/') {
 181                     sb.append('.');
 182                 }
 183                 if (!Character.isJavaIdentifierPart(ar[i])) {
 184                     throw new IllegalArgumentException("Malformed descriptor");
 185                 }
 186                 sb.append(ar[i]);
 187             }
 188             return sb.toString();
 189         }
 190 
 191         if (ar[0] == '[') {
 192             int depth = 1;
 193             while (ar[depth] == '[') depth++;
 194             sb.append(DescriptorToBinaryName(descriptor.substring(depth)));
 195             for (int i = 0; i < depth; i++) {
 196                 sb.append("[]");
 197             }
 198             return sb.toString();
 199         }
 200 
 201         throw new IllegalArgumentException("Malformed descriptor");
 202     }
 203 
 204     public static Layout getLayout(Type type) {
 205         return LayoutUtils.getLayout(type);
 206     }
 207 
 208     public static Function getFunction(Type type) {
 209         return LayoutUtils.getFunction(type);
 210     }
 211 
 212     public static Class<?> unboxIfNeeded(Class<?> clazz) {
 213         if (clazz == Boolean.class) {
 214             return boolean.class;
 215         } else if (clazz == Void.class) {
 216             return void.class;
 217         } else if (clazz == Byte.class) {
 218             return byte.class;
 219         } else if (clazz == Character.class) {
 220             return char.class;
 221         } else if (clazz == Short.class) {
 222             return short.class;
 223         } else if (clazz == Integer.class) {


 104 
 105         StringBuilder sb = new StringBuilder();
 106         if (pkg != null && ! pkg.isEmpty()) {
 107             sb.append(pkg.replace('.', '/'));
 108             if (sb.charAt(sb.length() - 1) != '/') {
 109                 sb.append('/');
 110             }
 111         }
 112         sb.append(name);
 113         for (String n: nested) {
 114             sb.append('$');
 115             sb.append(n);
 116         }
 117         return sb.toString();
 118     }
 119 
 120     public static String getName(Type type) {
 121         return LayoutUtils.getName(type);
 122     }
 123 
















































































 124     public static Layout getLayout(Type type) {
 125         return LayoutUtils.getLayout(type);
 126     }
 127 
 128     public static Function getFunction(Type type) {
 129         return LayoutUtils.getFunction(type);
 130     }
 131 
 132     public static Class<?> unboxIfNeeded(Class<?> clazz) {
 133         if (clazz == Boolean.class) {
 134             return boolean.class;
 135         } else if (clazz == Void.class) {
 136             return void.class;
 137         } else if (clazz == Byte.class) {
 138             return byte.class;
 139         } else if (clazz == Character.class) {
 140             return char.class;
 141         } else if (clazz == Short.class) {
 142             return short.class;
 143         } else if (clazz == Integer.class) {
< prev index next >