1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */ 2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/** 5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ******************************************************************************* 6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Copyright (C) 2001-2015, International Business Machines Corporation and 7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * others. All Rights Reserved. 8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ******************************************************************************* 9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test; 11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.io.BufferedReader; 13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.io.File; 14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.io.FileInputStream; 15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.io.IOException; 16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.io.InputStream; 17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.io.InputStreamReader; 18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Locale; 19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpublic final class TestUtil { 21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /** 22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Path to test data in icu4jtest.jar 23aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static final String DATA_PATH = "/android/icu/dev/data/"; 25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /** 27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Return an input stream on the data file at path 'name' rooted at the data path 28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static final InputStream getDataStream(String name) throws IOException { 30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin InputStream is = null; 31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try { 32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin is = TestUtil.class.getResourceAsStream(DATA_PATH + name); 33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } catch (Throwable t) { 34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin IOException ex = 35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new IOException("data resource '" + name + "' not found"); 36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ex.initCause(t); 37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin throw ex; 38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return is; 40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /** 43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Return a buffered reader on the data file at path 'name' rooted at the data path. 44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static final BufferedReader getDataReader(String name, String charset) throws IOException { 46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin InputStream is = getDataStream(name); 47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin InputStreamReader isr = 48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin charset == null 49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ? new InputStreamReader(is) 50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin : new InputStreamReader(is, charset); 51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return new BufferedReader(isr); 52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /** 55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Return a buffered reader on the data file at path 'name' rooted at the data path, 56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * using the provided encoding. 57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static final BufferedReader getDataReader(String name) 59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin throws IOException { 60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return getDataReader(name, null); 61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin static final char DIGITS[] = 64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin { 65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '0', 66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '1', 67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '2', 68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '3', 69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '4', 70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '5', 71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '6', 72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '7', 73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '8', 74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin '9', 75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'A', 76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'B', 77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'C', 78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'D', 79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'E', 80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'F', 81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'G', 82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'H', 83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'I', 84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'J', 85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'K', 86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'L', 87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'M', 88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'N', 89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'O', 90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'P', 91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'Q', 92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'R', 93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'S', 94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'T', 95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'U', 96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'V', 97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'W', 98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'X', 99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'Y', 100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 'Z' }; 101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /** 102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Return true if the character is NOT printable ASCII. The tab, 103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * newline and linefeed characters are considered unprintable. 104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static boolean isUnprintable(int c) { 106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return !(c >= 0x20 && c <= 0x7E); 107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /** 109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Escape unprintable characters using <backslash>uxxxx notation 110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * for U+0000 to U+FFFF and <backslash>Uxxxxxxxx for U+10000 and 111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * above. If the character is printable ASCII, then do nothing 112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * and return FALSE. Otherwise, append the escaped notation and 113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * return TRUE. 114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static boolean escapeUnprintable(StringBuffer result, int c) { 116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (isUnprintable(c)) { 117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append('\\'); 118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if ((c & ~0xFFFF) != 0) { 119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append('U'); 120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & (c >> 28)]); 121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & (c >> 24)]); 122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & (c >> 20)]); 123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & (c >> 16)]); 124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } else { 125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append('u'); 126aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & (c >> 12)]); 128aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & (c >> 8)]); 129aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & (c >> 4)]); 130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin result.append(DIGITS[0xF & c]); 131aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return true; 132aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return false; 134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 136aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin static class Lock { 137aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin private int count; 138aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 139aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin synchronized void inc() { 140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ++count; 141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin synchronized void dec() { 144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin --count; 145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 147aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin synchronized int count() { 148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return count; 149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 151aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin void go() { 152aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try { 153aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin while (count() > 0) { 154aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin synchronized (this) { 155aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin notifyAll(); 156aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 157aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Thread.sleep(50); 158aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 159aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } catch (InterruptedException e) { 160aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 161aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 162aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 163aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 164aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin static class TestThread extends Thread { 165aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Lock lock; 166aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Runnable target; 167aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 168aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin TestThread(Lock lock, Runnable target) { 169aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin this.lock = lock; 170aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin this.target = target; 171aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 172aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin lock.inc(); 173aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 174aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 175aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public void run() { 176aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try { 177aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin synchronized (lock) { 178aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin lock.wait(); 179aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 180aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin target.run(); 181aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } catch (InterruptedException e) { 182aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 183aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 184aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin lock.dec(); 185aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 186aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 187aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 188aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static void runUntilDone(Runnable[] targets) { 189aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (targets == null) { 190aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin throw new IllegalArgumentException("targets is null"); 191aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 192aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (targets.length == 0) { 193aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return; 194aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 195aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 196aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Lock lock = new Lock(); 197aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int i = 0; i < targets.length; ++i) { 198aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new TestThread(lock, targets[i]).start(); 199aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 200aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 201aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin lock.go(); 202aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 203aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static BufferedReader openUTF8Reader(String dir, String filename) throws IOException { 204aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return openReader(dir,filename,"UTF-8"); 205aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 206aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static BufferedReader openReader(String dir, String filename, String encoding) throws IOException { 207aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin File file = new File(dir + filename); 208aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return new BufferedReader( 209aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new InputStreamReader( 210aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new FileInputStream(file), 211aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin encoding), 212aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 4*1024); 213aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 214aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 215aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public enum JavaVendor { 216aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Unknown, 217aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Oracle, 218aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin IBM, 219aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Android 220aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 221aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 222aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static JavaVendor getJavaVendor() { 223aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin JavaVendor vendor = JavaVendor.Unknown; 224aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String javaVendorProp = System.getProperty("java.vendor", "").toLowerCase(Locale.US).trim(); 225aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (javaVendorProp.startsWith("ibm")) { 226aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin vendor = JavaVendor.IBM; 227aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } else if (javaVendorProp.startsWith("sun") || javaVendorProp.startsWith("oracle")) { 228aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin vendor = JavaVendor.Oracle; 229aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } else if (javaVendorProp.contains("android")) { 230aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin vendor = JavaVendor.Android; 231aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 232aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return vendor; 233aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 234aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 235aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public static int getJavaVersion() { 236aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin int ver = -1; 237aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String verstr = System.getProperty("java.version"); 238aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (verstr != null) { 239aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String[] numbers = verstr.split("\\."); 240aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try { 241aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ver = Integer.parseInt(numbers[1]); 242aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } catch (NumberFormatException e) { 243aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ver = -1; 244aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 245aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 246aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return ver; 247aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 248aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin} 249