📄 invokerhelper.java
字号:
} return newlist; } else { throw new BitwiseNegateEvaluatingException("Cannot bitwise negate type " + value.getClass().getName() + ", value " + value); } } public static boolean isCase(Object switchValue, Object caseExpression) { return asBool(invokeMethod(caseExpression, "isCase", new Object[]{switchValue})); } public static boolean compareIdentical(Object left, Object right) { return left == right; } public static boolean compareEqual(Object left, Object right) { return getInstance().objectsEqual(left, right); } public static Matcher findRegex(Object left, Object right) { return getInstance().objectFindRegex(left, right); } public static boolean matchRegex(Object left, Object right) { return getInstance().objectMatchRegex(left, right); } public static Pattern regexPattern(Object regex) { return getInstance().regexPattern(regex); } public static boolean compareNotEqual(Object left, Object right) { return !getInstance().objectsEqual(left, right); } public static boolean compareLessThan(Object left, Object right) { return getInstance().compareTo(left, right) < 0; } public static boolean compareLessThanEqual(Object left, Object right) { return getInstance().compareTo(left, right) <= 0; } public static boolean compareGreaterThan(Object left, Object right) { return getInstance().compareTo(left, right) > 0; } public static boolean compareGreaterThanEqual(Object left, Object right) { return getInstance().compareTo(left, right) >= 0; } public static Integer compareTo(Object left, Object right) { int answer = getInstance().compareTo(left, right); if (answer == 0) { return ZERO; } else { return answer > 0 ? ONE : MINUS_ONE; } } public static Tuple createTuple(Object[] array) { return new Tuple(array); } public static SpreadList spreadList(Object value) { if (value instanceof List) { // value is a list. Object[] values = new Object[((List) value).size()]; int index = 0; Iterator it = ((List) value).iterator(); for (; it.hasNext();) { values[index++] = it.next(); } return new SpreadList(values); } else { throw new SpreadListEvaluatingException("Cannot spread the type " + value.getClass().getName() + ", value " + value); } } public static SpreadMap spreadMap(Object value) { if (value instanceof Map) { Object[] values = new Object[((Map) value).keySet().size() * 2]; int index = 0; Iterator it = ((Map) value).keySet().iterator(); for (; it.hasNext();) { Object key = it.next(); values[index++] = key; values[index++] = ((Map) value).get(key); } return new SpreadMap(values); } else { throw new SpreadMapEvaluatingException("Cannot spread the map " + value.getClass().getName() + ", value " + value); } } public static List createList(Object[] values) { ArrayList answer = new ArrayList(values.length); for (int i = 0; i < values.length; i++) { if (values[i] instanceof SpreadList) { SpreadList slist = (SpreadList) values[i]; for (int j = 0; j < slist.size(); j++) { answer.add(slist.get(j)); } } else { answer.add(values[i]); } } return answer; } public static Map createMap(Object[] values) { Map answer = new HashMap(values.length / 2); int i = 0; while (i < values.length - 1) { if ((values[i] instanceof SpreadMap) && (values[i+1] instanceof Map)) { Map smap = (Map) values[i+1]; Iterator iter = smap.keySet().iterator(); for (; iter.hasNext(); ) { Object key = (Object) iter.next(); answer.put(key, smap.get(key)); } i+=2; } else { answer.put(values[i++], values[i++]); } } return answer; } public static List createRange(Object from, Object to, boolean inclusive) { if (!inclusive) { if (compareEqual(from,to)){ return new EmptyRange((Comparable)from); } if (compareGreaterThan(from, to)) { to = invokeMethod(to, "next", EMPTY_ARGS); } else { to = invokeMethod(to, "previous", EMPTY_ARGS); } } if (from instanceof Integer && to instanceof Integer) { return new IntRange(asInt(from), asInt(to)); } else { return new ObjectRange((Comparable) from, (Comparable) to); } } public static int asInt(Object value) { return getInstance().asInt(value); } public static void assertFailed(Object expression, Object message) { if (message == null || "".equals(message)) { throw new AssertionError("Expression: " + expression); } else { throw new AssertionError("" + message + ". Expression: " + expression); } } public static Object runScript(Class scriptClass, String[] args) { Binding context = new Binding(args); Script script = createScript(scriptClass, context); return invokeMethod(script, "run", EMPTY_ARGS); } public static Script createScript(Class scriptClass, Binding context) { // for empty scripts if (scriptClass == null) { return new Script() { public Object run() { return null; } }; } try { final GroovyObject object = (GroovyObject) scriptClass.newInstance(); Script script = null; if (object instanceof Script) { script = (Script) object; } else { // it could just be a class, so lets wrap it in a Script wrapper // though the bindings will be ignored script = new Script() { public Object run() { object.invokeMethod("main", EMPTY_MAIN_ARGS); return null; } }; setProperties(object, context.getVariables()); } script.setBinding(context); return script; } catch (Exception e) { throw new GroovyRuntimeException("Failed to create Script instance for class: " + scriptClass + ". Reason: " + e, e); } } /** * Sets the properties on the given object * * @param object * @param map */ public static void setProperties(Object object, Map map) { getMetaClass(object).setProperties(object, map); } public static String getVersion() { String version = null; Package p = Package.getPackage("groovy.lang"); if (p != null) { version = p.getImplementationVersion(); } if (version == null) { version = ""; } return version; } /** * Allows conversion of arrays into a mutable List * * @return the array as a List */ protected static List primitiveArrayToList(Object array) { int size = Array.getLength(array); List list = new ArrayList(size); for (int i = 0; i < size; i++) { list.add(Array.get(array, i)); } return list; } /** * Writes the given object to the given stream */ public static void write(Writer out, Object object) throws IOException { if (object instanceof String) { out.write((String) object); } else if (object instanceof Object[]) { out.write(toArrayString((Object[]) object)); } else if (object instanceof Map) { out.write(toMapString((Map) object)); } else if (object instanceof Collection) { out.write(toListString((Collection) object)); } else if (object instanceof Writable) { Writable writable = (Writable) object; writable.writeTo(out); } else if (object instanceof InputStream || object instanceof Reader) { // Copy stream to stream Reader reader; if (object instanceof InputStream) { reader = new InputStreamReader((InputStream) object); } else { reader = (Reader) object; } char[] chars = new char[8192]; int i; while ((i = reader.read(chars)) != -1) { out.write(chars, 0, i); } reader.close(); } else { out.write(toString(object)); } } public static Object box(boolean value) { return value ? Boolean.TRUE : Boolean.FALSE; } public static Object box(byte value) { return new Byte(value); } public static Object box(char value) { return new Character(value); } public static Object box(short value) { return new Short(value); } public static Object box(int value) { return integerValue(value); } public static Object box(long value) { return new Long(value); } public static Object box(float value) { return new Float(value); } public static Object box(double value) { return new Double(value); } public static byte byteUnbox(Object value) { Number n = (Number) asType(value, Byte.class); return n.byteValue(); } public static char charUnbox(Object value) { Character n = (Character) asType(value, Character.class); return n.charValue(); } public static short shortUnbox(Object value) { Number n = (Number) asType(value, Short.class); return n.shortValue(); } public static int intUnbox(Object value) { Number n = (Number) asType(value, Integer.class); return n.intValue(); } public static boolean booleanUnbox(Object value) { Boolean n = (Boolean) asType(value, Boolean.class); return n.booleanValue(); } public static long longUnbox(Object value) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -