1 package org.jicengine.expression; 2 3 import org.jicengine.operation.StaticValue; 4 import java.util.Map ; 5 import java.util.HashMap ; 6 17 18 public class ClassParser extends StaticValueParser { 19 20 public static final char INNERCLASS_SEPARATOR = '$'; 21 public static final String ARRAY_BRACKETS = "[]"; 22 23 public static final ClassParser INSTANCE = new ClassParser(); 24 25 private static final Map primitives = new HashMap (); 26 static { 27 primitives.put("int", Integer.TYPE); 28 primitives.put("double", Double.TYPE); 29 primitives.put("long", Long.TYPE); 30 primitives.put("float", Float.TYPE); 31 primitives.put("boolean", Boolean.TYPE); 32 primitives.put("char", Character.TYPE); 33 primitives.put("byte", Byte.TYPE); 34 primitives.put("String", String .class); 36 primitives.put("short", Short.TYPE); 37 } 38 39 private static final Map primitiveArrays = new HashMap (); 40 static { 41 primitiveArrays.put("int[]", new int[0].getClass()); 42 primitiveArrays.put("double[]", new double[0].getClass()); 43 primitiveArrays.put("long[]", new long[0].getClass()); 44 primitiveArrays.put("float[]", new float[0].getClass()); 45 primitiveArrays.put("boolean[]", new boolean[0].getClass()); 46 primitiveArrays.put("char[]", new char[0].getClass()); 47 primitiveArrays.put("byte[]", new byte[0].getClass()); 48 primitiveArrays.put("short[]", new short[0].getClass()); 49 50 primitiveArrays.put("String[]", new String [0].getClass()); 52 } 53 54 public Object parseValue(String expression) throws SyntaxException 55 { 56 char[] chars = expression.toCharArray(); 57 char character; 58 if( Character.isLetter(chars[0]) ){ 59 for (int i = 1; i < chars.length; i++) { 60 character = chars[i]; 61 if( character == OPERATION_SEPARATOR || Character.isLetterOrDigit(character) || character == '_' || character == INNERCLASS_SEPARATOR ){ 62 } 64 else { 65 return null; 66 } 67 } 68 try { 69 return toClass(expression); 70 } catch (ClassNotFoundException e){ 71 throw new SyntaxException(e.toString()); 72 } 73 } 74 else { 75 return null; 76 } 77 } 78 79 public static Class toClass(String classExpression) throws ClassNotFoundException 80 { 81 Class parsedClass; 82 if(classExpression.endsWith(ARRAY_BRACKETS)) { 83 85 Class primitiveArray = (Class ) primitiveArrays.get(classExpression); 86 if( primitiveArray != null ){ 87 parsedClass = primitiveArray; 88 } 89 else { 90 String elementClassName = classExpression.substring(0, classExpression.lastIndexOf("[]")); 93 String parsedArrayClassName = "[L" + elementClassName + ";"; 94 parsedClass = toClass(parsedArrayClassName); 95 } 96 } 97 else { 98 Class primitive = (Class ) primitives.get(classExpression); 100 if( primitive != null ){ 101 parsedClass = primitive; 102 } 103 else { 104 ClassLoader loader = ClassLoaderResolver.getClassLoader(ClassParser.class); 105 parsedClass = Class.forName(classExpression, true, loader); 106 } 107 } 108 return parsedClass; 109 } 110 } 111 | Popular Tags |