blob: 0076ee75c32638abb31cc5e071e7a18a12e9df85 [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 2001-2010, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.impl;
import com.ibm.icu.util.VersionInfo;
public final class ICUDebug {
private static String params;
static {
try {
params = System.getProperty("ICUDebug");
}
catch (SecurityException e) {
}
}
private static boolean debug = params != null;
private static boolean help = debug && (params.equals("") || params.indexOf("help") != -1);
static {
if (debug) {
System.out.println("\nICUDebug=" + params);
}
}
public static final String javaVersionString = System.getProperty("java.version", "0");
public static final boolean isJDK14OrHigher;
public static final VersionInfo javaVersion;
public static VersionInfo getInstanceLenient(String s) {
// Extracting ASCII numbers up to 4 delimited by
// any non digit characters
int[] ver = new int[4];
boolean numeric = false;
int i = 0, vidx = 0;
while (i < s.length()) {
char c = s.charAt(i++);
if (c < '0' || c > '9') {
if (numeric) {
if (vidx == 3) {
// up to 4 numbers
break;
}
numeric = false;
vidx++;
}
} else {
if (numeric) {
ver[vidx] = ver[vidx] * 10 + (c - '0');
if (ver[vidx] > 255) {
// VersionInfo does not support numbers
// greater than 255. In such case, we
// ignore the number and the rest
ver[vidx] = 0;
break;
}
} else {
numeric = true;
ver[vidx] = c - '0';
}
}
}
return VersionInfo.getInstance(ver[0], ver[1], ver[2], ver[3]);
}
static {
javaVersion = getInstanceLenient(javaVersionString);
VersionInfo java14Version = VersionInfo.getInstance("1.4.0");
isJDK14OrHigher = javaVersion.compareTo(java14Version) >= 0;
}
public static boolean enabled() {
return debug;
}
public static boolean enabled(String arg) {
if (debug) {
boolean result = params.indexOf(arg) != -1;
if (help) System.out.println("\nICUDebug.enabled(" + arg + ") = " + result);
return result;
}
return false;
}
public static String value(String arg) {
String result = "false";
if (debug) {
int index = params.indexOf(arg);
if (index != -1) {
index += arg.length();
if (params.length() > index && params.charAt(index) == '=') {
index += 1;
int limit = params.indexOf(",", index);
result = params.substring(index, limit == -1 ? params.length() : limit);
} else {
result = "true";
}
}
if (help) System.out.println("\nICUDebug.value(" + arg + ") = " + result);
}
return result;
}
// static public void main(String[] args) {
// // test
// String[] tests = {
// "1.3.0",
// "1.3.0_02",
// "1.3.1ea",
// "1.4.1b43",
// "___41___5",
// "x1.4.51xx89ea.7f",
// "1.6_2009",
// "10-100-1000-10000",
// "beta",
// "0",
// };
// for (int i = 0; i < tests.length; ++i) {
// System.out.println(tests[i] + " => " + getInstanceLenient(tests[i]));
// }
// }
}